Power BI基于Type列去重:保留Shared、移除Dedicated行的实现方法
按规则对Power BI表格去重的两种实现方法
需求明确:同一code同时存在Shared和Dedicated类型时,仅保留Shared行;仅存在单一类型时,保留原行。以下是M Query和DAX两种实现方式:
方法一:Power Query(M语言)实现
- 打开Power Query编辑器,选中目标数据表
- 复制以下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
相关产品推荐
相关产品推荐

