结论是:先把两个报表统一到同一个“业务日”定义,再决定以哪一侧的日期边界为准,而不是直接把两边的日期字段相减。若两边都无法调整导出时区,就保留原始时间戳,在分析层做一次时区换算,并明确记录换算规则。这样做的结果是,后续按天汇总时不会出现某一天数据被重复计入或整体平移的假象。
网站用户行为分析里,时区差异通常来自两类报表:一类按服务器或数据库时区切分日期,另一类按访客本地时区或某个固定时区切分。两者都叫“日期”,但边界不同。
判断依据不是看报表标题,而是看三个证据:时间字段是否带时区偏移、导出时是否做过转换、日期边界是按零点还是按业务截止点。只要其中一项缺失,就不能假设两边已经对齐。
假设某报表A按UTC+0切日,报表B按UTC+8切日。同一批访问在A里可能落在3月1日,在B里落在3月2日。若直接把两天的汇总数放在一起比较,差异会被误判为流量波动,实际只是边界错位。
第一种是“以一侧为准”。适用于一侧是权威业务口径,另一侧只是辅助观察。做法是把另一侧的时间戳统一换算到权威时区,再重新切日。成立条件是:权威侧的时间字段完整且可追溯,换算不会丢失原始记录。
第二种是“以固定分析时区为准”。适用于两边都只是数据源,真正需要的是内部统一口径。做法是选定一个分析时区,把两侧都换算过去,再按同一规则切日。成立条件是:所有报表都能拿到精确到分钟或秒的时间戳,而不是只有已聚合的日期。
如果只有聚合后的日期、没有原始时间戳,第二种方式通常不成立。此时只能改导出配置,或接受无法精确对齐的事实,不能靠估算补齐。
如果其中一侧的“日期”不是自然日,而是按业务截止点切分,比如每天凌晨4点作为前一天的结束,那么单纯做时区换算仍然对不上。此时需要先还原业务日规则,再换算时区,否则会出现“换算后仍然差一天”的情况。
另一个反例是夏令时。若两个时区都涉及夏令时切换,某些日期的小时数不是24小时。直接把日期加减固定小时数,会在切换日产生一小时偏移,导致边界附近的记录归属错误。遇到这种情况,必须用带时区信息的换算函数,而不是手工加减。
验收动作是:对齐后,随机抽一个边界小时,核对两侧的会话数或事件数是否落在同一天。如果仍然错位,下一步不是继续调报表,而是回到导出配置,检查日期字段是否在导出时已被截断为日期字符串。截断后无法还原时区,只能重新导出。
对齐完成后,再去做趋势比较或异常判断。否则,任何按天的差异都可能只是时区边界造成的假信号,而不是真实的用户行为变化。