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

Power Query中如何实现文本非精确匹配查询?

Power Query 筛选包含"1 EA"文本的列

现有精确匹配公式

我目前有一个能精确匹配"1 EA"的Power Query公式:

= List.Select(ColumnNames, each List.Contains(Table.Column(#"Filled Down",_),"1 EA"))

需求与尝试的无效公式

现在需要修改公式,使其能筛选出列中存在包含"1 EA"文本的列(即文本前后有其他内容或空格时仍判定为匹配)。我尝试了两个公式都不符合预期:

  1. 第一个公式:
    = List.Select(ColumnNames, each List.AnyTrue(List.Transform(Table.Column(#"Filled Down", _), each Text.Contains(_, "1 EA"))))
    
    该公式报错(无具体错误描述),且仅返回包含精确"1 EA"的单个列名;
  2. 第二个公式:
    = List.Select(ColumnNames, each List.Contains(Table.Column(#"Filled Down", _), each Text.Contains(_, "1 EA")))
    
    该公式返回空列表,完全不符合需求。

测试数据

我的测试数据如下,期望返回的列列表为Data.Column1、Data.Column2和Data.Column4:

Data.Column1Data.Column2Data.Column3Data.Column4
Sample Text1 EAsddSample text1 EA
1 EASample textSample Text1 EAff

正确解决方案

有效公式

使用以下公式可以实现需求:

= List.Select(ColumnNames, each List.AnyTrue(List.Transform(Table.Column(#"Filled Down", _), (textValue) => Text.Contains(textValue, "1 EA"))))

公式说明

  • List.Transform遍历目标列的每一个文本值,用Text.Contains(textValue, "1 EA")检查当前值是否包含"1 EA",返回一个布尔值列表;
  • List.AnyTrue判断布尔列表中是否存在至少一个true,即该列中存在符合条件的值;
  • 外层List.Select据此筛选出所有符合条件的列名。

之前公式的问题分析

  1. 第一个公式的问题:嵌套的each表达式存在上下文变量冲突,改用具名参数(如textValue)替代each即可避免;
  2. 第二个公式的问题:List.Contains的第二个参数需要是具体值,而非条件表达式,因此用each Text.Contains(...)作为参数完全不符合该函数的使用逻辑,导致返回空列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 21:45:03