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

累积快照事实表

跟踪有终态流程(下单→支付→发货→签收)的生命周期:各里程碑时间戳同处一行,随流程推进原地更新,用于漏斗与时效分析。

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

累积快照事实表是什么

累积快照事实表用于跟踪有明确终态的流程,比如下单、支付、发货、签收。它的特点是流程里各个里程碑的时间戳都放在同一行,一行代表一个流程实例,随着流程推进不断原地更新。用途集中在漏斗转化率与环节耗时分析上,比如支付到发货平均间隔多少小时。它是少数允许更新的事实表形态,因此必须处理重复更新与并发写冲突。

基本信息

一行一个流程实例,如一个订单
更新方式里程碑推进时原地更新对应时间戳列
关键列各里程碑时间戳 + 当前所处阶段 + 各项金额
用途漏斗转化率、环节耗时、流程异常滞留
风险点重复更新与竞态导致时间戳被覆盖

典型使用场景

  • 订单履约时效:统计下单到支付、支付到发货的各段耗时
  • 漏斗转化:按阶段统计未完成数量,定位哪一环滞留最多
  • 异常订单监控:某阶段停留超过阈值时触发预警,如支付未发货超过两天
  • 服务工单跟踪:受理、处理、关闭三个节点的时间戳同行维护
  • 物流节点分析:揽收、转运、签收各节点耗时与超时率

耗时与漏斗查询

耗时与漏斗查询
-- 支付到发货的平均耗时(小时)
SELECT avg(timestampdiff(hour, pay_time, ship_time)) AS ship_hours
FROM fact_order_flow
WHERE dt = '2026-10-11'
  AND ship_time IS NOT NULL;    -- 未发货订单不参与耗时计算

-- 各阶段滞留数量:用于漏斗与异常监控
SELECT count(1)                                       AS total,
       sum(if(pay_time  IS NULL, 1, 0))               AS wait_pay,
       sum(if(pay_time IS NOT NULL AND ship_time IS NULL, 1, 0)) AS wait_ship
FROM fact_order_flow
WHERE dt = '2026-10-11';

使用与误用

指标类型是否适用说明
转化率与耗时适用里程碑同行,计算两两时间差最直接
事件计数不适用未完成实例尚未填齐里程碑,会被漏算
阶段分布适用按当前阶段列分组即可
历史回溯需谨慎原地更新后不保留中间态,需配合状态事实表
累积快照是少数允许更新的事实表,但要防重复更新:同一里程碑被多次回填时,必须以最早或最晚一次为准并写进文档,否则耗时会变成负数或异常小。
如果需要事件级的完整轨迹,累积快照并不能替代状态事实表:它只保留里程碑时间,中间过程被覆盖掉了。

易错点

  • 用累积快照统计事件计数:未完成实例里程碑未填齐,被系统性漏算
  • 里程碑回填顺序错乱:出现负数耗时,且难以判断以哪次回填为准
  • 重复更新未做幂等:同一节点被写入多次,耗时统计随机波动
  • 只保留里程碑而不记录当前阶段:漏斗分组每次都要重新推导条件

数据来源与参考

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