订单分配公式详解:动态任务分配

古哥计划
古哥计划

优秀创作者

📊 WPS公式详解:动态任务分配系统

📋 数据概览

订单数据(A1:C7)

订单号

零件

数量

PO-1

C

2

PO-2

C

3

PO-3

A

5

PO-4

C

7

PO-5

A

2

PO-6

A

4

任务数据(E1:G4)

任务号

零件

数量

WK-001

C

3

WK-002

C

25

WK-003

A

20

🔧 公式结构图

flowchart TD
    A[开始] --> B[REDUCE函数迭代]
    B --> C[遍历订单B2:B7]
    C --> D[LET函数处理每个零件]
    
    D --> E[定义变量]
    E --> F["Y: 当前零件"]
    E --> G["G: 任务数量G2:G4"]
    E --> H["D: 累计已分配量"]
    E --> I["T: 当前订单数量"]
    
    H --> J["SUMIF计算历史用量"]
    I --> K["OFFSET获取订单数量"]
    
    D --> L[核心分配逻辑]
    L --> M["FILTER筛选匹配任务"]
    M --> N["IF重复任务号"]
    N --> O["TOCOL转换为一维数组"]
    O --> P["DROP跳过已分配部分"]
    P --> Q["TAKE取当前需求数量"]
    
    Q --> R[UNIQUE去重<br>实际未使用]
    R --> S[返回分配结果]
    
    S --> T[VSTACK堆叠结果]
    T --> U{是否遍历完成?}
    U -- 否 --> C
    U -- 是 --> V[DROP删除首行空值]
    V --> W[🎯 最终分配结果]

🧩 公式逐层解析

1. 外层框架:DROP(REDUCE(...), 1)

WPS

=DROP(

REDUCE("", B2:B7, LAMBDA(X, Y, ...)),

1

)

函数

作用

说明

REDUCE

迭代累加器

遍历B2:B7每个零件,累积结果

LAMBDA

自定义函数

定义每次迭代的处理逻辑

VSTACK

垂直堆叠

将每次结果堆叠起来

DROP

删除行

删除第一行空字符串占位符

2. LET函数变量定义

WPS

LET(

Y, Y, # 📍 当前处理的零件

G, G2:G4, # 🔢 任务数量数组 [3, 25, 20]

D, SUMIF(OFFSET(Y,-1,):B1, Y, C1), # 📊 历史累计分配量

T, OFFSET(Y,,1), # 🎯 当前订单需求数量

F, TAKE(DROP(TOCOL(FILTER(...)), D), T), # 🎪 核心分配逻辑

U, UNIQUE(F), # 🔄 去重(实际未使用)

F # 📤 返回分配结果

)

🔍 核心分配逻辑详解

3. 任务号展开机制

WPS

IF(G >= SEQUENCE(,SUM(G)), E2:E4, \)

示例转换过程:

步骤

说明

结果示例

原始任务

WK-001(3), WK-002(25), WK-003(20)

3个独立任务

数量展开

按数量重复任务号

WK-001×3, WK-002×25, WK-003×20

一维数组

转换为单列

48行的任务列表

展开结果矩阵:

text

列1 列2 列3 ... 列48

WK-001 WK-001 WK-001 ... 空

WK-002 WK-002 WK-002 ... WK-002

WK-003 WK-003 WK-003 ... WK-003

4. 零件筛选与分配

WPS

FILTER(展开数组, F2:F4=Y)

按零件筛选:

  • 零件C:筛选出WK-001和WK-002

  • 零件A:筛选出WK-003

5. 分配流程示例

📦 处理订单 PO-1 (C, 2)

步骤

计算

结果

历史累计D

SUMIF(空范围, "C", C列) = 0

0

任务池

所有C零件任务展开

[WK-001, WK-001, WK-001, WK-002×25,...]

跳过D行

DROP(任务池, 0)

不跳过

取T个

TAKE(..., 2)

[WK-001, WK-001]

📦 处理订单 PO-2 (C, 3)

步骤

计算

结果

历史累计D

前面C零件共2+0=2

2

跳过D行

从第3个开始

[WK-001, WK-002, WK-002,...]

取T个

取3个

[WK-001, WK-002, WK-002]

📊 完整分配过程

任务池初始化

text

C零件池: [WK-001, WK-001, WK-001, WK-002×25]

A零件池: [WK-003×20]

分配过程记录表

订单

零件

需求

累计D

分配结果

剩余池

PO-1

C

2

0

WK-001×2

C池: [WK-001, WK-002×25]

PO-2

C

3

2

WK-001, WK-002×2

C池: [WK-002×23]

PO-3

A

5

0

WK-003×5

A池: [WK-003×15]

PO-4

C

7

5

WK-002×7

C池: [WK-002×16]

PO-5

A

2

5

WK-003×2

A池: [WK-003×13]

PO-6

A

4

7

WK-003×4

A池: [WK-003×9]

🎯 最终输出结果

text

WK-001 ← PO-1分配

WK-001 ← PO-1分配

WK-001 ← PO-2分配

WK-002 ← PO-2分配

WK-002 ← PO-2分配

WK-003 ← PO-3分配

WK-003 ← PO-3分配

WK-003 ← PO-3分配

WK-003 ← PO-3分配

WK-003 ← PO-3分配

WK-002 ← PO-4分配

WK-002 ← PO-4分配

WK-002 ← PO-4分配

WK-002 ← PO-4分配

WK-002 ← PO-4分配

WK-002 ← PO-4分配

WK-002 ← PO-4分配

WK-003 ← PO-5分配

WK-003 ← PO-5分配

WK-003 ← PO-6分配

WK-003 ← PO-6分配

WK-003 ← PO-6分配

WK-003 ← PO-6分配

公式优化建议

  1. 性能优化:在大数据量时,每次迭代重新生成任务池效率较低

  1. 错误处理:添加IFERROR处理任务不足的情况

  1. 去重优化UNIQUE(F)变量未使用,可移除

  1. 范围引用:使用结构化引用提高可读性

💡 应用场景

此公式适用于:

  • 🏭 生产任务分配系统

  • 📦 库存先进先出(FIFO)管理

  • 🚚 物流配送路线分配

  • 📊 资源调度与优化

这是一个典型的按需分配、先到先得的动态分配系统,巧妙运用了WPS 365的新函数功能。

广东省
浏览 410
1
3
分享
3 +1
1
1 +1
全部评论 1
 
恰同学少年
点赞学习
· 黑龙江省
回复