在PowerBI/PowerQuery父表新列中拼接子表行数据
解决PowerQuery父子关联表转换的问题
我完全懂你碰到的这个坑——直接在Table.SelectRows里引用父表的[ParentId]确实行不通,因为这个函数的执行上下文是子表本身,它压根找不到父表的字段值。下面给你两种实用的解决办法,帮你顺利完成父子表的关联转换:
方法一:自定义函数+添加列(灵活可控)
这个方法适合需要对关联后的子数据做额外处理的场景:
- 先创建一个自定义函数,用来接收父行的
ParentId,并返回匹配的子表行:
GetChildRows = (parentId as any) as table => Table.SelectRows(ChildTable, each [Id] = parentId)
- 回到父表,添加一列来调用这个函数,把当前行的
ParentId传进去:
Table.AddColumn(ParentTable, "关联子行", each GetChildRows([ParentId]))
- 如果需要把子行展开成扁平结构,直接点击新列标题旁的展开按钮,选择你需要保留的子表字段即可。
方法二:合并查询(简单高效,推荐)
如果只是需要基础的关联拼接,用PowerQuery自带的合并功能更省心:
- 选中父表,点击顶部菜单栏的【合并查询】→【合并查询作为新查询】
- 在弹出的合并窗口中,选择子表作为关联对象,设置关联条件为父表[ParentId] = 子表[Id]
- 合并类型选择【左外部】(确保父表的所有行都能保留,没有对应子行的会显示null)
- 确定后,新表会出现一个包含子表数据的列,点击列标题的展开按钮,勾选需要展示的子表字段就完成了。
为什么你原来的方法失败?
你之前写的Table.SelectRows('ChildTable', each [Id] = [ParentId])里的[ParentId]是在子表的上下文里查找的,但子表本身并没有这个列,所以PowerQuery会报错找不到字段。而自定义函数的方式是把父行的ParentId作为参数传递进去,相当于给Table.SelectRows提供了一个明确的匹配值,自然就能正确关联了。
内容的提问来源于stack exchange,提问作者Eduard Paul Lakida
相关产品推荐
相关产品推荐

