多时区门店的日期归属
全球门店的「营业日」应按门店当地时区判定,而不是总部时区。事实表的日期键要按门店时区折算,否则跨时区汇总时东区或西区的销售会被归到相邻的一天,日粒度报表整体错位,日环比、补货节奏都会跟着出问题。
基本信息
| 业务日基准 | 门店当地日历,而非总部时间 |
|---|---|
| 时区来源 | 门店维里的 tz 属性,集中维护 |
| 派生方式 | 事实时间戳按门店时区折算日期键 |
| 库存类注意 | 库存快照按当地营业结束时刻截取 |
| 校验方法 | 跨时区日界前后各抽查一批订单 |
| 报表要求 | 明确标注按当地日还是总部日汇总 |
典型使用场景
- 全球日报:各门店按当地营业日出现当日销售
- 促销同步:活动在各自时区的当地零点开始生效
- 库存核对:盘点与库存快照按当地营业结束时刻截取
- 考勤排班:门店员工排班以当地时间为准
- 跨区对比:用同一业务日口径比较不同时区门店的表现
按门店时区折算业务日
按门店时区折算业务日
SELECT s.store_id,
s.tz,
to_date(from_utc_timestamp(s.sold_at, s.tz)) AS biz_date, -- 业务日按门店时区折算
sum(s.amt) AS amt
FROM stg_sales s
GROUP BY s.store_id, s.tz, to_date(from_utc_timestamp(s.sold_at, s.tz)); -- 门店时区从维表取,不在各任务里硬编码折算口径与影响
| 折算基准 | 表现 | 典型问题 |
|---|---|---|
| 门店当地时区 | 各店按当地日归集 | 跨区汇总需说明业务日定义 |
| 总部时区 | 全部门店同一日界 | 东区晚班销售被归到前一天 |
| UTC | 统一但与营业日不符 | 欧美门店营业日跨两个 UTC 日 |
门店维里保存时区属性(tz),日期折算统一引用维度值;把时区写死在 ETL 代码里,一旦新开一个时区的门店就要改代码,且历史分区无法复现。
夏令时切换日当地会出现 23 小时或 25 小时,按固定小时数分层聚合的任务会漏算或多算;切换日的门店日报需要单独核对,不能只做常规自动化校验。