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

如何在Power Query中实现多组条件筛选并合并结果(免复制源数据)

在Power Query中复用源数据实现多参数化筛选并合并结果

1. 创建参数化筛选规则表

先建立一个集中管理所有筛选规则的表,后续新增/修改规则只需调整此表,无需重复复制源数据或修改筛选逻辑。规则表结构示例:

设备名称允许的From Zone(列表)允许的To Zone(列表)
firewall 1{"Internal"}{}
firewall 2{"Gateway", "VPN"}{"DMZ"}

说明:空列表{}代表任意值,即不对该列做筛选限制。

2. 编写自定义筛选函数

在Power Query中新建自定义函数,用于判断单条数据行是否符合某一条筛选规则,命名为CheckRowAgainstRule:

= (dataRow as record, filterRule as record) as logical =>
let
    // 设备匹配判断
    DeviceMatch = dataRow[Device] = filterRule[设备名称],
    // From Zone判断:规则为空则匹配,否则检查是否在允许列表中
    FromZoneMatch = List.IsEmpty(filterRule[允许的From Zone(列表)]) or List.Contains(filterRule[允许的From Zone(列表)], dataRow[From Zone]),
    // To Zone判断:规则为空则匹配,否则检查是否在允许列表中
    ToZoneMatch = List.IsEmpty(filterRule[允许的To Zone(列表)]) or List.Contains(filterRule[允许的To Zone(列表)], dataRow[To Zone]),
    // 所有条件同时满足则返回true
    Result = DeviceMatch and FromZoneMatch and ToZoneMatch
in
    Result

3. 应用规则并合并结果

按以下步骤执行:

  1. 加载你的源数据(命名为SourceData)和上述筛选规则表(命名为FilterRules)。
  2. 对FilterRules执行添加列操作,用自定义函数关联源数据:
    = Table.AddColumn(FilterRules, "匹配数据", each Table.SelectRows(SourceData, (row) => CheckRowAgainstRule(row, _)))
    
  3. 展开匹配数据列,选择保留Device、From Zone、To Zone字段。
  4. 执行删除重复行操作,避免同一数据行被多条规则匹配后重复出现。
  5. 整理列顺序,得到最终合并结果。

针对示例数据的验证结果

基于你提供的原始数据,最终合并结果如下:

DeviceFrom ZoneTo Zone
firewall 1InternalExternal
firewall 1InternalVPN
firewall 2ExternalDMZ
firewall 2VPNDMZ
firewall 2GatewayDMZ

注:你提供的数据集2示例中存在数据错误(原数据无firewall 2对应VPN -> Internal、Gateway -> Internal的行),上述为基于原始数据计算的正确结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 20:12:39