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

PowerQuery M代码:如何用筛选列表批量筛选含其元素的列名列表

PowerQuery M批量筛选包含任意筛选元素的列名

正确实现代码

let
    ColumnNames = {"E ID", "W ID", "P Chemical", "XIC","YFE","ZIC"},
    myFilter = {"W ID","IC"},
    Result = List.Select(ColumnNames, (colName) => List.AnyTrue(List.Transform(myFilter, (filterText) => Text.Contains(colName, filterText))))
in
    Result

代码说明

  1. 核心逻辑:对每个列名,检查是否包含筛选列表myFilter中的任意一个元素,只要匹配其中一个就保留该列名。
  2. 分步拆解:
    • List.Select(ColumnNames, (colName) => ...):遍历所有列名,逐个判断是否符合条件
    • List.Transform(myFilter, (filterText) => Text.Contains(colName, filterText)):把筛选列表的每个元素转换成「当前列名是否包含该元素」的布尔值
    • List.AnyTrue(...):判断布尔列表中是否存在至少一个true,存在则说明该列名符合筛选条件

简化写法(适用于PowerQuery新版本)

如果你的PowerQuery支持List.Any函数,可以用更简洁的写法:

let
    ColumnNames = {"E ID", "W ID", "P Chemical", "XIC","YFE","ZIC"},
    myFilter = {"W ID","IC"},
    Result = List.Select(ColumnNames, (colName) => List.Any(myFilter, (filterText) => Text.Contains(colName, filterText)))
in
    Result

原写法错误原因

你之前尝试的List.Select(ColumnNames, each Text.Contains(_, each myFilter{_}))存在两个问题:

  • 内层each myFilter{_}的上下文错误:这里的_是Text.Contains的第二个参数,不是索引值,无法正确遍历筛选列表元素
  • 缺少「任意匹配」的判断逻辑:没有检查是否存在至少一个筛选元素匹配的情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 18:01:17