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

Power BI基于Type列去重:保留Shared、移除Dedicated行的实现方法

按规则对Power BI表格去重的两种实现方法

需求明确:同一code同时存在Shared和Dedicated类型时,仅保留Shared行;仅存在单一类型时,保留原行。以下是M Query和DAX两种实现方式:

方法一:Power Query(M语言)实现

  1. 打开Power Query编辑器,选中目标数据表
  2. 复制以下M代码替换现有查询(注意把Source = 你的数据源替换成实际数据源,比如Source = Excel.CurrentWorkbook(){[Name="表1"]}[Content]):
let
    Source = 你的数据源,
    // 给每行标记所属code是否存在Shared类型
    AddSharedFlag = Table.AddColumn(Source, "HasShared", 
        each List.Contains(Table.SelectRows(Source, (row) => row[code] = _[code])[type], "Shared")),
    // 筛选符合条件的行:要么是Shared,要么该code没有Shared时保留原行
    FilterValidRows = Table.SelectRows(AddSharedFlag, 
        each ([type] = "Shared") or ([HasShared] = false)),
    // 删除辅助列
    CleanTable = Table.RemoveColumns(FilterValidRows, {"HasShared"})
in
    CleanTable

方法二:DAX创建计算表实现

在Power BI的「建模」选项卡点击「新建表」,输入以下DAX公式(替换'原表'为你的实际表名):

去重结果表 = 
// 先找出所有包含Shared类型的code
VAR CodesWithShared = 
    CALCULATETABLE(VALUES('原表'[code]), '原表'[type] = "Shared")
RETURN
    // 合并两部分数据:所有Shared行 + 无Shared的code对应的原行
    UNION(
        FILTER('原表', '原表'[type] = "Shared"),
        FILTER('原表', NOT('原表'[code] IN CodesWithShared))
    )

核心逻辑说明

两种方法本质都是先识别出存在Shared类型的code集合,然后:

  • 保留这些code对应的Shared行
  • 保留不在该集合中的code的所有行(即仅有一种类型的行)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 09:54:19