代码之家  ›  专栏  ›  技术社区  ›  Shane Delmore

如何在SSAS中正确地进行计算度量汇总?

  •  2
  • Shane Delmore  · 技术社区  · 16 年前

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

    要返回平均每日收入,我有一个factperiods表,该表返回某个期间的收入以及该期间的贡献天数。以下MDX返回位置级别的正确值([度量值].[应收款天数])/([度量值].[应收款天数])。

    问题是,当我汇总到更高的级别时,比如说我要按状态返回平均每日收入,计算是不正确的,因为它首先汇总贡献给各个期间的天数,然后进行划分。我希望先在最低水平上进行平均,然后求出每日平均收入的总和。下面是一个发生了什么和我想发生什么的例子。

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

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

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

    位置A每天产生100美元的收入,位置B每天只产生20美元的收入。我的总数应该是120美元一天。相反,它将返回40美元/天。这里是在计算级别发生的事情。

    我希望公式为伪代码和(([Measures]。[Days in AR Charges])/([Measures]。[Days in AR Days]))

    但实际上它给了我(sum([措施]。[应收账款支付天数])/(sum([措施]。[应收账款支付天数])

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

    6 回复  |  直到 12 年前
        1
  •  1
  •   James    15 年前

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

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

        2
  •  3
  •   Darren Gosbell    16 年前

    强制计算在叶级进行,然后进行汇总的最简单方法是在MDX脚本中的calculate;station之前移动它。

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

        3
  •  2
  •   adolf garlic    15 年前
        4
  •  0
  •   Shane Delmore    16 年前

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

        5
  •  0
  •   Mitch Schroeter    16 年前

    这只是通过计算指定正确的“求解顺序”的问题。我不能给你特定的MDX来解决你的问题,因为我不知道你的多维数据集结构是什么,而是通过文档或谷歌搜索“解决顺序”。这正是“解决顺序”应该解决的问题。您将首先告诉AnalysisServices要做什么。

        6
  •  -2
  •   PPT    12 年前

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