Excel Power Query:批量将Data查询多列匹配至Overview查询
Power Query 批量匹配多列并修复语法错误
问题背景
现有两个Power Query查询:Overview和Data,需根据NAME.1与NAME.2字段的值,将Data中的ITEM、ITEM 2、Y/N列批量匹配添加到Overview的对应行中。
数据示例
Overview表
| NAME.1 | NAME.2 | NUMBER | RANDOM |
|---|---|---|---|
| Name11 | 243324 | qwsa | |
| Name22 | 6747 | dsfsdf | |
| Name13 | 455 | yyu | |
| Name14 | 908098 | hfhn | |
| Name25 | 34 | ertew | |
| 132 | uil | ||
| Name17 | Name27 | 64 | tgvc |
| Name18 | Name28 | 876 | iorts |
Data表
| ITEM | ITEM 2 | Y/N | NAME.1 | NAME.2 |
|---|---|---|---|---|
| 123123 | AA | Y | Name25 | |
| 234324 | BB | Y | Name11 | |
| 345345 | CC | N | Name17 | |
| 456456 | AA | Y | Name12 | Name22 |
| 567567 | AA | N | ||
| 678678 | DD | N | Name13 | Name23 |
| 789789 | DD | Y | Name16 | |
| 890890 | AA | N | Name14 |
期望结果示例(Overview第一行):
| NAME.1 | NAME.2 | NUMBER | RANDOM | ITEM | ITEM 2 | Y/N |
|---|---|---|---|---|---|---|
| Name11 | 243324 | qwsa | 234324 | BB | Y |
现有问题
复用单列匹配代码时,执行到#"Grouped Rows"步骤出现语法错误:Expression.SyntaxError: Invalid identifier.,错误指向[Sub-supplier],相关代码片段:
#"Expanded Fields" = Table.ExpandRecordColumn(#"Removed Columns1", "Fields", {"Report Number", "Sub-supplier", "text text text text.", "text text text", "text text text text text", "text text"}), #"Grouped Rows" = Table.Group(#"Expanded Fields", {"Index"}, {{"all", each Table.TransformColumns(_, { {"Report Number", (c)=>Text.Combine(_[Report Number], ", ")}, {"Sub-supplier",(c)=>Text.Combine(_[Sub-supplier], ", ")}, {"text text text text.",(c)=>Text.Combine(_[text text text text.], ", ")}, {"text text text",(c)=>Text.Combine(_[text text text], ", ")}, {"text text text text text",(c)=>Text.Combine(_[text text text text text], ", ")}, {"text text", (c)=>Text.Combine(_[#"text text"], ", ")}} ){0}}}),
错误原因分析
- 列名引用错误:对于包含空格或特殊字符的列名(如
text text),必须用#"text text"格式引用,但代码中部分列(如text text text text.)未正确处理。 - 逻辑错误:
Table.TransformColumns的转换函数参数c代表当前列的单个值,而非整个分组表,此时用_[列名]会导致找不到对应标识符——因为_在这里指代当前行的记录,不是分组后的完整表。
解决方案
1. 修复语法错误
将Grouped Rows步骤的聚合逻辑调整为直接对分组表的列进行列表合并,而非在Table.TransformColumns中错误引用:
#"Expanded Fields" = Table.ExpandRecordColumn(#"Removed Columns1", "Fields", {"Report Number", "Sub-supplier", "text text text text.", "text text text", "text text text text text", "text text"}), #"Grouped Rows" = Table.Group(#"Expanded Fields", {"Index"}, { {"Report Number", each Text.Combine(Table.Column(_, "Report Number"), ", ")}, {"Sub-supplier", each Text.Combine(Table.Column(_, "Sub-supplier"), ", ")}, {"text text text text.", each Text.Combine(Table.Column(_, "text text text text."), ", ")}, {"text text text", each Text.Combine(Table.Column(_, "text text text"), ", ")}, {"text text text text text", each Text.Combine(Table.Column(_, "text text text text text"), ", ")}, {"text text", each Text.Combine(Table.Column(_, "text text"), ", ")} }),
如果要批量处理这些列,可先定义列名列表,再用List.Transform生成聚合规则,减少重复代码:
// 定义需要聚合的列名列表 var colsToAggregate = {"Report Number", "Sub-supplier", "text text text text.", "text text text", "text text text text text", "text text"}; // 生成分组规则 var groupRules = List.Transform(colsToAggregate, (col) => { col, each Text.Combine(Table.Column(_, col), ", ") }); // 执行分组 #"Grouped Rows" = Table.Group(#"Expanded Fields", {"Index"}, groupRules),
2. 高效批量匹配多列的完整方案
要实现Overview与Data的多列匹配,推荐使用嵌套连接+批量展开的方式,避免重复代码:
let // 获取数据源(替换为你的实际查询引用) Overview = Overview, Data = Data, // 定义匹配键和需要添加的列 matchKeys = {"NAME.1", "NAME.2"}, addCols = {"ITEM", "ITEM 2", "Y/N"}, // 预处理Data:仅保留需要的列 Data_Cleaned = Table.SelectColumns(Data, matchKeys & addCols), // 预处理空值:将空值统一替换为"",避免匹配失效 Overview_Processed = Table.ReplaceValue(Overview, null, "", Replacer.ReplaceValue), Data_Processed = Table.ReplaceValue(Data_Cleaned, null, "", Replacer.ReplaceValue), // 执行左连接:匹配NAME.1和NAME.2 Joined = Table.NestedJoin( Overview_Processed, matchKeys, Data_Processed, matchKeys, "MatchedData", JoinKind.LeftOuter ), // 批量展开匹配到的列,若有多条匹配则用逗号合并 Grouped = Table.Group(Joined, Table.ColumnNames(Overview_Processed), List.Transform(addCols, (col) => { col, each Text.Combine(List.RemoveNulls(_[col]), ", ") })) in Grouped
内容的提问来源于stack exchange,提问作者MMM
相关产品推荐
相关产品推荐

