Excel 365 Power Query:如何匹配Key与对应Data列表的最大Value?
解决Power Query中按Key匹配Data列表并取最大Value的需求
以下是实现需求的完整M代码,以及步骤拆解:
完整解决方案代码
let // 加载源表(可替换为你实际的表引用) Tbl1 = let Source = #table({"Key", "Data"}, { {"XXX-1", {"Data 1.1", "Data 1.2"}}, {"XXX-2", {"Data 1.2A"}}, {"XXX-3", {"unmatchable data"}} } ) in Source, Tbl2 = let Source = #table({"Data", "Value"}, { {"Data 1.1A", 1}, {"Data 1.1B", 2}, {"Data 1.1", 2}, {"Data 1.2A", 3}, {"Data 1.2B", 4}, {"Data 1.2", 4} } ) in Source, // 展开Tbl1的Data列表为单行数据 #"展开Data" = Table.ExpandListColumn(Tbl1, "Data"), // 左连接Tbl2获取对应Value #"左连接Tbl2" = Table.NestedJoin(#"展开Data", {"Data"}, Tbl2, {"Data"}, "Tbl2", JoinKind.LeftOuter), #"展开Value列" = Table.ExpandTableColumn(#"左连接Tbl2", "Tbl2", {"Value"}, {"Value"}), // 按Key分组并计算最大Value #"按Key取最大Value" = Table.Group(#"展开Value列", {"Key"}, {{"Largest Value", each List.Max([Value]), type nullable number}}) in #"按Key取最大Value"
步骤拆解
1. 展开Data列表
Tbl1的Data字段是列表类型,通过Table.ExpandListColumn函数将每个列表中的元素拆分为独立行,让每个Key与单个Data项一一对应,为后续匹配做准备。
2. 左连接Tbl2匹配Value
使用**左外连接(JoinKind.LeftOuter)**关联两个表,确保Tbl1中的所有Key都被保留——即使某个Data项在Tbl2中无匹配,对应Value会显示null。之后展开连接生成的嵌套表,提取Value列。
3. 分组计算最大Value
通过Table.Group按Key分组,对每组的Value列使用List.Max函数取最大值。如果某组的Value全为null(比如XXX-3),List.Max会自动返回null,完全符合需求。
内容的提问来源于stack exchange,提问作者PaulH
相关产品推荐
相关产品推荐

