Power Query M:左连接后动态合并并展开嵌套表
Power Query M 动态合并展开左外连接后的嵌套表
问题分析
你遇到的报错是因为左外连接(Left Outer)后,部分行的Quali-Matrix嵌套列是null值,而Table.Combine无法处理null,导致提示找不到表。同时原代码只提取嵌套列合并,既丢失了左表原有数据,也没实现动态适配嵌套表列变动的需求。
解决方案1:保留左表数据+动态展开嵌套表
如果需要保留左表(Abwesenheit)的所有列,同时自动适配Quali-Matrix的列变动,使用以下代码:
let // 执行左外连接 JoinedTable = Table.NestedJoin(Abwesenheit, {"MA"}, #"Quali-Matrix", {"Arbeitsplatzname1"}, "Quali-Matrix", JoinKind.LeftOuter), // 将嵌套列中的null替换为空表,避免Table.Combine报错 ReplaceNullTables = Table.ReplaceValue(JoinedTable, null, Table.FromRecords({}), Replacer.ReplaceValue, {"Quali-Matrix"}), // 逐行处理:把左表行数据和对应嵌套表合并 ExpandDynamic = Table.TransformRows(ReplaceNullTables, (row) => let // 提取当前行除嵌套列外的所有数据 NonNestedData = Record.RemoveFields(row, {"Quali-Matrix"}), // 获取当前行的嵌套表 NestedTable = row[Quali-Matrix], // 给嵌套表每行添加左表行数据 CombinedTable = Table.AddColumn(NestedTable, "Temp", each NonNestedData), // 动态展开左表数据列(自动识别列名,无需硬编码) ExpandedTable = Table.ExpandRecordColumn(CombinedTable, "Temp", Record.FieldNames(NonNestedData)) in ExpandedTable ), // 合并所有行的结果表 FinalTable = Table.Combine(ExpandDynamic) in FinalTable
关键说明
Table.ReplaceValue:把嵌套列中的null替换为空表,彻底解决"找不到Quali-Matrix"的报错- 动态适配列变动:通过
Record.FieldNames(NonNestedData)自动获取左表列名,Table.ExpandRecordColumn动态展开,未来左表或Quali-Matrix的列增减都无需修改代码 - 保留关联关系:确保左表的每一行数据都能和匹配到的嵌套表行正确关联
解决方案2:仅动态合并嵌套表(丢弃左表数据)
如果确实只需要合并所有Quali-Matrix嵌套表,不需要保留左表数据,只需在原代码基础上添加null替换步骤:
let Quelle = Table.NestedJoin(Abwesenheit, {"MA"}, #"Quali-Matrix", {"Arbeitsplatzname1"}, "Quali-Matrix", JoinKind.LeftOuter), // 新增:把嵌套列的null替换为空表 ReplaceNullTables = Table.ReplaceValue(Quelle, null, Table.FromRecords({}), Replacer.ReplaceValue, {"Quali-Matrix"}), RemoveOthers = Table.SelectColumns(ReplaceNullTables,{"Quali-Matrix"}), out = Table.Combine(RemoveOthers["Quali-Matrix"]) in out
内容的提问来源于stack exchange,提问作者hadji
相关产品推荐
相关产品推荐

