Excel Power Query新手求助:如何实现多表任意行交叉合并?
实现两个Excel表格的笛卡尔积(任意行合并)
嘿,作为Power Query新手碰到这种需求确实容易懵——毕竟常规合并都是按列匹配,而你要的是把Table1的每一行都和Table2的每一行组合起来,也就是笛卡尔积。下面给你两种方法,一步步来搞定:
方法一:可视化操作(适合新手)
- 先把Table1和Table2都加载到Power Query编辑器里(通过「数据」→「从表格/区域」入口)。
- 给Table1加个辅助列:点击「添加列」→「自定义列」,输入公式
=1,把列名改成「Key」后确定。 - 给Table2做同样的操作,也添加一个值为1的「Key」列。
- 合并两个表格:回到主页→「合并查询」→「合并查询作为新查询」。在弹窗里,左侧选Table1,右侧选Table2,分别点选两个表格里的「Key」列作为匹配列,合并类型选「完全外部」(其实因为Key值都相同,选哪种合并类型结果都一致)。
- 展开合并后的列:点击合并列右侧的展开按钮,勾选Table2里的所有列(比如你的数字列),别勾选「使用原始列名作为前缀」,确认后完成展开。
- 最后删掉「Key」列,就得到你想要的Table3了!
方法二:直接用M代码(更高效)
如果不想手动点来点去,也可以直接在Power Query里新建空白查询,粘贴下面的代码(记得把Table1和Table2改成你实际的表格名称):
let // 加载两个源表格 Source_Table1 = Table1, Source_Table2 = Table2, // 给两个表格添加相同的辅助Key列 Add_Key_Table1 = Table.AddColumn(Source_Table1, "Key", each 1), Add_Key_Table2 = Table.AddColumn(Source_Table2, "Key", each 1), // 基于Key列合并表格 Merged_Tables = Table.NestedJoin(Add_Key_Table1, {"Key"}, Add_Key_Table2, {"Key"}, "Table2_Data", JoinKind.FullOuter), // 展开Table2的所有数据列 Expanded_Data = Table.ExpandTableColumn(Merged_Tables, "Table2_Data", Table.ColumnNames(Source_Table2), Table.ColumnNames(Source_Table2)), // 删除辅助Key列得到最终表格 Final_Table = Table.RemoveColumns(Expanded_Data, {"Key"}) in Final_Table
核心逻辑很简单:用一个值完全相同的辅助列,让两个表格的每一行都能相互匹配,从而实现所有行的全组合~
内容的提问来源于stack exchange,提问作者Arnoldas Bankauskas
相关产品推荐
相关产品推荐

