基于双列关联值合并行:Power Query代码链式分组实现求助
Power Query 链式代码分组实现方案
核心实现步骤
统一数据类型
先确保A、B两列都是文本类型,避免因类型不匹配导致关联失效:转换类型 = Table.TransformColumnTypes(Source,{{"A", type text}, {"B", type text}})识别链式结构的起点
筛选出所有B值不在A列中的条目,这些值就是每个链式结构的根节点(起点):起点列表 = List.Distinct(Table.SelectRows(转换类型, each not List.Contains(转换类型[A], [B]))[B])编写递归函数遍历完整链条
自定义递归函数,从每个起点出发,逐层获取所有关联的子节点,拼接成完整链条:获取完整链条 = (当前代码 as text) as list => let 子节点 = Table.SelectRows(转换类型, each [B] = 当前代码)[A], 子链条 = List.Transform(子节点, (x) => 获取完整链条(x)), 完整链条 = if List.IsEmpty(子节点) then {当前代码} else {当前代码} & List.Combine(子链条) in 完整链条生成结果表格
基于起点列表生成每个链条的记录,再转换为表格,可选拆分链条为多级列:链条列表 = List.Transform(起点列表, (x) => [起点=x, 完整链条=获取完整链条(x)]), 结果表格 = Table.FromRecords(链条列表), // 可选:拆分链条为多级列 拆分链条列 = Table.SplitColumn(结果表格, "完整链条", Splitter.SplitByNothing(), List.Transform({1..List.Max(List.Transform(结果表格[完整链条], List.Count))}, each "链条"&Text.From(_)))
常见报错排查(针对你之前的NextCodes报错)
- 数据类型不统一:检查A、B列是否同为文本/数字,类型不匹配会导致子节点筛选失败
- 递归边界未处理:函数中需判断子节点为空的情况,避免无限递归或空列表拼接错误
- 起点识别错误:若误将非根节点作为起点,会导致链条重复或断裂
内容的提问来源于stack exchange,提问作者user22675801
相关产品推荐
相关产品推荐

