创建MDX以分割每个月的两个度量,然后将所有月份相加

时间:2016-08-19 23:59:34

标签: ssas mdx

我有一个多维立方体,需要一个我不确定如何构建的自定义度量。

该数据如下所示:

MemberID-----Date-------EventType
1--------------1/1/2016-------1
2--------------1/1/2016-------2
3--------------2/1/2016-------1
2--------------2/1/2016-------2
4--------------2/1/2016-------2

多维数据集中有一个计数度量,但如果需要,可以添加其他度量。我需要创建一个度量,它将使用用户应用的任何过滤器,然后按月计算EventType(仅限1和2),将EventType 1的结果计数除以EventType 2的计数(每个月单独计算),最后总结每月结果。例如,1/1/2016将是1/1 = 1(事件类型1的计数和事件类型2的计数)和2/1/2016将是1/2 = 0.5因此两个月的结果度量值将为1 + 0.5 = 1.5。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

假设您有一个Date维度,其中包含一个名为Month的属性。我们假设您有一个EventType维度。让我们假设您的度量组中有一个名为Cnt的计数度量。这还有你还需要做什么。

首先,转到DSV并将新计算列添加到名为NullInt的事实表中,并且是以下表达式: cast(null as int)

然后在该列的度量值组中创建一个新的Sum度量,并调用my Rollup度量。在Source属性下,将NullHandling更改为Preserve,使其从null开始。

为了解释我们为什么要这样做,对物理测量的范围分配将汇总。 (如果您在每个月的粒度上为物理度量指定值,则它将汇总到总计。)但是对计算度量的范围分配不会累积。

然后在MDX脚本中添加以下计算:

scope([Date].[Month].[Month].Members); //calculate at the month level then rollup
  [Measures].[My Rollup] = DIVIDE(
   ([Event Type].[Event Type].&[1],[Measures].[Cnt]),
   ([Event Type].[Event Type].&[2],[Measures].[Cnt])
   );
end scope;

请注意,如果您的SSAS版本具有最新的Service Pack或更新版本的AS2012,则可能具有DIVIDE功能。但如果它没有,你总是可以按照IIF(denom=0,null,num/denom)的老式方式进行划分。