Power Query作为Power BI和Excel中的强大数据处理工具,能够高效完成复杂的数据清洗和转换任务。本文将详细介绍如何使用Power Query实现数据分组排名,并筛选出每个小组的第一名记录。
更多关于Power Query的课程,购买渠道:https://www.bilibili.com/cheese/play/ss7757
一、数据导入与基础准备
首先需要将原始数据导入Power Query环境中:
导入数据到Power Query:在Excel中,选中数据表的任意单元格,然后选择菜单栏的"数据""从表格"。在弹出的对话框中点击"确定",数据表即被上传至Power Query编辑器。
检查数据结构:确保数据包含需要分组的列(如"小组"列)和用于排名的数值列(如"分数"或"总分")。如果标题行未正确识别,可使用"提升标题"功能将第一行设为列名。
二、实现小组内排名
Power Query提供了多种实现分组排名的方法,以下是常用方法:
首先:分组依据
你得先将数据按照小组进行合并,确保数据在你需要的一个组内,选择分组依据的时候,不要有任何计算,直接将属于一组的所有行放在一起就可以了。
然后,使用M语言自定义函数
对于复杂的分组排名需求,可以创建自定义函数:
这里需要大家掌握或者说了解两个M函数:
Table.TransformColumns,遍历分组后每一行中的Table,这里就需要了解一下上下文的意思了。
另外一个就是:Table.AddRankColumn,就是在每一行中的Table中去增加一个排序的列,而且这个可以根据自己的要求选择是升序还是倒序。
使用此函数可以轻松实现各种分组排名需求。
三、筛选各小组第一名
获得分组排名后,展开处理好的数据,然后筛选每组第一名即可。
使用筛选功能
添加排名列后,使用筛选功能选择"Rank"列等于1的行。
或使用M代码:在高级编辑器中添加筛选步骤:
= Table.SelectRows(前一步骤名, each [Rank] = 1)
四、完整实现示例
以下是一个完整的实现示例,从数据导入到最终结果的M代码:
let// 1. 导入数据源 源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],// 2. 更改数据类型(如有需要) 更改的类型 = Table.TransformColumnTypes(源,{{"小组", type text}, {"姓名", type text}, {"总分", Int64.Type}}),// 3. 添加小组内排名 分组排名 = Table.Group( 更改的类型,{"小组"},{{"分组数据", each Table.AddRankColumn(_, "排名", "总分", Order.Descending), type table}}),// 4. 展开分组数据展开的表格 = Table.ExpandTableColumn(分组排名, "分组数据", {"姓名", "总分", "排名"}),// 5. 筛选每组第一名 每组第一名 = Table.SelectRows(展开的表格, each [排名] = 1),// 6. 删除不再需要的排名列(可选)删除的列 = Table.RemoveColumns(每组第一名,{"排名"}) in 删除的列
五、注意事项与优化建议
数据类型一致性:在进行排名操作前,确保排名列的数据类型正确(通常是数值类型)。
处理并列情况:Power Query的标准竞争排名法会为相同值分配相同排名,后续排名会跳过相应位置。例如,两个第一名后,下一个是第三名。如需不同处理方式,需自定义排名逻辑。
性能优化:对于大数据集,复杂的排名操作可能影响性能。可以考虑:
先筛选必要列再处理
使用Table.Buffer缓存中间结果
避免不必要的计算列
可重用性:如需要在多个工作表中执行相同操作,可将核心逻辑封装为自定义函数,实现"一劳永逸"。
结果验证:完成排名和筛选后,应复查结果是否正确。可以通过:
检查每组记录数
验证排名列的值
抽样检查特定组的最高分记录
六、应用场景扩展
此技术可应用于多种业务场景:
销售业绩分析:筛选每个销售区域销售额最高的代表
学术评价:找出每个班级分数最高的学生
体育竞赛:确定每组比赛成绩最好的选手
员工考核:识别各部门绩效最优的员工
通过调整分组字段和排名字段,可以灵活适应不同需求。
结语
Power Query提供了强大而灵活的工具来实现数据分组排名和筛选操作。通过标准功能或自定义M代码,用户可以高效完成从简单到复杂的分组排名需求。掌握这些技术不仅能解决"筛选各小组第一名"的具体问题,还能为更复杂的数据分析任务奠定基础。随着对M语言的深入理解,用户可以开发出更加精炼和高效的数据处理流程。
对于需要频繁执行此类分析的用户,建议将核心逻辑封装为可重用的自定义函数或查询模板,大大提高工作效率。
领取专属 10元无门槛券
私享最新 技术干货