首页/数据/数仓建模速查/示例:财务域账单事实建模
建模基础69 条

示例:财务域账单事实建模

账单过程关注账期、应收、实收与状态流转;金额度量区分应收/实收/退款,时间维度区分账期日与到账日。

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

账单事实建模要点

账单是财务域的核心业务过程,关注账期、应收、实收与状态流转。建模时金额要按口径拆列:应收金额、实收金额、退款金额分别成列,不能混在一个 amount 字段里靠状态区分。时间上账期日与到账日是两个不同概念,属于同一日期维度的角色扮演,必须分开存储,否则逾期分析会整体失真。账单事实还要与交易域建立勾稽关系,让金额闭合可被验证。

基本信息

粒度一行 = 一张账单(bill_no)
关键要素账期、状态、应收/实收/退款三套金额
时间角色账期日与到账日,同一日期维度两个外键
勾稽关系与交易域订单金额按账期与用户对齐校验
更新方式状态与实收金额随回款推进更新,属累积快照形态

典型使用场景

  • 应收管理:按账期与客户维度汇总应收余额,支撑催收优先级排序
  • 回款分析:实收金额按到账日统计,与财务流水按日核对
  • 逾期测算:账期日与到账日分开后,逾期天数与账龄可稳定计算
  • 业财勾稽:账单金额与交易域订单金额按用户与账期对齐,差异可定位
  • 退款核算:退款金额独立成列后,净收入与退款率不必再猜口径

账单事实表结构

账单事实表结构
-- 粒度:一行 = 一张账单
-- fact_bill(bill_no, period_key, due_date_key, paid_date_key,
--           due_amt, paid_amt, refund_amt, status, user_sk)
SELECT b.period_key,                        -- 账期维度键
       sum(b.due_amt)   AS due_total,       -- 应收合计
       sum(b.paid_amt)  AS paid_total,      -- 实收合计
       sum(b.due_amt) - sum(b.paid_amt) AS open_amt   -- 未收余额
FROM fact_bill b
WHERE b.period_key = '2026-09'
GROUP BY 1;
-- 逾期天数计算需用账期日而非到账日,两列必须分开存储

金额口径对照

字段含义常见误用
due_amt本期应收金额,含税口径与实收混列导致余额算错
paid_amt已到账金额,按到账日累计用账期日统计,跨期错位
refund_amt本期发生的退款金额冲减应收而非单独列示
open_amt应收减实收的未收余额与逾期金额混为一谈
账期与到账时间混用一个字段,是财务域最常见的建模问题:短期看不出异常,一旦做逾期与账龄分析,整体结论都会偏移。
账单事实与交易域事实不能按明细直接 join,应按用户与账期分别聚合后再对齐,否则多对多会把金额放大。

易错点

  • 账期与到账时间混用一个时间字段:逾期分析整体失真,且难以回溯修正
  • 多金额口径不登记:业务与财务各自解释,对账差异无法收敛
  • 账单与交易明细直接 join:金额被重复累计,差异越查越大
  • 状态原地覆盖不做历史:退款与冲销轨迹丢失,审计要求无法满足

数据来源与参考

  • 财务域建模实践
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌