首页/数据/数仓建模速查/头行金额分摊方法
维度与事实设计149 条

头行金额分摊方法

头级优惠/运费分摊到行:按金额比例(默认)或数量比例,尾差并入排序首行;分摊后行金额合计必须等于头级金额。

数仓建模速查数据更新于 2026-10-13

头级金额怎么落到行

订单级优惠、运费、税费这些只发生在订单头部的金额,需要按规则分摊到行,才能做商品级毛利与优惠分析。常见方法有按行金额比例和按数量比例两种,都需要处理小数尾差,通常把差额并入排序首行或金额最大的行,保证分摊后行金额合计严格等于头级金额。分摊方法属于口径的一部分,要写入口径库并版本化,换方法等同于口径变更。

基本信息

分摊方法按金额比例(默认)或数量比例
尾差处理并入排序首行或金额最大行
校验规则行分摊合计必须等于头级金额
变更管理方法调整需作为口径变更发布
例外约定退货行、赠品行的处理需单独定义

典型使用场景

  • 商品级毛利分析:优惠分摊到行后才能算准单品行毛利
  • 优惠效果评估:识别哪些商品吃掉了优惠预算
  • 跨渠道对比:统一各渠道运费与优惠的分摊规则
  • 退货核销:部分退货时确定应退的优惠金额
  • 财务对账:分摊后行金额合计与原单头金额核对

按金额比例分摊

按金额比例分摊
-- 按行金额比例分摊订单优惠,窗口函数一次算清
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

方法对照

方法适用场景偏差来源
按金额比例优惠与金额相关,如满减低价商品分摊偏低
按数量比例优惠按件数发放高单价商品分摊偏低
平均分摊行数少且差异小行金额差距大时明显失真
尾差并入首行固定工程实现排序首行金额被轻微抬高
尾差处理要在最后一层做,并且保证幂等:同一批数据重复计算得到相同结果,否则每次重跑行金额都可能微调,下游对账无从谈起。
退货行是否参与分摊要先约定:参与则退款金额涉及优惠回冲计算,不参与则行合计与整单优惠对不上,两种选择都要在口径文档中写明。

易错点

  • 分摊存在小数尾差,行金额合计与头级金额不一致
  • 退货行不参与分摊,退款金额与原单对不上
  • 分摊方法变更未按口径变更发布,商品毛利曲线莫名跳变
  • 头级金额在明细里被重复累加,订单总额放大数倍

数据来源与参考

  • 交易数仓实践:头行分摊
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌