MDX 脚本 - 在同一轴上混合空和非空
MDX script - mix empty and non empty on the same axis
请大家帮忙理解MDX查询的主要逻辑。我想查询多维数据集的不同维度。但是:在某些情况下我想隐藏 NULL 值,但在其他方面仍然需要它。在我的例子中,我想提供日期周和时间段内每一天的日期。 (即使没有数据)内容就是订单号,职位号和公司,当然还有KPI:OTD_customer。我多次尝试修复空值问题,但我是 MDX 的初学者。我尝试使用 NON EMPTY 关键字和 Nonempty 函数,但仍然没有得到想要的结果。一件更复杂的事情是过滤时间段的日期:基于过去 15 周 的实际日期。 (这部分工作正常)
> SELECT NON EMPTY
> { [OTD_customer_new] } ON COLUMNS, NON EMPTY
> {
> (
> (( strtoset("LASTPERIODS(15,([Date - Plan Delivery Date].[Calendar Week].&[" + left(ltrim("2017 KW 10"),4) +" KW " + right(ltrim("2017 KW 10"),2) + "]) ) ")
> , [Order Number].[Order Number].[Order Number].ALLMEMBERS
> , [Position Number].[Position Number].[Position Number].ALLMEMBERS
> ,[Date - Plan Delivery Date].[Day of the Week].ALLMEMBERS
> ,[Group Structure].[Group Structure].ALLMEMBERS
> ) )
> *
> ([Date - Plan Delivery Date].[Date].[All].FirstChild:
> tail
> ( filter
> ( [Date - Plan Delivery Date].[Date].[All].Children,
> [Date - Plan Delivery Date].[Date].CurrentMember.Name <= Format(Now(), "yyyyMMdd")
> ), 1
> ).item(0)
> ))
> }
> ON ROWS
> FROM [ProductionCube]
我应该在where条件下使用过滤器吗?从多维数据集查询结果的最佳方式是什么?当它在正常关系数据库中时,我会为此目的使用简单的连接。但是在 MDX 中,我看不到脚本中左连接和内连接的可能性。根据我的理解,孔轴可能有过滤空值的可能性。你有什么主意吗? (感谢您的阅读)当前结果示例可以找到here
Non Empty 函数旨在过滤空轴(计算输出时)。 NonEmpty 函数计算集合。所以,如果你 运行:
Non Empty {Set1} * {Set2}
您只会得到交叉连接的非空记录。
如果你 运行:
NonEmpty({Set1} * {Set2}, [Measures].[NonEmptyMeasure])
你会得到相同的结果,但机制有点不同。如果您只想过滤特定的集合,您可以在这些集合周围使用 NonEmpty:
{Set1} * NonEmpty({Set2}, [Measures].[NonEmptyMeasure])
Set1 不会被过滤。尽管如此,Set1 的所有成员都将与 Set2 的所有非空成员交叉连接。这很可能不是您想要的。
你有许多额外的属性加入到你的日期。对于空记录,他们期望 return 什么?我可能猜想你想要 return All 成员,比如说,Set1 是一个日期集,Set2 是一个公司集:
NonEmpty({Set1} * {Set2}, [Measures].[NonEmptyMeasure]) + { {Set1} - NonEmpty({Set1}, [Measures].[NonEmptyMeasure])} * {Set2}.Item(0).Parent
解释:
1. NonEmpty({Set1} * {Set2}, [Measures].[NonEmptyMeasure]) -- returns non-empty records
2. {Set1} - NonEmpty({Set1}, [Measures].[NonEmptyMeasure]) -- returns empty dates
3. {Set2}.Item(0).Parent -- returns All member
结果将如下所示:
|=====================================|
| 2016 week 51 | Company1 | 1 |
| 2016 week 51 | Company2 | 1 |
| 2016 week 51 | Company3 | 1 |
| 2016 week 52 | All companies | NULL |
=======================================
是不是想要的结果?
请大家帮忙理解MDX查询的主要逻辑。我想查询多维数据集的不同维度。但是:在某些情况下我想隐藏 NULL 值,但在其他方面仍然需要它。在我的例子中,我想提供日期周和时间段内每一天的日期。 (即使没有数据)内容就是订单号,职位号和公司,当然还有KPI:OTD_customer。我多次尝试修复空值问题,但我是 MDX 的初学者。我尝试使用 NON EMPTY 关键字和 Nonempty 函数,但仍然没有得到想要的结果。一件更复杂的事情是过滤时间段的日期:基于过去 15 周 的实际日期。 (这部分工作正常)
> SELECT NON EMPTY
> { [OTD_customer_new] } ON COLUMNS, NON EMPTY
> {
> (
> (( strtoset("LASTPERIODS(15,([Date - Plan Delivery Date].[Calendar Week].&[" + left(ltrim("2017 KW 10"),4) +" KW " + right(ltrim("2017 KW 10"),2) + "]) ) ")
> , [Order Number].[Order Number].[Order Number].ALLMEMBERS
> , [Position Number].[Position Number].[Position Number].ALLMEMBERS
> ,[Date - Plan Delivery Date].[Day of the Week].ALLMEMBERS
> ,[Group Structure].[Group Structure].ALLMEMBERS
> ) )
> *
> ([Date - Plan Delivery Date].[Date].[All].FirstChild:
> tail
> ( filter
> ( [Date - Plan Delivery Date].[Date].[All].Children,
> [Date - Plan Delivery Date].[Date].CurrentMember.Name <= Format(Now(), "yyyyMMdd")
> ), 1
> ).item(0)
> ))
> }
> ON ROWS
> FROM [ProductionCube]
我应该在where条件下使用过滤器吗?从多维数据集查询结果的最佳方式是什么?当它在正常关系数据库中时,我会为此目的使用简单的连接。但是在 MDX 中,我看不到脚本中左连接和内连接的可能性。根据我的理解,孔轴可能有过滤空值的可能性。你有什么主意吗? (感谢您的阅读)当前结果示例可以找到here
Non Empty 函数旨在过滤空轴(计算输出时)。 NonEmpty 函数计算集合。所以,如果你 运行:
Non Empty {Set1} * {Set2}
您只会得到交叉连接的非空记录。 如果你 运行:
NonEmpty({Set1} * {Set2}, [Measures].[NonEmptyMeasure])
你会得到相同的结果,但机制有点不同。如果您只想过滤特定的集合,您可以在这些集合周围使用 NonEmpty:
{Set1} * NonEmpty({Set2}, [Measures].[NonEmptyMeasure])
Set1 不会被过滤。尽管如此,Set1 的所有成员都将与 Set2 的所有非空成员交叉连接。这很可能不是您想要的。 你有许多额外的属性加入到你的日期。对于空记录,他们期望 return 什么?我可能猜想你想要 return All 成员,比如说,Set1 是一个日期集,Set2 是一个公司集:
NonEmpty({Set1} * {Set2}, [Measures].[NonEmptyMeasure]) + { {Set1} - NonEmpty({Set1}, [Measures].[NonEmptyMeasure])} * {Set2}.Item(0).Parent
解释:
1. NonEmpty({Set1} * {Set2}, [Measures].[NonEmptyMeasure]) -- returns non-empty records
2. {Set1} - NonEmpty({Set1}, [Measures].[NonEmptyMeasure]) -- returns empty dates
3. {Set2}.Item(0).Parent -- returns All member
结果将如下所示:
|=====================================|
| 2016 week 51 | Company1 | 1 |
| 2016 week 51 | Company2 | 1 |
| 2016 week 51 | Company3 | 1 |
| 2016 week 52 | All companies | NULL |
=======================================
是不是想要的结果?