MDX计算ABS差值度量值时总计错误 如何实现按明细行求和?
问题原因
你当前编写的度量值逻辑为:在任意查询上下文(包括折叠后的汇总层级)中,先计算当前上下文的总销售额与总预测值的差值,再取绝对值,因此总计行的计算逻辑为 ABS(总Current Sales - 总Forecast Sales),与你需要的「先逐行计算差值绝对值、再累加汇总」的逻辑相反。
解决方案
将度量值调整为迭代所有明细行计算绝对值后再求和,参考MDX代码如下:
CREATE MEMBER CURRENTCUBE.[Measures].[Difference] AS SUM( -- 迭代当前项目维度成员下的所有明细叶子节点 EXISTING DESCENDANTS([项目].[项目层级].CurrentMember, , LEAVES), ABS( [Measures].[Current Sales] - ([Measures].[Forecast Sales], [Sales Forecast Filter].[Type].[2]) ) ), VISIBLE = 1;
代码说明
DESCENDANTS([项目].[项目层级].CurrentMember, , LEAVES)会获取当前查询上下文下,项目维度当前成员对应的所有最细粒度明细节点,维度层级折叠时会自动覆盖当前层级下的所有子节点SUM函数会遍历每一个明细节点,单独计算该节点的差值绝对值,最后累加得到对应层级的汇总值,无论维度是否折叠,计算结果都符合预期
效果验证
用你给出的两组示例测试:
- 第一组示例:分别计算A的差值绝对值50、B的差值绝对值10,累加得到总计60,符合预期
- 第二组示例:分别计算A的差值绝对值100、B的差值绝对值100,累加得到总计200,符合预期
如果你的查询行上需要同时展示多个维度,只需要调整SUM函数内的迭代范围,覆盖所有相关维度的叶子成员即可。
内容的提问来源于stack exchange,提问作者Jeffrey
相关产品推荐
相关产品推荐

