PowerQuery M:通过Table B筛选Table A的支付参考列
解决方法
方案1:通配符转正则匹配(支持任意位置*)
如果筛选规则中的*可以出现在任意位置,可将通配符转换为正则表达式实现匹配:
- 在Power Query中给Table A添加自定义列,输入公式:
List.AnyTrue( List.Transform( TableB[Filters], each Text.MatchesPattern([Payment References], Text.Replace(_, "*", ".*")) ) )
- 筛选该自定义列值为
True的记录,即可得到符合规则的结果。
方案2:前缀匹配优化(仅*在规则末尾时适用)
若所有筛选规则的*都位于末尾(如B-Cr*、C-INV*均为前缀匹配场景),可使用更高效的前缀匹配方法:
- 给Table A添加自定义列,公式如下:
List.AnyTrue( List.Transform( TableB[Filters], each Text.StartsWith([Payment References], Text.Remove(_, "*")) ) )
- 筛选该列为
True的记录即可。
原代码无效原因
你之前使用Text.ToList会把支付参考字符串拆成单个字符的列表,再用List.ContainsAny检查单个字符是否存在于筛选规则列表中——这完全偏离了“匹配前缀/通配符规则”的需求,因此返回空结果。
内容的提问来源于stack exchange,提问作者Marc
相关产品推荐
相关产品推荐

