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

Power Query按ID筛选最大日期行后关联查询运行极慢求助

问题原因分析与优化方案

性能问题核心原因

  • 原有代码属于逐行嵌套迭代逻辑:每处理QueryB的1行数据,都需要重新遍历整个13万行的QueryB表,筛选同ID的所有行再计算最大日期,时间复杂度为O(n²),13万行的场景下会产生超100亿次重复计算,直接导致内存溢出、运行超时。
  • 该写法无法触发Power Query的查询优化机制,每一次嵌套的Table.SelectRows都会生成临时子表,大量临时数据堆积占用内存。

最优修改方案

推荐两种经过验证的高效实现,时间复杂度均为O(n),处理13万行数据耗时不会超过10秒:

方案1:分组取最大行(兼容性最好,结果最稳定)

先按ID分组,每个分组直接取日期最大的1行记录,再展开即可:

// 按ID分组,每组取Date最大的行记录
FilterOutDups = Table.Group(PriorStep, {"ID"}, {{"MaxDateRow", each Table.Max(_, "Date"), type record}}),
// 展开记录的所有列,无需手动指定列名
ExpandMaxRow = Table.ExpandRecordColumn(FilterOutDups, "MaxDateRow", Table.ColumnNames(PriorStep))

方案2:排序后去重(代码最简洁,运行速度最快)

先按ID升序、日期降序排序,此时每个ID的第一行就是日期最大的行,直接按ID列去重即可:

#"按ID与日期排序" = Table.Sort(PriorStep,{{"ID", Order.Ascending}, {"Date", Order.Descending}}),
FilterOutDups = Table.Distinct(#"按ID与日期排序", {"ID"})

额外优化建议

  • 去重处理前可先删除QueryB中后续关联不需要的冗余列,进一步减少数据处理量
  • 可以先单独运行去重后的QueryB查询确认结果正常,再和QueryA做关联,避免关联时重复计算去重逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:36:05