如何使用PowerQuery筛选每个年度Gross Amount排名前N的所有数据
PowerQuery 分年度提取进出口额前N数据解决方案
完整可直接使用的M代码
let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content], #"Changed Type" = Table.TransformColumnTypes(Source,{{"Export Country", type text}, {"Gross Export", Int64.Type}, {"Share", type number}, {"Year", Int64.Type}, {"Imp/Exp", type text}}), // 按年度分组,每个年度单独处理取前10 #"Grouped Rows" = Table.Group(#"Changed Type", {"Year"}, { {"Top10Data", each Table.FirstN(Table.Sort(_, {{"Gross Export", Order.Descending}}), 10), type table [Export Country=text, Gross Export=Int64.Type, Share=number, Year=Int64.Type, #"Imp/Exp"=text]} }), // 展开各年度的前10数据,删除多余的分组列 #"Expanded Top10Data" = Table.ExpandTableColumn(#"Grouped Rows", "Top10Data", {"Export Country", "Gross Export", "Share", "Imp/Exp"}), // 可选:按年度升序、进出口额降序排序最终结果 #"Sorted Final Result" = Table.Sort(#"Expanded Top10Data",{{"Year", Order.Ascending}, {"Gross Export", Order.Descending}}) in #"Sorted Final Result"
代码逻辑说明
- 核心修改是新增了
Table.Group分组步骤:以Year字段为分组依据,每一个年度对应一个子表,对每个子表单独按Gross Export降序排序后取前10行 - 展开分组后即可得到所有年度的前10条数据汇总,无需手动分年度处理再合并
- 若需要调整取前N的数量,直接修改
Table.FirstN的第二个参数即可,比如要取前20就改为20
若需要保留并列排名的所有数据(比如有2条并列第10都保留),可将
Table.FirstN(Table.Sort(_, {{"Gross Export", Order.Descending}}), 10)替换为Table.SelectRows(Table.AddRankColumn(_, "Rank", {"Gross Export", Order.Descending}), each [Rank] <=10)即可。
输出到指定工作表操作
查询编辑完成后,点击PowerQuery编辑器左上角的「关闭并上载」下拉箭头,选择「关闭并上载至」,在弹出的对话框中选择「现有工作表」,输入目标工作表名称Export_Top10确认即可。
内容的提问来源于stack exchange,提问作者Umut K
相关产品推荐
相关产品推荐

