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
相关产品推荐
相关产品推荐

