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

Power Query分组后仅在特定重复场景下过滤的实现方法咨询

Power Query 数据过滤需求解决方案

现有数据表

Insurance Claim NoSubcategory CodeApproval DateVendor Name
IE0225873I_REP_DAM12.10.2022XERO
IE0225873I_OTHER12.10.2022NERO
IE0225874I_REP_DAM12.10.2022XERO
IE0225874I_OTHER13.10.2022NERO
IE0225874I_OTHER12.10.2022NERO
IE0225875I_INS20.10.2022XERO
IE0225875I_REP_DAM20.10.2022NERO
IE0225876I_DAM20.11.2022XERO
IE0225876I_REP30.12.2022NERO

期望数据表

Insurance Claim NoSubcategory CodeApproval DateVendor Name
IE0225873I_REP_DAM12.10.2022XERO
IE0225874I_REP_DAM12.10.2022XERO
IE0225874I_OTHER13.10.2022NERO
IE0225875I_REP_DAM20.10.2022NERO
IE0225876I_DAM20.11.2022XERO
IE0225876I_REP30.12.2022NERO

需求说明

按Insurance Claim No分组后:

  • 同一分组内,若同一Approval Date对应多条记录,仅保留Subcategory Code为I_REP_DAM的行
  • 同一分组内,若某Approval Date仅对应一条记录,保留该行即可

遇到的问题

尝试用Group By统计重复日期行数,但分组后无法关联Subcategory Code字段导致过滤逻辑失效;不含Vendor Name时可通过条件列+分组求和解决,但包含该字段后无法实现,求可行方案。


解决方案

方法1:可视化界面操作(适合新手)

  1. 标记目标编码行
    在Power Query编辑器中,点击「添加列」→「自定义列」,输入公式:

    = [Subcategory Code] = "I_REP_DAM"
    

    将列名改为IsTargetCode,这列会用True/False标记当前行是否是需要优先保留的I_REP_DAM记录。

  2. 分组统计重复日期
    选中Insurance Claim No和Approval Date两列,点击「转换」→「分组依据」,设置两个分组规则:

    • 新列名DateCount,操作选「行计数」(统计当前索赔号+日期下的记录总数)
    • 新列名HasTargetCode,操作选「最大值」,列选IsTargetCode(判断当前组合下是否存在目标编码)
      点击确定后得到分组统计结果。
  3. 关联统计结果到原表
    点击「开始」→「合并查询」→「合并查询」,选择原表(左侧)和分组后的表(右侧),匹配列选Insurance Claim No和Approval Date,连接类型选「左外部」。
    展开合并后的GroupedData列,只勾选DateCount和HasTargetCode两个字段。

  4. 过滤符合条件的行
    点击「开始」→「筛选行」→「自定义筛选」,输入过滤条件:

    ([DateCount] = 1) or ([DateCount] > 1 and [IsTargetCode] = true)
    

    逻辑:要么该日期在当前索赔号下仅1条记录直接保留;要么日期重复但当前行是目标编码才保留。

  5. 清理辅助列
    选中IsTargetCode、DateCount、HasTargetCode三列右键删除,即可得到期望结果。

方法2:直接使用M代码(高效快捷)

将以下代码替换原查询的M代码(注意把Source替换为你的数据源步骤名):

let
    Source = 你的数据源,
    // 添加目标编码标记列
    AddTargetFlag = Table.AddColumn(Source, "IsTargetCode", each [Subcategory Code] = "I_REP_DAM"),
    // 按索赔号+日期分组,统计记录数和是否存在目标编码
    Grouped = Table.Group(AddTargetFlag, {"Insurance Claim No", "Approval Date"}, {
        {"DateCount", each Table.RowCount(_), Int64.Type},
        {"HasTargetCode", each List.Max([IsTargetCode]), logical}
    }),
    // 合并统计结果到原表
    Merged = Table.NestedJoin(AddTargetFlag, {"Insurance Claim No", "Approval Date"}, Grouped, {"Insurance Claim No", "Approval Date"}, "GroupedData", JoinKind.LeftOuter),
    // 展开统计字段
    Expanded = Table.ExpandTableColumn(Merged, "GroupedData", {"DateCount", "HasTargetCode"}, {"DateCount", "HasTargetCode"}),
    // 过滤符合条件的行
    Filtered = Table.SelectRows(Expanded, each ([DateCount] = 1) or ([DateCount] > 1 and [IsTargetCode] = true)),
    // 删除辅助列
    Cleaned = Table.RemoveColumns(Filtered, {"IsTargetCode", "DateCount", "HasTargetCode"})
in
    Cleaned

核心逻辑说明

通过同时按索赔号和日期分组,精准统计每个索赔号下每个日期的重复次数;标记目标编码行后,把统计结果关联到每一行,既实现了过滤逻辑,又完整保留了Vendor Name等所有原字段。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 07:27:08