如何在SSAS中正确汇总此计算的度量?

时间:2009-02-03 18:52:04

标签: sql-server ssas

我在Analysis Services中有一个计算度量,它根据过去三个时段返回某个位置的平均每日收入。期间是位置定义的时间长度,因此一个位置可以每月关闭它们的期间,另一个位置可以每季度关闭它们的期间。

要返回平均每日收入,我有一个factPeriods表,它返回一段时间的收入,以及该期间的贡献天数。以下MDX在位置级别返回正确的值([Measures]。[AR Charges中的天数])/([Measures]。[AR Days中的天数])。

问题是,当我卷起到更高的级别,比如说我希望按状态返回平均每日收入时,计算是不正确的,因为它首先汇总了对这些时段有贡献的日期,然后进行划分。我希望平均值首先发生在最低级别,然后将每日平均收入的结果相加。这是一个与我想要发生的事情相关的例子。

假设我只有两个地点,A和B. A每月关闭,B每季度关闭。最后收盘的结果是:

有助于收入的位置/收入/天

地点A / $ 3000/30天 位置B / $ 1800/90天

位置A每天产生100美元的收入,位置B每天仅产生20美元的收入。我的总数应该是120美元。相反,它将返回每天40美元。以下是计算级别的内容。

我希望公式为伪代码SUM(([测量]。[AR费用中的天数])/([测量]。[AR天数]))

但它实际上给了我(SUM([测量]。[AR费用中的天数]))/(SUM([测量]。[AR天数]))

任何人都可以帮我确定合适的公式,使其按预期工作吗?最终应该是100美元/天+ 20美元/天,而不是4800美元/ 120天。我怀疑我可能需要使用后代,但我不清楚我将如何使用它们,或者这是否是正确的方向。

6 个答案:

答案 0 :(得分:3)

迫使计算在叶级别发生然后汇总的最简单方法是在CALCULATE之前移动它; MDX脚本中的语句。

通常你应该离开CALCULATE;应该是脚本中的第一个语句,但我认为您描述的情况是在CALCULATE之前有一个计算成员是合理的例外情况之一;

答案 1 :(得分:2)

答案 2 :(得分:1)

如果您可以在ETL或处理中获得所需的数字,请不要使用SSAS计算,因为它会表现更好。

在这种情况下,我会添加一个DSV计算来进行除法,然后允许SSAS正常求和。

答案 3 :(得分:0)

我的直接解决方案是计算ETL过程中的平均每日收入,然后SSAS将仅对该值求和。如果有人知道的话,我仍然希望看到问题的MDX解决方案。

答案 4 :(得分:0)

这只是通过计算指定正确的“解决顺序”。我不能给你特定的MDX来解决你的问题,因为我不知道你的立方体结构是什么,但在文档中或通过谷歌查看“解决顺序”。这正是“解决订单”应该解决的问题。您将基本上告诉Analysis Services先要做什么。

答案 5 :(得分:-2)

减少一个方程3个单独的方程式?计算一个分子,另一个分母,然后是第三个分母?我不知道你正在谈论的工具,所以我不知道你是否可以按顺序进行多次计算。但这肯定会迫使你下订单。