首页/数据/数仓建模速查/分摊权重与分配事实表
维度与事实设计149 条

分摊权重与分配事实表

把总账金额按权重分摊到明细(如运费按订单金额比例),分摊系数保留在事实表中便于重算与审计追查。

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

分摊权重与分配事实表

分摊权重与分配事实表用于把一笔总额按规则摊到明细上:整单运费按商品金额比例摊到每个商品行、整单优惠按件数摊、集团费用按人数摊。做法是在分配事实表里同时存基数、分摊系数与原值,分摊额等于基数乘系数。保留系数而不是只存结果,是为了口径变化后能重算,也便于审计追查每一分钱的来源。

基本信息

场景运费、优惠、包装费、平台佣金、公共费用分摊
要存三列基数、分摊系数、分摊后金额
系数形态比例值或分子分母,便于重算
审计要求原始总额与被分摊结果同时保留
勾稽要求分摊结果汇总必须与原始总额对齐

典型使用场景

  • 整单运费分摊到商品行:做单品毛利分析时必须把运费摊下去
  • 优惠券分摊:整单立减按金额比例分到各商品,避免单品毛利虚高
  • 平台佣金分摊:按成交额比例摊到各品类做渠道成本核算
  • 公共费用分摊:仓储、客服成本按订单量或体积分摊到业务线
  • 多级分摊:先按门店摊到人、再按人摊到订单,需要记录每一级系数
  • 口径变更重算:分摊规则调整后靠系数重跑,而不是从原始总账重来

分摊与勾稽

分摊与勾稽
-- 分摊额 = 基数 × 分摊系数
SELECT order_id,
       sum(base_amt * alloc_ratio) AS ship_fee
FROM   fact_ship_alloc
WHERE  dt = '2026-10-11'
GROUP  BY order_id;

-- 勾稽校验:分摊结果合计必须等于原始运费总额
SELECT 'alloc_total' AS chk, sum(base_amt * alloc_ratio) AS amt
FROM   fact_ship_alloc WHERE dt = '2026-10-11'
UNION ALL
SELECT 'source_total', sum(ship_fee)
FROM   ods_order_ship WHERE dt = '2026-10-11';

-- 系数自检:同一单内系数之和应为 1(舍入尾差单独挂到最大金额行)
SELECT order_id, sum(alloc_ratio) FROM fact_ship_alloc
WHERE dt = '2026-10-11' GROUP BY order_id HAVING abs(sum(alloc_ratio) - 1) > 0.0001;

分摊方法对照

方法依据适用与风险
按金额比例商品成交金额占比最常见;金额为零时系数退化
按件数商品件数占比件数差异大时高价单品被少摊
按体积或重量物流属性需要准确的物流属性,常缺数据
均摊行数等分简单但忽略规模差异,业务接受度低
固定系数业务直接指定可解释性好,但需人工维护且易过期
分摊总额必须能与原始总账勾稽:舍入尾差不要分散在各行,通常把差额调整到金额最大的一行,保证明细相加严格等于总额。分摊只看口径不看对与错,因此规则必须文档化,否则同一份数据换个人摊出不同结果。

易错点

  • 系数丢失只留分摊结果:口径调整后无法重算,只能回到总账从头摊一遍
  • 分摊总和与原始总账对不上且无勾稽作业:财务对账时才暴露,追溯成本极高
  • 舍入尾差分散处理:明细相加与总额差几分钱,反复对账永远差一点
  • 按金额比例分摊但存在零金额行:系数为零导致该行永远摊不到费用
  • 分摊规则不文档化:同一批数据两个人摊出两套结果,责任无法界定

数据来源与参考

  • 事实表设计实践:分摊
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌