MDX:根据标志使测量值为0

时间:2018-05-29 18:05:20

标签: ssas mdx

非常感谢任何帮助。

我有一个名为“Sales”的度量值,但是当“Sales Flag”设置为0时,我试图将“Sales”值变为0。

重要说明:销售标志基于日期(最低详细程度)。

enter image description here

我真正遇到的困难并且无法控制,是我如何尝试显示MDX结果。

如上所述,只要我们在“Sales Flag”中有一个0(基于Date),我就想让“Sales”值为0,但是当我运行MDX Script时,我会想要在ROWS上不显示日期,而是仅显示周(更高级别到日期),如下所示:

enter image description here

我真的花了好几个小时,似乎无法理解我们如何根据日期级别的销售标记创建所需的自定义销售量度,但MDX结果在周级别显示为ROWS。

拉​​兹

2 个答案:

答案 0 :(得分:0)

您需要在选择之前在MDX中定义成员。这样的事情:

WITH MEMBER [Measures].[Fixed Sales] as IIF([Sales Flag].currentMember=1,[Sales], 0)

SELECT [Measures].[Fixed Sales] on 0, [Sales Flag] on 1 from [Cube]

我正在编写没有SSAS的代码,所以它可能不是100%正确的语法,但你可以得到一般的想法;)

您可以在SELECT部分​​添加iif,但我发现创建成员是更清洁的解决方案。

SELECT IIF([Sales Flag].currentMember=1,[Sales], 0) on 0, [Sales Flag] on 1 from [Cube]

如果您可以在SSAS中控制多维数据集,则可以在那里创建计算成员,并且可以更轻松地访问它。

答案 1 :(得分:0)

很高兴听到Veselin的答案对你有用,但如果没有......

也有几种方法。

  1. 使用Measure expression进行销售衡量:
  2. Measure Expression

    1. 对日级别使用SCOPE命令(如果它是日期维度的关键级别)。如果它不是关键级别,则必须在每个级别(周,年等)上进行聚合,以模拟Sales测量的AggregateFunction,但具有一个标志的更新行为:

      SCOPE([Date]。[Your Date Hierarchy]。[Day] .members,[Measures]。[Sales]); THIS = IIF([销售标志] .CurrentMember = 1,[Measures]。[Sales],0); 结束范围;

    2. 更新DSV中的逻辑,将SalesFlag乘以Sales列。从T-SQL的角度来看,这是最简单的方法。