首页/数据/数仓建模速查/账户余额日快照案例
维度与事实设计149 条

账户余额日快照案例

余额快照=账户 x 日一行,度量含期初、发生额、期末;跨账户可加、跨天不可加(半可加),查询任意日期余额直接取当日行。

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

账户余额日快照案例

账户余额日快照是周期快照事实表的典型实现:粒度是账户乘以日,度量按期初余额、当日发生额、期末余额三列存放,三者满足期末等于期初加发生额的勾稽关系。余额是半可加指标——跨账户可加,跨时间不可加。所以「某天总余额」要取当天各行求和,「本月平均余额」要按日先汇总再平均,绝不能把多天的期末余额相加。

基本信息

粒度账户乘以日,一天一账户一行
度量列期初余额、发生额、期末余额
可加性跨账户可加,跨时间不可加(半可加)
勾稽关系期末 = 期初 + 发生额
写入方式按日分区覆盖,重跑可复现

典型使用场景

  • 日终余额报表:任意日期直接取当日行,不用做累计计算
  • 资金流分析:按账户、机构、产品维度汇总当日余额与变动
  • 风控监控:识别余额异常波动、长期零余额与透支账户
  • 计息与对账:期初、发生、期末三列是利息计算的基础输入
  • 时点快照对比:期初与期末留存同一格式,便于跨期比对

建余额快照与勾稽校验

建余额快照与勾稽校验
CREATE TABLE fact_account_balance_daily (
  dt          string COMMENT '账务日期',
  account_sk  bigint COMMENT '账户代理键',
  open_bal    decimal(18,2) COMMENT '期初余额',
  change_amt  decimal(18,2) COMMENT '当日发生额净额',
  close_bal   decimal(18,2) COMMENT '期末余额'
) PARTITIONED BY (dt) STORED AS ORC;

-- 勾稽校验:不平衡即阻断当日加载
SELECT count(1) AS bad_cnt FROM fact_account_balance_daily
WHERE dt = '2026-10-12' AND close_bal <> open_bal + change_amt;

查询方式与可加性

查询正确做法错误做法
某日总余额取当天行求和把多天期末余额相加
本月平均余额先按日汇总再平均直接对全部行求平均
余额变动用期末减期初或取发生额列用期末余额相减跨多天
账户维度上卷按机构汇总当日行跨账户与跨日期一起求和
期初余额应等于上一日的期末余额,这条跨日一致性检查比单日勾稽更能发现问题:单日勾稽可能因为期初与发生额同步出错而「恰好」平掉,跨日比对则会把差异暴露在日期边界上。
没有当日交易的账户是否落行必须事先约定。落行才能保证账户数口径稳定,不落行则每日账户数忽多忽少;若选择不落行,则「当日有余额的账户数」这类指标必须用最近一次快照向前填充,不能直接计数。

易错点

  • 跨天把期末余额相加:金额翻倍,月度资金总量严重虚高
  • 勾稽不校验:差异逐日累积,年底对账时已无法定位从哪天开始不平
  • 无交易账户落行规则未约定:账户数指标日间跳动,被当成业务异常排查
  • 发生额与流水净额两套口径混用:含手续费与不含手续费的数字混在一列
  • 余额用浮点数存储:小数精度累积误差导致勾稽恒不成立

数据来源与参考

  • 数据仓库工具箱:周期快照事实表
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌