2

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

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

问题是当我汇总到更高级别时,比如说我想按州返回平均每日收入,计算不正确,因为它首先汇总了对这些时期有贡献的天数,然后除以。我希望首先在最低级别进行平均,然后将每日平均收入的结果相加。这是发生的事情与我想要发生的事情的示例。

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

位置/收入/贡献收入的天数

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

地点 A 每天产生 100 美元的收入,地点 B 每天只产生 20 美元的收入。我的总金额应该是每天 120 美元。相反,它将返回 40 美元/天。以下是计算级别发生的情况。

我希望公式采用伪代码 SUM(([Measures].[Days In AR Charges]) / ([Measures].[Days In AR Days]))

但它实际上给了我 (SUM([Measures].[Days In AR Charges])) / (SUM([Measures].[Days In AR Days]))

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

4

6 回答 6

3

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

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

于 2009-02-05T05:34:55.707 回答
2

使用自定义成员公式

http://msdn.microsoft.com/en-us/library/ms174474%28SQL.90%29.aspx

于 2009-11-17T13:18:57.750 回答
1

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

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

于 2009-04-22T11:34:38.050 回答
0

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

于 2009-02-03T21:18:28.033 回答
0

这只是在您的计算中指定正确的“求解顺序”的问题。我无法为您提供特定的 MDX 来解决您的问题,因为我不知道您的多维数据集结构是什么,但请查看文档或通过 Google 中的“解决顺序”。这正是“解决订单”应该解决的问题。您将基本上告诉 Analysis Services 首先要做什么。

于 2009-02-04T00:52:31.517 回答
-2

减少一个方程 3 个单独的方程?计算一个的分子,另一个的分母,然后第三个的除法?我不知道您在谈论的工具,所以我不知道您是否可以按顺序进行多次计算。但这肯定会强制为您订购。

于 2012-04-01T18:58:57.473 回答