MDX脚本 - 在同一轴上混合空和非空

时间:2017-03-08 10:29:52

标签: mdx cube

我想请求您帮助理解MDX查询的主要逻辑。我想从多维数据集中查询不同的维度。但是:在某些情况下我想隐藏NULL值,但在其他方面它仍然需要。在我的情况下,我想提供日期周和它在该时间段内的每一天的日期。 (即使它没有数据)内容将是订单号,位置号和公司,当然还有KPI:OTD_customer。我多次尝试修复null值问题,但我是MDX的初学者。我尝试使用 NON EMPTY 关键字以及非空功能,但仍然没有希望的结果。另一个更复杂的事情是过滤时间段的日期:根据实际日期过去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]

我应该在哪里使用过滤条件?查询多维数据集结果的最佳方法是什么?当它在普通关系数据库中时,我会为此目的使用一个简单的连接。但是在MDX中我没有看到脚本中左连接和内连接的可能性。根据我的理解,孔轴可能有可能过滤空值。你有什么主意吗? (感谢您阅读)可以找到当前结果示例here

1 个答案:

答案 0 :(得分:1)

非空功能用于过滤空轴(计算输出时)。 NonEmpty 函数执行set的计算。所以,如果你运行:

Non Empty {Set1} * {Set2}

您将只获得交叉连接的非空记录。 如果您运行:

NonEmpty({Set1} * {Set2}, [Measures].[NonEmptyMeasure])

你会得到相同的结果,但机制有点不同。如果您只想过滤特定的集合,可以在这些集合周围使用 NonEmpty

{Set1} * NonEmpty({Set2}, [Measures].[NonEmptyMeasure])

不会过滤Set1。尽管如此,Set1的所有成员都将与Set2的所有非空成员交叉连接。最有可能的不是你想要的。 您有许多额外的属性加入到您的日期。期望他们为空记录返回什么?我猜你想要返回所有成员,比如说,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 |
=======================================

这是希望的结果吗?