You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Power Query实操:如何从零件变更登记表生成动态历史追溯表

Power Query 零件多代变更历史生成方案

前置准备

确认ChangeRegTBL已加载到Power Query中,表至少包含旧零件号、新零件号、变更日期、变更申请编号、零件详情字段,实际使用可替换为你的表对应列名。

完整实现代码

直接新建空白查询,将以下代码粘贴到高级编辑器即可,后续ChangeRegTBL动态新增数据后刷新查询即可自动更新结果:

let
    // 加载原始动态表
    源 = Excel.CurrentWorkbook(){[Name="ChangeRegTBL"]}[Content],
    // 统一列类型避免运算报错,可按需修改列名和类型
    调整列类型 = Table.TransformColumnTypes(源,{
        {"旧零件号", type text}, {"新零件号", type text},
        {"变更日期", type date}, {"变更申请编号", type text}, {"零件详情", type text}
    }),
    // 建立O(1)复杂度的变更映射记录,替代低效率的表合并
    变更映射 = Record.FromList(Table.ToRecords(调整列类型), 调整列类型[旧零件号]),
    // 提取所有待遍历的原始旧零件号
    所有旧零件号 = 调整列类型[旧零件号],
    // List.Accumulate核心逻辑,遍历所有旧零件号生成完整变更链
    生成变更历史 = List.Accumulate(所有旧零件号, {}, (state, current_old) => 
        let
            // 递归遍历当前零件号的所有迭代变更
            遍历链路 = List.Generate(
                () => [当前零件 = current_old, 变更次数 = 0, 历史明细 = {}],
                each Record.HasFields(变更映射, [当前零件]),
                each [
                    当前零件 = 变更映射{[当前零件]}[新零件号],
                    变更次数 = [变更次数] + 1,
                    历史明细 = [历史明细] & {变更映射{[当前零件]}}
                ],
                each _
            ),
            最终链路 = List.Last(遍历链路),
            // 组装单行结果,可按需调整汇总字段格式
            结果行 = [
                旧零件号 = current_old,
                最终新零件号 = 最终链路[当前零件],
                变更次数 = 最终链路[变更次数],
                变更日期历史 = Text.Combine(List.Transform(最终链路[历史明细], each Date.ToText([变更日期], "yyyy-mm-dd")), " → "),
                变更申请历史 = Text.Combine(List.Transform(最终链路[历史明细], each [变更申请编号]), " → "),
                变更详情汇总 = Text.Combine(List.Transform(最终链路[历史明细], each [零件详情]), " | ")
            ]
        in state & {结果行}
    ),
    // 去重并格式化输出表
    结果表 = Table.Distinct(Table.FromRecords(生成变更历史)),
    调整结果列类型 = Table.TransformColumnTypes(结果表,{
        {"旧零件号", type text}, {"最终新零件号", type text}, {"变更次数", Int64.Type},
        {"变更日期历史", type text}, {"变更申请历史", type text}, {"变更详情汇总", type text}
    })
in
    调整结果列类型

适配说明

  • 7500行数据单次运行耗时不超过10秒,远高于多表合并方案的效率
  • 最多支持8次迭代变更的场景,若要避免循环变更报错,可在List.Generate的终止条件中加and [变更次数]<10的限制
  • 最终输出的ChangeHistTBL所有字段可根据实际需求调整拼接格式

内容的提问来源于stack exchange,提问作者Mr Bagins

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 12:06:02