我有一个多维立方体,需要一个我不确定如何构建的自定义度量。
该数据如下所示:
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。非常感谢任何帮助。
答案 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)
的老式方式进行划分。