Power Query中多列分组并在组内排名的实现方法
在Power Query里实现分组内多字段排名
以下是具体操作步骤,满足你在独立分组内按指定字段排名、方便后续筛选前N值的需求:
1. 把数据导入Power Query编辑器
- Excel:点击「数据」选项卡→「从表格/范围」,选中原始表格导入
- Power BI:点击「获取数据」,选择对应数据源加载数据到Power Query
2. 按分组字段进行分组
选中GroupField1和GroupField2两列,点击「转换」选项卡→「分组依据」:
- 切换到「高级」模式,设置:
- 新列名:自定义名称(比如
分组数据) - 操作:选择「所有行」
- 列:留空(保留分组内的所有原始数据)
点击确定后,表格会按分组字段聚合,每个分组对应一行包含该组所有数据的记录。
- 新列名:自定义名称(比如
3. 给分组内的数据添加排名列
接下来为每个分组里的数据单独生成Rank1和Rank2:
- 点击「添加列」选项卡→「自定义列」,在公式框输入:
Table.AddRankColumn([分组数据], "Rank1", {"RankField1", Order.Descending}, RankKind.Competition)
这个公式按RankField1降序给分组内数据排名,相同值并列且后续排名跳号(例如两个第2名,下一个是第4名)。
- 再添加一个自定义列计算Rank2:
Table.AddRankColumn([分组数据], "Rank2", {"RankField2", Order.Descending}, RankKind.Competition)
排名规则可选:
RankKind.Dense:并列排名不跳号(两个第2名,下一个是第3名)RankKind.Unique:相同值按行顺序分配唯一排名
4. 整理成最终表格
- 点击两个自定义列右侧的展开箭头,勾选所有需要保留的字段(原始字段+Rank1+Rank2)
- 删除中间生成的
分组数据列,调整列的顺序到需求格式
最终结果示例(分组内排名)
按上述步骤处理后,得到的表格如下(采用RankKind.Competition规则):
| GroupField1 | GroupField2 | RankField1 | RankField2 | OtherField | Rank1 | Rank2 |
|---|---|---|---|---|---|---|
| Y | A | 25 | 10 | data | 1 | 1 |
| Y | A | 20 | 10 | data | 2 | 1 |
| X | B | 30 | 12 | data | 1 | 1 |
| X | B | 15 | 10 | data | 2 | 2 |
| Z | Q | 5 | 5 | data | 1 | 1 |
若需要全局排名(而非分组内),直接跳过分组步骤,对整个原始表格使用
Table.AddRankColumn公式即可。
内容的提问来源于stack exchange,提问作者Isaacnfairplay
相关产品推荐
相关产品推荐

