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

Power Query M代码多条件匹配Reference Tax表取值写法纠错咨询

Power Query M 多条件匹配取参考表值修正方案

原有代码核心问题

  • List.Select 返回的是符合条件的元素列表,不能直接作为布尔值参与逻辑判断
  • 单独缓冲多列无法建立参考表同行字段的关联关系,匹配逻辑完全错位
  • 没有实现匹配后提取指定列值的逻辑,仅做了布尔标记的框架

修正后完整代码

优先缓冲整张参考表(比单独缓冲多列效率更高、更容易做行级匹配),再通过行筛选定位匹配记录后取值:

// 缓冲整张参考表,避免重复计算
BufferedReference = Table.Buffer(#"Reference Tax"),

// 新增自定义列匹配取值
#"Added Custom" = Table.AddColumn(Custom1, "Tax_Reference", each 
    let
        // 筛选同时满足所有匹配条件的参考表行
        MatchedRows = Table.SelectRows(BufferedReference, (ref_row) => 
            // 条件1:当前行Line Description包含参考表Reference字段内容
            Text.Contains([Line Description], ref_row[Reference]) 
            // 条件2:Vendor Number完全匹配
            and [Vendor Number] = ref_row[Vendor Number]
            // 若需要保留原代码的成本中心匹配条件,取消注释下行即可
            // and Text.Contains([Cost Centre], ref_row[Cost Center])
        ),
        // 提取匹配结果:有匹配则取第一行的指定列值,无匹配返回空
        // 把下方的[Reference]替换为你需要返回的参考表列名即可,比如[Vendor Name]、[Tax Rate]
        ReturnValue = if Table.RowCount(MatchedRows) > 0 then MatchedRows{0}[Reference] else null
    in
        ReturnValue
)

可选优化配置

  • 若存在多条匹配记录需要返回所有值,把ReturnValue行替换为:
    ReturnValue = if Table.RowCount(MatchedRows) > 0 then Text.Combine(MatchedRows[Reference], ", ") else null
  • 匹配前请确保两个表的Vendor Number字段类型完全一致(同为数值/同为文本),避免等于判断失效
  • 如果需要模糊匹配忽略大小写,给Text.Contains加第三个参数Comparer.OrdinalIgnoreCase即可,示例:Text.Contains([Line Description], ref_row[Reference], Comparer.OrdinalIgnoreCase)

内容的提问来源于stack exchange,提问作者Piccinin1992

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 17:48:02