首页/数据/数仓建模速查/周期快照事实表
维度与事实设计149 条

周期快照事实表

按固定周期(日/月)对状态拍摄快照,如每日账户余额、每日库存;行数等于实体数×周期数,适合时点状态型度量。

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

周期快照事实表是什么

周期快照事实表按固定周期(通常每日或每月)对实体状态拍一张快照:每日账户余额、每日库存、每日会员等级分布。行数等于实体数乘周期数,密度可预期,即使当天没有任何业务发生也会留一行。正因如此,它能直接回答「某年某月某日那一刻是什么状态」这类问题,而不必从流水里反推。它的度量以半可加为主:可以跨账户、跨商品求和,但不能跨时间求和。

基本信息

周期按日、按周或按月定时拍摄
粒度一个实体在一个周期内一行
度量余额、库存、人数、等级分布,多为半可加
密度实体数 × 周期数,可预期且便于容量规划
稀疏处理不建议省略零行,缺行会被误读为无该实体

典型使用场景

  • 每日账户余额:金融场景的期初、期末与日均余额口径
  • 每日库存快照:零售与仓储分析缺货率、周转天数
  • 时段人数:每日活跃会员、在保人数、在职人数
  • 月结快照:财务月末的应收、应付与存货余额留档
  • 对比分析:任意两天的状态直接比较,不必回放流水
  • 数据修复基准:明细丢失或重算后,用快照作为对账锚点

日余额快照

日余额快照
-- 拍摄当日快照:每个账户一行
INSERT INTO fact_account_balance_daily
SELECT current_date AS dt,
       a.account_id,
       a.balance,
       a.available_balance
FROM   ods_account a;      -- 每日跑一次,按 dt 分区存储

-- 取某个时点的余额:期末口径
SELECT account_id, balance
FROM   fact_account_balance_daily
WHERE  dt = '2026-10-11';

-- 区间日均余额:跨账户可加、跨时间不可加,只能按账户先平均再汇总
SELECT avg(balance) AS avg_balance
FROM   fact_account_balance_daily
WHERE  dt BETWEEN '2026-10-01' AND '2026-10-11';

三种口径读法

口径写法含义
期末余额取区间最后一天的 dt时点存量,跨时间不可加
期初余额取区间第一天或上一期末与期末同属时点口径
日均余额按账户求平均再汇总可跨账户汇总,跨时间仍不可加
期间累计发生额明细事实求和属于可加度量,应走事务事实表
期末较期初变化两期期末相减净变化,不是流水发生额
周期快照与事务事实表常被混用:快照回答「那一刻有多少」,事务事实回答「这段时间发生了什么」。同一张报表要同时给存量和发生额,就得挂两张事实表,靠共用维度对齐,而不是在快照上求和。

易错点

  • 对快照跨天求和:得到的是余额或库存的累加值,业务上毫无意义
  • 用快照算「当天新增」类口径:状态型表无法表达流水,结果语义错位
  • 为省空间省略无业务的零行:下游按行数统计实体数时少算,缺货率与覆盖率失真
  • 快照拍摄时间点不固定:有的批次跑在日切前、有的在日切后,期末值忽前忽后
  • 缺失补拍机制:某天调度失败后快照永久缺一天,期初期末口径随即错位

数据来源与参考

  • 数据仓库工具箱:事实表类型
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌