Power BI如何通过Power Query拼接合并3张表实现目标效果
Power Query 实现3张表错位并排拼接方案
你需要的拼接效果参考如下,和默认「追加查询」的纵向同列堆叠逻辑不同,本质是按行位置对齐、多表列横向并联合并:
具体操作步骤
- 给3张源表统一加索引列
进入Power Query编辑器后,分别选中Code1、Code2、Code3三张表,每张表依次操作:点击顶部「添加列」选项卡 > 选择「索引列」> 统一设置为从0开始,保证三张表索引的起始值、步长完全一致。 - 通过索引列做全外连接合并
选中Code1表,点击顶部「主页」选项卡的「合并查询」:在弹窗中先点选Code1的索引列,再下拉选中Code2表、点选Code2的索引列,联接种类选择「完全外部(两者中的所有行)」后确认。此时会生成一列存储Code2匹配行的Table值,点击列头的展开图标,取消勾选索引列,按需选择是否保留原始列名前缀,确认展开即可得到Code1+Code2的合并结果。
重复上述合并操作,将Code3表也通过索引列的完全外部联接合并到当前表中,展开Code3除索引外的所有业务列。 - 清理冗余字段
合并完成后,选中来自Code2、Code3的冗余索引列,右键删除即可;如果不需要索引做后续计算,也可以把初始的索引列一并删除,最终得到的就是和示例一致的目标表。
可直接复用的M代码
如果需要快速实现,可以新建空白查询,打开高级编辑器粘贴以下代码,替换为你实际的表名即可:
let // 读取三张源表,可替换为自己的实际表名 T1 = Table.AddIndexColumn(Code1, "idx", 0, 1, Int64.Type), T2 = Table.AddIndexColumn(Code2, "idx", 0, 1, Int64.Type), T3 = Table.AddIndexColumn(Code3, "idx", 0, 1, Int64.Type), // 合并前两张表 Merge12 = Table.NestedJoin(T1, {"idx"}, T2, {"idx"}, "T2_Cols", JoinKind.FullOuter), Expand12 = Table.ExpandTableColumn(Merge12, "T2_Cols", List.Difference(Table.ColumnNames(T2), {"idx"})), // 合并第三张表 MergeAll = Table.NestedJoin(Expand12, {"idx"}, T3, {"idx"}, "T3_Cols", JoinKind.FullOuter), ExpandAll = Table.ExpandTableColumn(MergeAll, "T3_Cols", List.Difference(Table.ColumnNames(T3), {"idx"})), // 清理冗余索引列 Result = Table.RemoveColumns(ExpandAll, {"idx"}) in Result
提示:如果三张表存在重名列,展开列时建议给列名加表名前缀,避免重名报错。比如展开Code2列时,可将列名列表做一层转换,给所有列名前加上
Code2_前缀即可。
内容的提问来源于stack exchange,提问作者Tan Saint
相关产品推荐
相关产品推荐

