周期快照事实表是什么
周期快照事实表按固定周期(通常每日或每月)对实体状态拍一张快照:每日账户余额、每日库存、每日会员等级分布。行数等于实体数乘周期数,密度可预期,即使当天没有任何业务发生也会留一行。正因如此,它能直接回答「某年某月某日那一刻是什么状态」这类问题,而不必从流水里反推。它的度量以半可加为主:可以跨账户、跨商品求和,但不能跨时间求和。
基本信息
| 周期 | 按日、按周或按月定时拍摄 |
|---|---|
| 粒度 | 一个实体在一个周期内一行 |
| 度量 | 余额、库存、人数、等级分布,多为半可加 |
| 密度 | 实体数 × 周期数,可预期且便于容量规划 |
| 稀疏处理 | 不建议省略零行,缺行会被误读为无该实体 |
典型使用场景
- 每日账户余额:金融场景的期初、期末与日均余额口径
- 每日库存快照:零售与仓储分析缺货率、周转天数
- 时段人数:每日活跃会员、在保人数、在职人数
- 月结快照:财务月末的应收、应付与存货余额留档
- 对比分析:任意两天的状态直接比较,不必回放流水
- 数据修复基准:明细丢失或重算后,用快照作为对账锚点
日余额快照
日余额快照
-- 拍摄当日快照:每个账户一行
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 | 时点存量,跨时间不可加 |
| 期初余额 | 取区间第一天或上一期末 | 与期末同属时点口径 |
| 日均余额 | 按账户求平均再汇总 | 可跨账户汇总,跨时间仍不可加 |
| 期间累计发生额 | 明细事实求和 | 属于可加度量,应走事务事实表 |
| 期末较期初变化 | 两期期末相减 | 净变化,不是流水发生额 |
周期快照与事务事实表常被混用:快照回答「那一刻有多少」,事务事实回答「这段时间发生了什么」。同一张报表要同时给存量和发生额,就得挂两张事实表,靠共用维度对齐,而不是在快照上求和。