Excel Power Query按ID列表连接两表执行Table.NestedJoin报错求助
报错原因
Table.NestedJoin做表连接时,要求两侧指定的连接键数据类型、值层级完全匹配。你的代码报错核心原因是连接键类型不匹配:
- Table2的
List of ids字段存储的是列表(List)类型值,单个单元格内包含多个ID - Table1的
ID字段存储的是标量单值(数字/文本等单个值)
拿列表类型的列和单值类型的列做连接匹配,Power Query无法对齐匹配逻辑,直接触发报错。
正确关联步骤
- 第一步:先展开Table2中的ID列表,把每行存储的多个ID拆分为独立行,让连接键变为单值。使用
Table.ExpandListColumn函数实现:
#"展开ID列" = Table.ExpandListColumn(#"Table2", "List of ids")
- 第二步:校验两表连接键的数据类型,将展开后的
List of ids列和Table1的ID列转为完全一致的类型(比如统一为文本、或统一为整数),类型不一致时用Table.TransformColumnTypes做转换即可。 - 第三步:执行左外连接操作,此时两侧连接键都是同类型单值,可正常匹配。完整参考M代码:
let 读取Table2 = Excel.CurrentWorkbook(){[Name="Table2"]}[Content], 展开ID列表 = Table.ExpandListColumn(读取Table2, "List of ids"), // 类型不匹配时取消下一行注释,按需修改目标类型 // 统一ID类型 = Table.TransformColumnTypes(展开ID列表,{{"List of ids", type text}}), 左外连接 = Table.NestedJoin(展开ID列表,{"List of ids"},Table1,{"ID"},"匹配结果",JoinKind.LeftOuter), 展开匹配字段 = Table.ExpandTableColumn(左外连接, "匹配结果", {"Name"}, {"匹配到的Name"}) in 展开匹配字段
如果需要保留Table2原始的行结构(不拆分ID为多行),可以在完成匹配后,按
Field、Field2两个原表字段分组,将匹配到的Name值聚合为列表,即可还原为原表每行对应多条匹配结果的结构。
内容的提问来源于stack exchange,提问作者Alexandr Kudryashov
相关产品推荐
相关产品推荐

