在Power Query中实现带并列情况的分数排名
在Power Query中实现分数降序并列排名
需求:对分数列按数值从高到低排名,分数并列时给予相同排名(如示例中两个140均排第3位)。
原始数据:
| 分数 | B2 | B4 | 排名 |
|---|---|---|---|
| 130 | A2 | A1 | |
| 180 | B3 | ||
| 140 | A2 | 2 | |
| 130 | A2 | A1 | |
| 200 | A1 | ||
| 140 | A2 | 2 |
方法一:通过图形界面操作
- 把数据导入Power Query:点击Excel的「数据」选项卡→「从表格/区域」
- 在Power Query编辑器里选中「分数」列
- 点击「转换」选项卡→「排名」→「密集排名」
- 此时默认是升序排名(最低分排第1),需要改成降序:
右键新生成的「排名」列→「编辑公式」,把Order.Ascending替换成Order.Descending,最终公式为:Table.AddRankColumn(源, "排名", {"分数", Order.Descending}, [RankKind = RankKind.Dense]) - 确认后就能得到符合要求的排名。
方法二:手动编写M代码
适合熟悉M语言的用户,步骤如下:
- 在Power Query编辑器中点击「高级编辑器」
- 替换现有代码为以下内容(注意把
Table1改成你的实际表名):
let 源 = Excel.CurrentWorkbook(){[Name="Table1"]}[Content], 添加密集排名 = Table.AddRankColumn(源, "排名", {"分数", Order.Descending}, [RankKind = RankKind.Dense]) in 添加密集排名
参数说明
{"分数", Order.Descending}:指定按分数列降序排序,保证最高分排第1[RankKind = RankKind.Dense]:启用密集排名模式,并列分数获得相同排名,后续排名不跳跃(比如两个140排第3,下一个不同分数直接排第4)
最终生成的排名结果:
| 分数 | B2 | B4 | 排名 |
|---|---|---|---|
| 130 | A2 | A1 | 4 |
| 180 | B3 | 2 | |
| 140 | A2 | 2 | 3 |
| 130 | A2 | A1 | 4 |
| 200 | A1 | 1 | |
| 140 | A2 | 2 | 3 |
内容的提问来源于stack exchange,提问作者val
相关产品推荐
相关产品推荐

