- 输入数据
- 提货明细(经销商、商品、日期、数量、单据状态)、台返政策(商品、政策月份、单台补贴、最低提货量)
- 核心方法
- 按经销商+商品+月份汇总台数,达门槛后按台数×单台补贴计算
- 输出物
- 台返明细清单(实际提货量、门槛、单台补贴、返利金额)
台返是按台数给的补贴:这款商品这个月提够了量,每台补多少钱。难点不在算乘法,而在口径——作废的单算不算、跨月能不能累计、特价单要不要计入、当月没政策的商品怎么处理。这个模型把这些规则写死在工作流里,每月跑一次即可。
适用场景
- 月度返利核算:每月初把上月提货明细跑一遍,得到各经销商各商品的应返金额。
- 政策效果复盘:看哪些商品的门槛设得过高,长期没人达标。
- 预算控制:按月统计台返支出,判断政策是否超出预算。
输入数据要求
两张表:提货明细和台返政策。
| 字段 | 是否必需 | 类型 | 说明 |
|---|---|---|---|
| 单据号 | 必需 | 文本 | 提货单唯一标识 |
| 提货日期 | 必需 | 日期 | 格式 yyyy-MM-dd,取前七位作为统计月份 |
| 经销商编码 | 必需 | 文本 | 汇总维度之一 |
| 商品编码 | 必需 | 文本 | 汇总维度之一,同时用于匹配政策 |
| 数量 | 必需 | 整数 | 台数;必须是整数,否则分组汇总会报类型错误 |
| 单据状态 | 可选 | 文本 | 值为「已作废」的单据会被排除 |
| 经销商名称、商品名称、金额、是否特价 | 可选 | 文本 / 数值 | 不参与判断,只带到结果里 |
台返政策表:
| 字段 | 说明 |
|---|---|
| 商品编码 | 与提货明细对应 |
| 政策月份 | 格式 yyyy-MM;当月没有政策的商品不返 |
| 单台补贴 | 每台补贴金额 |
| 最低提货量 | 当月达到这个台数才返 |
计算方法
| 步骤 | 规则 |
|---|---|
| 有效单据 | 排除「已作废」的提货单 |
| 汇总口径 | 按「经销商 + 商品 + 月份」汇总台数,跨月不累计 |
| 门槛判定 | 汇总台数 ≥ 当月最低提货量才返,差一台也不返 |
| 返利金额 | 实际提货量 × 单台补贴,按台数全额计算,不是只算超出部分 |
| 政策缺失 | 该商品当月没有政策的,不返 |
特价单照常计入台数。台返按台数补贴,与成交价无关,所以特价单也算。如果你们的政策规定特价不享受台返,在第 2 步加一个条件排除即可。
工作流步骤
节点按 KNIME 英文名给出,iModel 中文界面的节点名以你所用的版本为准。示例数据已放在工作流内,导入后直接执行即可。
- 读取提货明细CSV Reader
- 剔除作废单据Row Filter
- 取统计月份String Manipulation
- 按经销商+商品+月份汇总台数GroupBy
- 关联当月政策Joiner
- 达到最低提货量Rule-based Row Filter
- 计算返利金额Math Formula
- 输出台返清单CSV Writer
- 读取两张表CSV Reader
分别读取
purchases_unit.csv与unit_policy.csv;「数量」保持整数类型,编码类字段设为文本。 - 剔除作废单据Rule-based Row Filter
规则:
NOT ($单据状态$ = "已作废") => TRUE - 取统计月份String Manipulation
新增列「统计月份」:
substr($提货日期$, 0, 7),得到 yyyy-MM。 - 汇总台数GroupBy
按「经销商编码、经销商名称、商品编码、商品名称、统计月份」分组,「数量」取 Sum,得到「Sum(数量)」。
- 关联当月政策Joiner
提货汇总与政策表内连接,左表按「商品编码 + 统计月份」,右表按「商品编码 + 政策月份」。当月无政策的商品在这一步自然被去掉;右表重复的列在连接设置里排除,结果表保持干净。
- 门槛判定Rule-based Row Filter
规则:
$Sum(数量)$ >= $最低提货量$ => TRUE - 计算返利金额Math Formula
roundHalfUp($Sum(数量)$ * $单台补贴$, 2) - 排序输出SorterCSV Writer
按返利金额从大到小排序,写出 result.csv。
参数
| 参数 | 默认值 | 作用 | 怎么调 |
|---|---|---|---|
| 统计月份取法 | 提货日期前 7 位 | 按自然月汇总 | 按财务月或季度汇总时,改第 3 步的取值方式 |
| 排除状态 | 已作废 | 第 2 步排除的状态值 | 按你们系统的实际状态值填写 |
| 台返政策表 | unit_policy.csv | 门槛与补贴标准 | 直接换成本期政策;新增商品补行即可,不用改工作流 |
用示例数据验证
运行后结果应与示例数据包里的 expected_result.csv 完全一致。数据中埋了正好等于门槛与差一台两种边界,都应被正确处理。
| 经销商 | 商品 | 月份 | 提货量 | 门槛 | 单台补贴 | 返利金额 |
|---|---|---|---|---|---|---|
| D002 | P104 按摩椅 M9 | 2026-05 | 7 | 5 | 600.00 | 4,200.00 |
| D004 | P101 颈椎按摩仪 K5 | 2026-05 | 35 | 30 | 120.00 | 4,200.00 |
| D001 | P101 颈椎按摩仪 K5 | 2026-04 | 30 | 30 | 120.00 | 3,600.00 |
| D002 | P103 眼部按摩仪 E2 | 2026-04 | 55 | 50 | 60.00 | 3,300.00 |
| D001 | P102 筋膜枪 G3 | 2026-06 | 31 | 20 | 80.00 | 2,480.00 |
| D003 | P105 足浴盆 F1 | 2026-05 | 45 | 40 | 40.00 | 1,800.00 |
另有五类不应出现在结果里的数据:差一台未达标的、四月未达标而五月达标的(跨月不累计)、作废后跌破门槛的、当月没有政策的商品、台数零星的背景单据。
适用边界
- 只按月汇总。政策若按季度或活动期核算,要改统计口径,不能直接用。
- 不处理退货。退货冲减台数需要在数据源先做净额处理,或在第 2 步增加退货单的扣减逻辑。
- 门槛只看台数。若政策同时要求金额门槛,需增加一个条件。
- 不校验政策重复。同一商品同一月份若有两条政策,关联会产生两行,需先清理政策表。
常见问题
返利是按全部台数算,还是只算超出门槛的部分?
本模型按全部台数算。若你们是阶梯式(超出部分另一个标准),需要在政策表增加档位区间,并把第 7 步改为梯度匹配。
一个经销商多个门店分别提货怎么办?
在第 4 步的分组列里加上门店字段即可,其余步骤不用改。
能和约定返利合并成一张表吗?
可以,两个模型的输出都是「经销商 + 期间 + 返利金额」,用表串联合并后再汇总。建议保留各自的明细,便于核对。
数据在 ERP 里,怎么接?
把第 1 步换成数据库读取节点,查询出上表字段即可。