Power Query横向透视数据表:生成无聚合列联表的需求
Power Query 生成无聚合动态列联表解决方案
问题背景
原始输入数据:
A 1 B 1 C 1 A 2 C 2 C 3
期望输出格式:
A 1 2 B 1 C 1 2 3
遇到的核心问题:
- 常规列联表列数固定,无法适配分组下值数量不同的场景(比如有的分组有5个值,就需要5列)
- 默认列联表会对数值列做聚合(求和/计数等),无法保留分组下的所有原始值
解决方案步骤
以下是Power Query的具体操作步骤(可直接复制M代码到高级编辑器):
1. 导入并预处理数据
将原始文本导入Power Query后,按空格拆分列,得到分组和值两列(假设表名为源)。
2. 给每个分组内的值添加序号
这一步是为了后续透视时能按顺序生成多列:
添加分组内序号 = Table.Group(源, {"分组"}, {{"临时表", each Table.AddIndexColumn(_, "序号", 1, 1, Int64.Type)}}), 展开临时表 = Table.ExpandTableColumn(添加分组内序号, "临时表", {"值", "序号"})
3. 动态透视生成列联表
通过透视操作,自动根据所有分组的最大值数量生成对应列:
动态透视 = Table.Pivot(展开临时表, List.Distinct(展开临时表[序号]), "序号", "值")
4. 可选:处理空值
如果需要把空值替换为空白,添加:
替换空值 = Table.ReplaceValue(动态透视, null, "", Replacer.ReplaceValue)
效果说明
- 列数会自动适配所有分组中值的最大数量,比如某个分组有4个值,就会生成4列
- 所有原始值都会被保留,不会做任何聚合操作
- 分组内的值会按原始顺序排列到对应列中
内容的提问来源于stack exchange,提问作者blackroad
相关产品推荐
相关产品推荐

