Power Query(M语言):判断A列字符是否存在于B列生成计算列
解决Power Query中判断文本包含的计算列问题
嘿,我知道你在处理这个判断Column A字符是否在Column B中存在的需求时踩了不少坑——别担心,咱们用M语言里最直接高效的方法就能搞定,而且完全适合大文件场景,不会出现循环引用或者性能爆炸的问题。
核心解决方案:使用Text.Contains函数
Power Query的M语言里自带了Text.Contains函数,专门用来判断一段文本是否包含另一段文本,这比你之前尝试的筛选、合并表格要高效得多,不会产生额外的数据集开销,完美适配大文件。
具体操作步骤:
- 在Power Query编辑器中,选中你的目标表格
- 点击添加列选项卡,选择自定义列
- 在弹出的自定义列对话框中,输入以下M代码:
if Text.Contains([Column B], [Column A]) then "Yes" else "No"
- 点击确定,就能得到你想要的计算列了。
为什么之前的方法会出问题?
Calculate是DAX函数,只能在Power BI模型或Excel的DAX表达式里使用,Power Query的M语言根本不支持这个函数,所以肯定会报错。- 自合并表格会生成笛卡尔积(每一行都和所有行匹配),大文件下会瞬间让数据量暴涨,不仅运行缓慢还容易触发内存问题,完全没必要用这种绕远路的方法。
- 如果你之前用
Search函数报错,大概率是没处理空值情况——Search遇到空值会直接返回错误,而Text.Contains会自动把空值视为“不包含”,返回"No",兼容性更强。
进阶:处理大小写敏感问题
默认情况下Text.Contains区分大小写,如果你的需求是忽略大小写判断,可以把两个列统一转成小写(或大写)再对比:
if Text.Contains(Text.Lower([Column B]), Text.Lower([Column A])) then "Yes" else "No"
性能优化小贴士
如果你的Column B是超长文本,或者表格行数超过10万行,可以先对Column B做一次轻量清洗(比如去掉多余空格、特殊字符),再进行判断,能小幅提升运行效率;但一般情况下直接用Text.Contains就足够快了。
内容的提问来源于stack exchange,提问作者Mara S
相关产品推荐
相关产品推荐

