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
代码说明
- 核心逻辑:对每个列名,检查是否包含筛选列表
myFilter中的任意一个元素,只要匹配其中一个就保留该列名。 - 分步拆解:
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
相关产品推荐
相关产品推荐

