Power Query实现XLOOKUP等价功能遇列未更新问题求助
Power Query 更新主表数据问题排查与修正
你的代码核心问题是在列更新步骤错误地引用了已被展开的嵌套表列,导致替换逻辑没有生效。以下是具体问题分析和修正方案:
问题原因
- 你已经通过
Table.ExpandTableColumn将嵌套的Source2Data表展开为Source2_Title、Source2_Description等独立列,但后续更新列时仍然试图访问[Source2Data][Title]这类嵌套表中的值——此时Source2Data是一个表对象,直接访问其列值无法正确获取到展开后的内容,导致替换逻辑失效。 - 判断是否匹配成功的逻辑应该基于展开后的列是否为null(左连接无匹配时,展开列都会是null),而非判断
[Source2Data] <> null。
修正后的代码
let // 左连接两个表,基于ID Number MergedTables = Table.NestedJoin(Source1, {"ID Number"}, Source2, {"ID Number"}, "Source2Data", JoinKind.LeftOuter), // 展开需要更新的列,命名为Source2_前缀区分 ExpandedSource2Data = Table.ExpandTableColumn(MergedTables, "Source2Data", {"Title", "Description", "Status", "Disposition"}, {"Source2_Title", "Source2_Description", "Source2_Status", "Source2_Disposition"}), // 用Source2的列更新Source1对应列,仅当Source2有数据且内容不同时替换 UpdatedColumns = Table.TransformColumns(ExpandedSource2Data, { {"Title", each if [Source2_Title] <> null and (try Text.From(_) <> [Source2_Title] otherwise false) then [Source2_Title] else _, type text}, {"Description", each if [Source2_Description] <> null and _ <> [Source2_Description] then [Source2_Description] else _, type text}, {"Status", each if [Source2_Status] <> null and _ <> [Source2_Status] then [Source2_Status] else _, type text}, {"Disposition", each if [Source2_Disposition] <> null and _ <> [Source2_Disposition] then [Source2_Disposition] else _, type text} }), // 删除临时的Source2前缀列和原嵌套列 FinalTable = Table.RemoveColumns(UpdatedColumns, {"Source2Data", "Source2_Title", "Source2_Description", "Source2_Status", "Source2_Disposition"}) in if Table.RowCount(FinalTable) > 0 then FinalTable else null
关键改动说明
- 更新列时使用展开后的
Source2_Title等列,而非嵌套表Source2Data的列,确保能正确获取到更新值 - 用
_代替重复的[Title]/[Description]等,简化代码(_在Table.TransformColumns中代表当前列的原始值) - 增加删除
Source2Data嵌套列的操作,避免最终表残留无用列 - 调整匹配判断逻辑为检查
Source2_xxx是否为null,更准确反映是否匹配到更新数据
内容的提问来源于stack exchange,提问作者Brain_overflowed
相关产品推荐
相关产品推荐

