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

如何在Power Query中快速计算累计和?优化List.Generate性能

快速生成batchId的Power Query实现方法

针对你用List.Generate计算累计和速度过慢的问题,推荐使用List.Scan替代,它是Power Query中专门用于高效累计计算的函数,内部做了性能优化,比逐行迭代的List.Generate快得多。

具体步骤(M代码示例)

假设你的原始表格已包含batchChange列(1表示新批次起始,0表示延续):

  1. 先缓冲表格减少重复读取开销:
    bufferedTable = Table.Buffer(Source)
    
  2. 提取batchChange列的列表:
    changeList = bufferedTable[batchChange]
    
  3. 用List.Scan计算累计批次ID,初始值设为0,每一步累加当前的batchChange值:
    batchIdList = List.Scan((accumulator, currentChange) => accumulator + currentChange, 0, changeList)
    
  4. 将计算好的批次ID列表合并回原表格:
    finalTable = Table.FromColumns(
        Table.ToColumns(bufferedTable) & {batchIdList},
        Table.ColumnNames(bufferedTable) & {"batchId"}
    )
    

为什么这个方法更快?

List.Generate是逐行迭代处理,每一步都要单独计算并生成结果;而List.Scan是基于向量式的批量计算,Power Query内部对这类操作做了针对性优化,处理6000行数据基本是毫秒级完成。

如果你的batchChange第一行是1,生成的batchId会从1开始,正好对应第一个批次;如果第一行是0,batchId会从0开始,你可以根据需求调整List.Scan的初始值(比如改成1)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 13:52:41