替换度量值为表达式后RANKX函数计算异常的原因咨询
问题原因与解决方法
核心差异:上下文的响应方式
RANKX函数的工作逻辑是:迭代第二个参数指定的表(这里是ALL(Products)即所有产品),对表中每一行计算第二个参数的表达式,再将当前行的计算结果与所有迭代结果对比得出排名。两者结果不同的关键在于表达式是否能响应RANKX的迭代上下文:
- 当使用度量值
TotalQty时,度量值会自动感知RANKX迭代过程中的行上下文(也就是每次迭代到的具体产品),计算对应产品的销售总量。因此RANKX能拿到所有产品的销量数据,对比后得出正确排名。 - 直接写
SUM(Sales[OrderQty])时,这个普通表达式不会自动继承RANKX的迭代上下文,它始终受外部筛选(矩阵当前行的产品)影响。也就是说,RANKX迭代每一个产品时,计算的都是当前矩阵行产品的销量,而非迭代到的那个产品的销量。所有迭代结果都和当前行值一致,自然每行排名都是1。
修复方法
如果不想单独创建TotalQty度量值,需要用CALCULATE强制转换上下文,让SUM响应RANKX的迭代行:
Rank = RANKX(ALL(Products), CALCULATE(SUM(Sales[OrderQty])))
内容的提问来源于stack exchange,提问作者pruvieros
相关产品推荐
相关产品推荐

