头级金额怎么落到行
订单级优惠、运费、税费这些只发生在订单头部的金额,需要按规则分摊到行,才能做商品级毛利与优惠分析。常见方法有按行金额比例和按数量比例两种,都需要处理小数尾差,通常把差额并入排序首行或金额最大的行,保证分摊后行金额合计严格等于头级金额。分摊方法属于口径的一部分,要写入口径库并版本化,换方法等同于口径变更。
基本信息
| 分摊方法 | 按金额比例(默认)或数量比例 |
|---|---|
| 尾差处理 | 并入排序首行或金额最大行 |
| 校验规则 | 行分摊合计必须等于头级金额 |
| 变更管理 | 方法调整需作为口径变更发布 |
| 例外约定 | 退货行、赠品行的处理需单独定义 |
典型使用场景
- 商品级毛利分析:优惠分摊到行后才能算准单品行毛利
- 优惠效果评估:识别哪些商品吃掉了优惠预算
- 跨渠道对比:统一各渠道运费与优惠的分摊规则
- 退货核销:部分退货时确定应退的优惠金额
- 财务对账:分摊后行金额合计与原单头金额核对
按金额比例分摊
按金额比例分摊
-- 按行金额比例分摊订单优惠,窗口函数一次算清
SELECT i.order_id,
i.line_no,
i.line_amt,
i.line_amt * o.discount_amt
/ sum(i.line_amt) OVER (PARTITION BY i.order_id) AS alloc_discount
FROM fact_order_item i
JOIN fact_order o ON o.order_id = i.order_id;
-- 尾差处理:按行金额降序,差额并入首行
-- 校验:sum(alloc_discount) 应等于 o.discount_amt方法对照
| 方法 | 适用场景 | 偏差来源 |
|---|---|---|
| 按金额比例 | 优惠与金额相关,如满减 | 低价商品分摊偏低 |
| 按数量比例 | 优惠按件数发放 | 高单价商品分摊偏低 |
| 平均分摊 | 行数少且差异小 | 行金额差距大时明显失真 |
| 尾差并入首行 | 固定工程实现 | 排序首行金额被轻微抬高 |
尾差处理要在最后一层做,并且保证幂等:同一批数据重复计算得到相同结果,否则每次重跑行金额都可能微调,下游对账无从谈起。
退货行是否参与分摊要先约定:参与则退款金额涉及优惠回冲计算,不参与则行合计与整单优惠对不上,两种选择都要在口径文档中写明。