PowerBI如何按列分组表并返回另一列唯一值的逗号分隔结果
Power BI 分组拼接同组唯一值实现方案
你可以根据自身使用场景,选择Power Query预处理或者DAX动态计算两种方案,最终都能实现按指定列分组、归集另一列唯一值并按逗号拼接的效果。
方案1:Power Query 编辑器实现(推荐)
该方案在数据清洗阶段完成转换,后续数据刷新时会自动同步结果,适合需要固定输出表结构的场景。
操作步骤:
- 打开Power Query编辑器,选中目标源表,点击顶部「转换」选项卡下的分组依据按钮
- 在弹出的配置窗口选择「高级」模式,添加分组列,比如示例场景选择
[Country]作为分组维度 - 新增聚合配置:自定义输出列名(比如
Cities_Raw),聚合操作选择「所有行」,点击确定完成初始分组 - 点击「添加列」选项卡下的自定义列,输入以下M公式:
Text.Combine(List.Distinct([Cities_Raw][Cities]), ",")
公式逻辑:先通过
List.Distinct()提取同组下Cities列的所有不重复值生成列表,再通过Text.Combine()用英文逗号把列表项拼接为单个文本串
- 删除初始分组生成的
Cities_Raw列,将新生成的自定义列重命名为Cities即可。示例场景下最终输出为:Country=USA对应的Cities值为New York,Boston,Chicago,Houston。
方案2:DAX 公式实现
该方案不需要改动源数据结构,适合在报表展示层做动态计算,支持随筛选器联动更新结果。
- 如果需要生成固定的计算列,在建模视图新建列,输入以下DAX代码(替换其中的表名、列名为你实际的字段名):
Concat_Cities = CALCULATE( CONCATENATEX( DISTINCT('YourTable'[Cities]), 'YourTable'[Cities], "," ), ALLEXCEPT('YourTable', 'YourTable'[Country]) )
- 如果需要做随筛选上下文动态变化的度量值,新建度量值输入以下代码:
Concat_Cities_Measure = CONCATENATEX( DISTINCT('YourTable'[Cities]), 'YourTable'[Cities], "," )
小提示:如果同组下存在空的Cities值,可以在
DISTINCT()外层套FILTER('YourTable', 'YourTable'[Cities] <> BLANK())过滤空值,避免拼接结果出现多余的逗号。
内容的提问来源于stack exchange,提问作者user15170185
相关产品推荐
相关产品推荐

