Power Query如何先匹配ccenter、vnumber列再执行Text.Contains匹配
Power Query 逻辑优化实现方案
核心优化思路
先做vnumber、ccenter两个公共字段的精确匹配过滤,仅对匹配成功的行执行关键词与Line Description的模糊匹配,避免全量关键词遍历的冗余计算
优化后完整M代码
// 预处理参考表:按vnumber、ccenter分组,缓冲每个分组对应的关键词列表 reference_grouped = Table.Buffer(Table.Group(#"table1", {"vnumber", "ccenter"}, {{"Keywords", each _[Keywords], type list}})), Custom1 = #"Renamed Columns3", // 左关联匹配两个字段完全一致的行,关联成功的行会带出对应分组的关键词列表 #"Merged Reference" = Table.NestedJoin( Custom1, {"vnumber", "ccenter"}, reference_grouped, {"vnumber", "ccenter"}, "Reference Keywords", JoinKind.LeftOuter ), // 仅对关联成功的行执行Text.Contains匹配,无匹配返回空列表 #"Added Custom" = Table.AddColumn(#"Merged Reference", "Taxonomy Reference", each let matched_group = [Reference Keywords] in if Table.IsEmpty(matched_group) then {} else List.Select( Table.First(matched_group)[Keywords], (Taxonomy_Reference) => Text.Contains([Line Description], Taxonomy_Reference) ) ), // 移除临时关联列,展开匹配结果 #"Removed Temporary Columns" = Table.RemoveColumns(#"Added Custom", {"Reference Keywords"}), #"Expanded Vendors" = Table.ExpandListColumn(#"Removed Temporary Columns", "Taxonomy Reference")
调整说明
- 取消了原逻辑中三列拼接的
Custom列,避免不必要的字符串拼接开销 - 参考表预处理从缓冲全量关键词列表,改为缓冲按两个公共字段分组的结果,匹配效率更高
- 用左连接先过滤掉两个字段不匹配的行,仅对有效行执行文本模糊匹配,数据量越大性能提升越明显
内容的提问来源于stack exchange,提问作者Piccinin1992
相关产品推荐
相关产品推荐

