首页/数据/数仓建模速查/月末快照的正确取数
维度与事实设计149 条

月末快照的正确取数

月末快照取每月最后一个自然日:先定位每月末日期集合,再关联当日快照;不要用月末批次的处理时间凑数。

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

月末快照怎么取

周期快照事实表按固定周期存一行,月末快照就是每月最后一个自然日的那一行。取数分两步:先定位每月末的日期集合,再关联当日快照行。最常见的错误是把「月末运行的任务批次」当成月末数据,处理日期与业务日期本就不是一回事,跨月补数会让两者错开一天甚至更多。会计月与自然月不一致时,月末的定义要改成财务日历维上的期末标记。

基本信息

定位方式每月最后一个自然日或财务日历期末标记
关联键业务日期 + 实体代理键
时区口径按业务日归属,不按服务器时间
补数影响补数会改写历史期末数,下游需同步重算

典型使用场景

  • 出具月度余额、库存、在保人数等期末指标
  • 与总账期末余额对账,定位差异出在快照还是账务
  • 同比环比分析前先取准期末数,否则月度曲线出现锯齿
  • 零售周历、保险考核月等财务日历与自然月不一致的行业改用期末标记
  • 补数后重算历史月末并复核,确认口径连续性未被破坏

月末取数

月末取数
-- 先定位每月最后一个自然日,再取当日快照行
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 列并由日历任务维护

取数方式对照

方式适用条件风险
最后自然日快照每日连续且无缺失某月缺最后一天会取到空值
日期维期末标记日期维覆盖完整且已维护标记未更新会整月漏取
月末任务批次仅当批次与业务日完全一致跨月补数时批次与业务日错开
快照表若按事件时间分区,月末取数必须用业务日期过滤,不能用分区里的处理日期,否则跨月补数会把上月数据算进本月。
会计月与自然月不一致时用财务日历维的期末标记定位,并保证期末数可追溯到对应账期,否则期末余额与总账会长期差一截。

易错点

  • 用 30 日代替月末,2 月与 31 天月份的数据直接缺失
  • 用月末批次的处理时间取数,跨月补数时点错位
  • 会计月与自然月混用,期末数与总账对不上
  • 缺失日期没有兜底,取到空值却当成真实零值上报

数据来源与参考

  • 数仓实践:周期快照取数
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌