首页/数据/数仓建模速查/物流运单事实设计
维度与事实设计149 条

物流运单事实设计

运单主事实(一运单一行)+ 轨迹事件事实(多行):主事实存发运/签收时间与状态,轨迹表存每个节点;时效指标从两表联合计算。

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

主事实加轨迹两张表

物流域通常拆成两张事实表:运单主事实一运单一行,存发运、到达、签收等关键时间戳与当前状态;轨迹事件事实多行,存每一次扫描的节点类型、时间与操作方。时效指标从两张表联合计算,主事实供快速聚合,轨迹表供节点级排查。只建轨迹表会让时效计算每次都扫全量明细,只建主事实则在滞留排查时缺少依据。

基本信息

主事实一运单一行,关键里程碑与状态
轨迹事实每次扫描一行
维度网点、线路、承运商、区域
度量时效、成本、异常件数
逆向单拒收、退回、改址单独标记

典型使用场景

  • 计算发运到签收的时效,按线路、承运商、区域多维度考核
  • 排查滞留件:查看轨迹中最新的节点与停留时长
  • 结算承运商费用,按运单重量、体积与线路核对
  • 异常件管理:破损、丢失、超时未更新的运单清单
  • 逆向物流分析:退回原因与退回时效单独统计

运单主事实

运单主事实
-- 运单主事实:里程碑时间戳与当前状态
CREATE TABLE fact_shipment (
  waybill_no     string,
  sender_site_sk bigint,
  recv_site_sk   bigint,
  ship_ts        timestamp COMMENT '发运时间',
  sign_ts        timestamp COMMENT '签收时间',
  status         string,
  is_return      boolean   COMMENT '是否逆向单'
) PARTITIONED BY (dt string) STORED AS ORC;

-- 时效只在已签收样本上计算,未签收单独看滞留数
SELECT avg(timestampdiff(hour, ship_ts, sign_ts)) AS avg_hours
FROM fact_shipment
WHERE sign_ts IS NOT NULL AND dt = '2026-10-12';

字段读法

要素作用异常表现
ship_ts 与 sign_ts时效计算的两端任一端缺失该单无法计入
轨迹 scan_ts节点级时序轨迹缺失说明采集断链
网点键收发归属统计编码变更未做对照会导致断层
is_return区分逆向单不标记则正向时效被污染
时效考核按线路聚合比按网点更贴近实际:同一条线路的时效可比性高,网点维度会把不同线路混在一起,掩盖真实问题。
轨迹表数据量大,通常只在需要节点级排查时查询;日常时效看板从主事实表出数,避免每次都扫全量轨迹。

易错点

  • 轨迹表与运单表口径不同步,时效与节点数据互相矛盾
  • 拒收、退回单不纳入模型,逆向时效与成本统计缺失
  • 网点或线路编码变更未做新旧对照,历史路由分析断层
  • 时效计算混用不同样本,已签收与全量混在一起导致指标不可比

数据来源与参考

  • 物流数仓实践:运单建模
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌