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

如何在Power Query中用上一行平均值计算车队柴油库存指标?

在Power Query中实现逐行依赖的柴油库存计算

要处理这种需要引用上一行计算结果的库存跟踪需求,Power Query可以通过List.Accumulate函数实现迭代计算,携带并更新上一次的库存状态(数量、价值、均价),具体方案如下:

1. 核心思路

利用List.Accumulate遍历每行数据,每次迭代时根据当前行的操作类型(采购/消耗),基于上一轮的库存状态计算新的库存数据:

  • 采购操作:库存数量累加采购量,库存价值累加采购金额,新均价为总价值除以总数量
  • 消耗操作:库存数量扣减消耗量,库存价值按上一轮均价扣减对应金额,均价保持上一轮数值

2. 具体M代码示例

假设你的输入表包含日期、操作类型、数量(升)、采购单价(元/升)列,代码如下:

let
    Source = 你的数据源表,
    // 将表转换为记录列表,方便逐行迭代
    RowRecords = Table.ToRecords(Source),
    // 初始化初始库存状态:数量、价值、均价都为0
    InitialStock = [库存数量=0, 库存价值=0, 均价=0],
    // 迭代计算每一行的库存变化
    CalculatedStock = List.Accumulate(RowRecords, InitialStock, (prevState, currentRow) =>
        let
            OpType = currentRow[操作类型],
            Qty = currentRow[数量(升)],
            // 处理采购/消耗的不同计算逻辑
            NewQty = if OpType = "采购" then prevState[库存数量] + Qty else prevState[库存数量] - Qty,
            NewValue = if OpType = "采购" 
                        then prevState[库存价值] + Qty * currentRow[采购单价(元/升)] 
                        else prevState[库存价值] - Qty * prevState[均价],
            // 避免除以0的边界处理
            NewAvg = if NewQty = 0 then 0 else NewValue / NewQty
        in
            // 保留当前行数据+新库存状态
            [当前行=currentRow, 库存数量=NewQty, 库存价值=NewValue, 均价=NewAvg]
    ),
    // 合并记录并转换为最终表格
    ResultList = List.Transform(CalculatedStock, each Record.Combine({_[当前行], [库存数量=_[库存数量], 库存价值=_[库存价值], 均价=_[均价]]})),
    FinalTable = Table.FromRecords(ResultList)
in
    FinalTable

3. 适配调整说明

  • 根据你的实际列名修改代码中的字段名称(比如操作类型、数量(升)等)
  • 若有其他业务规则(如库存不能为负),可在NewQty计算后添加判断逻辑
  • 可通过调整InitialStock的初始值,适配已有初始库存的场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 15:25:02