月末快照怎么取
周期快照事实表按固定周期存一行,月末快照就是每月最后一个自然日的那一行。取数分两步:先定位每月末的日期集合,再关联当日快照行。最常见的错误是把「月末运行的任务批次」当成月末数据,处理日期与业务日期本就不是一回事,跨月补数会让两者错开一天甚至更多。会计月与自然月不一致时,月末的定义要改成财务日历维上的期末标记。
基本信息
| 定位方式 | 每月最后一个自然日或财务日历期末标记 |
|---|---|
| 关联键 | 业务日期 + 实体代理键 |
| 时区口径 | 按业务日归属,不按服务器时间 |
| 补数影响 | 补数会改写历史期末数,下游需同步重算 |
典型使用场景
- 出具月度余额、库存、在保人数等期末指标
- 与总账期末余额对账,定位差异出在快照还是账务
- 同比环比分析前先取准期末数,否则月度曲线出现锯齿
- 零售周历、保险考核月等财务日历与自然月不一致的行业改用期末标记
- 补数后重算历史月末并复核,确认口径连续性未被破坏
月末取数
月末取数
-- 先定位每月最后一个自然日,再取当日快照行
SELECT f.dt, f.entity_id, f.balance
FROM fact_balance_daily f
JOIN (
SELECT max(dt) AS month_end
FROM fact_balance_daily
GROUP BY substr(dt, 1, 7)
) m ON f.dt = m.month_end;
-- 日期维完整时更稳:用 is_month_end 标记取数
-- dim_date 应包含 is_month_end 列并由日历任务维护取数方式对照
| 方式 | 适用条件 | 风险 |
|---|---|---|
| 最后自然日 | 快照每日连续且无缺失 | 某月缺最后一天会取到空值 |
| 日期维期末标记 | 日期维覆盖完整且已维护 | 标记未更新会整月漏取 |
| 月末任务批次 | 仅当批次与业务日完全一致 | 跨月补数时批次与业务日错开 |
快照表若按事件时间分区,月末取数必须用业务日期过滤,不能用分区里的处理日期,否则跨月补数会把上月数据算进本月。
会计月与自然月不一致时用财务日历维的期末标记定位,并保证期末数可追溯到对应账期,否则期末余额与总账会长期差一截。