Power Pivot中RANKX按组排名返回全1值的问题咨询
问题分析与解决
你的组内排名公式确实存在问题,导致结果不符合预期。
问题原因
RANKX(ALL(Table2[Group]),[Sales]) 的核心问题在于:
ALL(Table2[Group])返回的是仅包含Group列唯一值的表(即只有"A"和"B"两行),这个表中没有Sales列的对应数据。- 当RANKX迭代这个表时,计算
[Sales]会沿用当前行的行上下文——每一次迭代都取当前行的Sales值进行比较,相当于每一行都在和自己对比,所以排名全部返回1。
正确的组内排名公式
要实现组内按Sales降序排名,需要让RANKX迭代当前Group下的所有Sales数据,以下两种方法都可以实现:
方法1:FILTER + ALL组合
=RANKX(FILTER(ALL(Table2), Table2[Group] = EARLIER(Table2[Group])), [Sales])
ALL(Table2)清除整个表的筛选上下文,再通过FILTER筛选出和当前行Group一致的所有行,确保RANKX在当前组的范围内进行排名计算。
方法2:使用ALLEXCEPT
=RANKX(ALLEXCEPT(Table2, Table2[Group]), [Sales])
ALLEXCEPT(Table2, Table2[Group])会保留Group列的筛选上下文,清除表中其他列的筛选,让RANKX仅在当前Group的范围内迭代计算排名。
预期结果
使用正确公式后,计算列结果会符合组内排名的预期:
| Group | Sales | Calculated Column |
|---|---|---|
| A | 2 | 2 |
| A | 3 | 1 |
| B | 4 | 2 |
| B | 5 | 1 |
内容的提问来源于stack exchange,提问作者Michael Covell
相关产品推荐
相关产品推荐

