You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel Power Query:批量将Data查询多列匹配至Overview查询

Power Query 批量匹配多列并修复语法错误

问题背景

现有两个Power Query查询:Overview和Data,需根据NAME.1与NAME.2字段的值,将Data中的ITEM、ITEM 2、Y/N列批量匹配添加到Overview的对应行中。

数据示例

Overview表

NAME.1NAME.2NUMBERRANDOM
Name11243324qwsa
Name226747dsfsdf
Name13455yyu
Name14908098hfhn
Name2534ertew
132uil
Name17Name2764tgvc
Name18Name28876iorts

Data表

ITEMITEM 2Y/NNAME.1NAME.2
123123AAYName25
234324BBYName11
345345CCNName17
456456AAYName12Name22
567567AAN
678678DDNName13Name23
789789DDYName16
890890AANName14

期望结果示例(Overview第一行):

NAME.1NAME.2NUMBERRANDOMITEMITEM 2Y/N
Name11243324qwsa234324BBY

现有问题

复用单列匹配代码时,执行到#"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}}}),

错误原因分析

  1. 列名引用错误:对于包含空格或特殊字符的列名(如text text),必须用#"text text"格式引用,但代码中部分列(如text text text text.)未正确处理。
  2. 逻辑错误: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 23:48:13