我在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天。我怀疑我可能需要使用后代,但我不清楚我将如何使用它们,或者这是否是正确的方向。
答案 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个单独的方程式?计算一个分子,另一个分母,然后是第三个分母?我不知道你正在谈论的工具,所以我不知道你是否可以按顺序进行多次计算。但这肯定会迫使你下订单。