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

MDX脚本-在同一轴上混合空和非空,mdx,cube,Mdx,Cube,我想请您帮助理解MDX查询的主要逻辑。我想从多维数据集中查询不同的维度。但是:在某些情况下,我希望隐藏空值,但在另一个维度中仍然需要它。在我的情况下,我想提供日期周和it日期的时间段内的每一天。(即使没有数据)内容将是订单号、职位号和公司,当然还有KPI:OTD_客户。我曾多次尝试解决空值问题,但我是MDX的初学者。我尝试使用非空关键字和非空函数,但仍然没有达到预期的效果。一件更复杂的事情是过滤时间段的日期:基于过去15周的实际日期。(这部分工作正常) >选择非空 >{[OTD_customer

我想请您帮助理解MDX查询的主要逻辑。我想从多维数据集中查询不同的维度。但是:在某些情况下,我希望隐藏空值,但在另一个维度中仍然需要它。在我的情况下,我想提供日期周和it日期的时间段内的每一天。(即使没有数据)内容将是订单号、职位号和公司,当然还有KPI:OTD_客户。我曾多次尝试解决空值问题,但我是MDX的初学者。我尝试使用非空关键字和非空函数,但仍然没有达到预期的效果。一件更复杂的事情是过滤时间段的日期:基于过去15周的实际日期。(这部分工作正常)

>选择非空
>{[OTD_customer_new]}列上,非空
>    { 
>    (
>((strtoset(“最后期限(15,([日期-计划交付日期][日历周])和[”+左(ltrim(“2017 KW 10”),4)+“KW”+右(ltrim(“2017 KW 10”),2)+“]))
>,[订单号].[订单号].[订单号].所有成员
>,[职位编号].[职位编号].[职位编号].所有成员
>,[Date-计划交付日期].[Day of the Week]。所有成员
>,[Group Structure]。[Group Structure]。所有成员
>    )  )  
>    *
>([Date-计划交付日期][Date][All]。第一个孩子:
>尾巴
>(过滤器
>([Date-计划交付日期][Date][All]。子项,
>[日期-计划交付日期][日期].CurrentMember.Name),1
>)。第(0)项
>     ))
>    } 
>成排
>来自[ProductionCube]

我应该在什么情况下使用过滤器?从多维数据集查询结果的最佳方式是什么?当它在正常关系数据库中时,我会为此使用一个简单的连接。。但在MDX中,我看不到脚本中使用左连接和内部连接的可能性。根据我的理解,孔轴可能会过滤空值。你知道吗?(感谢阅读)当前结果示例可以在非空函数中找到,该函数用于过滤空轴(计算输出时)。非空函数执行集合的计算。因此,如果您运行:

Non Empty {Set1} * {Set2}
NonEmpty({Set1} * {Set2}, [Measures].[NonEmptyMeasure])
您将只获得交叉连接的非空记录。 如果您运行:

Non Empty {Set1} * {Set2}
NonEmpty({Set1} * {Set2}, [Measures].[NonEmptyMeasure])
你会得到同样的结果,但是机械师有点不同。如果只想筛选特定的集合,可以在这些集合周围使用非空

{Set1} * NonEmpty({Set2}, [Measures].[NonEmptyMeasure])
Set1不会被过滤。尽管如此,Set1的所有成员将与Set2的所有非空成员交叉连接。很可能这不是你想要的。 你有许多额外的属性加入到你的约会中。对于空记录,您希望他们返回什么?我可能猜你想返回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 |
=======================================

这是期望的结果吗?

非空功能设计用于过滤空轴(当计算输出时)。非空函数执行集合的计算。因此,如果您运行:

Non Empty {Set1} * {Set2}
NonEmpty({Set1} * {Set2}, [Measures].[NonEmptyMeasure])
您将只获得交叉连接的非空记录。 如果您运行:

Non Empty {Set1} * {Set2}
NonEmpty({Set1} * {Set2}, [Measures].[NonEmptyMeasure])
你会得到同样的结果,但是机械师有点不同。如果只想筛选特定的集合,可以在这些集合周围使用非空

{Set1} * NonEmpty({Set2}, [Measures].[NonEmptyMeasure])
Set1不会被过滤。尽管如此,Set1的所有成员将与Set2的所有非空成员交叉连接。很可能这不是你想要的。 你有许多额外的属性加入到你的约会中。对于空记录,您希望他们返回什么?我可能猜你想返回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 |
=======================================

这是期望的结果吗?

(升级)非常好的解释非常感谢您完美的专业调查!这就是我所需要的!现在,它是清楚的,并理解了它是如何工作的逻辑!再次感谢你!祝你今天愉快,我的朋友!非常好的解释非常感谢你完美的专业调查!这就是我所需要的!现在,它是清楚的,并理解了它是如何工作的逻辑!再次感谢你!祝你今天愉快,我的朋友!