Power BI如何按两列groupby并列出另两列唯一值同时计数
Power BI按字段分组拼接唯一值+计数实现方案
你判断的方向是对的,CONCATENATEX是DAX里实现分组字符串拼接最直接的函数,以下是可直接复用的操作方法:
方法一:DAX新建计算表(无需进入Power Query,直接在建模层实现)
操作路径:点击顶部菜单栏「建模」选项卡 → 选择「新表」,在公式栏输入对应DAX代码即可。
分组聚合结果 = SUMMARIZE( '你的CSV表名', // 替换为你实际导入的CSV数据源表名称 '你的CSV表名'[car], '你的CSV表名'[city], // 拼接color唯一值,套[]匹配输出格式 "color", "[" & CONCATENATEX(DISTINCT('你的CSV表名'[color]), '你的CSV表名'[color], ", ") & "]", // 拼接code唯一值 "code", "[" & CONCATENATEX(DISTINCT('你的CSV表名'[code]), '你的CSV表名'[code], ",") & "]", // 统计组内唯一行数 "count", COUNTROWS(DISTINCT('你的CSV表名')) )
核心逻辑说明:
SUMMARIZE函数承担分组作用,指定的car、city就是分组维度,和SQL的GROUP BY逻辑一致DISTINCT()负责提取当前分组下对应字段的去重值,避免重复值被拼接到结果里CONCATENATEX是迭代拼接函数,会逐行遍历去重后的值集合,按你指定的分隔符拼接为完整字符串- 计数部分用
COUNTROWS(DISTINCT('你的CSV表名'))可以自动排除组内完全重复的行,统计结果更准确
方法二:Power Query清洗阶段实现(适合需要提前固化清洗逻辑的场景)
如果你更习惯在数据预处理阶段完成计算,可以在Power Query编辑器里操作:
- 导入CSV数据源后进入Power Query编辑器,同时选中
car、city两列,点击顶部「转换」选项卡 → 选择「分组依据」 - 在弹出的配置窗口中,依次添加3个聚合列:
- 列名输入
color,聚合操作选择「所有行」,自定义公式为"[" & Text.Combine(List.Distinct([color]),", ") & "]" - 列名输入
code,聚合操作选择「所有行」,自定义公式为"[" & Text.Combine(List.Distinct([code]),",") & "]" - 列名输入
count,聚合操作选择「对行进行计数」
- 列名输入
- 点击确认后即可得到和预期完全一致的输出结果。
提示:如果你的原始数据里同一个分组下存在重复的color或code值,两种方法都已经通过去重函数做了处理,不会出现重复拼接的问题。
内容的提问来源于stack exchange,提问作者codelifevcd
相关产品推荐
相关产品推荐

