按当时:订单归属成交时的区域
按当前:历史订单归属今天的区域
有效期:valid_from / valid_to
代理键:区分同一业务对象的多个版本
验收:边界日期、迟到数据和回填
一个常见错误:组织调整后,历史业绩也变了
区域、门店负责人、客户等级和商品分类都会变化。若维度表只保存当前值,去年订单在今天查询时会被归到新区域,导致历史报表与当时发布版本不一致。
业务可能同时需要两种答案:按当时组织复盘责任,按当前组织重新看客户资产。模型必须明确支持哪一种,不能让 AI 临时猜测 Join 条件。
SCD Type 1 和 Type 2 解决不同问题
Type 1 直接覆盖旧值,适合纠错或不需要历史的属性;Type 2 为每次变化增加新版本,通过代理键和有效期保留历史。两者可以在同一维度中按属性组合,但规则必须写清。
事实表最好在写入时关联正确维度版本;迟到事实和回填则需要根据业务时间重新匹配。处理不当会产生有效期重叠或找不到版本。
让语义层知道时间语义
模型描述应告诉 AI 哪个日期决定维度版本、默认采用当时还是当前视角、跨版本如何汇总。还要标记没有匹配、有效期冲突和未知成员。
BuildTable 可作为整理关系、字段与语义的建模候选;复杂 SCD、CDC 和历史回填的具体支持边界必须在真实数据上验证。
用边界日期做回归测试
准备变化前一天、变化当天、变化后一天,以及迟到和撤销变更样本。检查行数、金额、版本键和两种分析视角是否符合预期。
把组织重组、商品改类和客户升级作为固定测试集,每次模型发布后重跑。历史维度的可靠性来自明确规则与回归测试,不是表名中出现 history。
