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

如何基于生产/交付日期及库存自动分配订单批次?寻求技术方案

批次分配自动化实现方案(DAX/Power Query/Excel公式)

可以实现,以下分三种方案说明,适配不同业务场景:


Power Query(首推方案,适合批量自动化)

针对每周导入CSV订单的场景,Power Query的批量数据转换能力最适配,核心逻辑是通过分组排序+累计值匹配实现批次分配:

  1. 预处理表B:按Item code分组,每组内按生产日期升序(旧批次优先)排序,计算批次累计库存;
  2. 预处理表A:按Item code分组,每组内按订单号/交付日期升序(旧订单优先)排序,计算订单累计需求;
  3. 批次匹配:对每个Item code组,将累计需求与累计库存做区间匹配,自动分配对应批次(含跨批次分配场景);
  4. 合并回写:将分配结果合并到原表A,填充Batch no.列。

关键M代码片段(表B预处理):

let
    Source = Excel.CurrentWorkbook(){[Name="表B"]}[Content],
    按Item分组 = Table.Group(Source, {"Item code"}, {{"批次明细", each Table.Sort(_,{{"生产日期", Order.Ascending}}), type table}}),
    添加累计库存 = Table.TransformColumns(按Item分组, {{"批次明细", each Table.AddColumn(_, "累计库存", (x) => List.Sum(List.Range([可用库存],0,Table.PositionOf(_,x)+1)))}})
in
    添加累计库存

完成配置后,每周只需导入新的CSV订单,点击刷新即可自动完成批次分配。


DAX(适合Power BI动态分析场景)

如果是在Power BI中做动态库存分配分析,可通过DAX计算列/度量值实现:

  1. 先在表B中计算按Item code+生产日期排序的累计库存列;
  2. 对表A的每一行,计算当前Item code下的累计需求(当前订单及之前的总需求);
  3. 通过区间匹配找到覆盖累计需求的批次,跨批次场景用CONCATENATEX合并批次号。

示例DAX计算列:

Batch no. = 
VAR CurrentItem = '表A'[Item code]
VAR CurrentDemand = '表A'[需求数量]
VAR CumulativeDemand = 
    CALCULATE(
        SUM('表A'[需求数量]),
        ALLEXCEPT('表A', '表A'[Item code]),
        '表A'[订单号] <= EARLIER('表A'[订单号])
    )
VAR PreviousCumulativeDemand = CumulativeDemand - CurrentDemand
VAR TargetBatches = 
    FILTER(
        '表B',
        '表B'[Item code] = CurrentItem &&
        '表B'[累计库存] > PreviousCumulativeDemand &&
        '表B'[累计库存] <= CumulativeDemand
    )
// 处理跨多个批次的情况
VAR CrossBatches = IF(COUNTROWS(TargetBatches)=0, FILTER('表B', '表B'[Item code]=CurrentItem && '表B'[累计库存]>PreviousCumulativeDemand), TargetBatches)
RETURN
    CONCATENATEX(CrossBatches, '表B'[Batch no.], ", ")

Excel公式(适合小数据量场景)

数据量较小时,可通过Excel函数组合快速实现,需提前对表B按Item code+生产日期排序并计算累计库存:

  1. 用SUMIF计算表A中当前Item code的累计需求;
  2. 用FILTER筛选出覆盖累计需求区间的批次;
  3. 用TEXTJOIN合并跨批次的结果。

示例公式(假设表B累计库存列在E列,表AItem code在F列,需求数量在H列):

=TEXTJOIN(", ", TRUE, 
    FILTER($D$2:$D$100, 
        $B$2:$B$100=F2 && 
        $E$2:$E$100>=(SUMIF($F$2:F2, F2, $H$2:H2)-H2) && 
        $E$2:$E$100<=SUMIF($F$2:F2, F2, $H$2:H2)
    )
)

内容的提问来源于stack exchange,提问作者Michael Molnár

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 10:25:00