# v1.4.1 公共事实桥

这里放 25 条示范 ETL 共用的三条事实桥，作为归因口径的规范源。为让单条逻辑文档可独立阅读，当前核心 ETL 仍内嵌了等价实现，并由自动测试约束窗口、有效性和唯一性保持一致；生产落地时应先物化事实桥，再让下游直接引用，避免长期维护多份归因 SQL。

| 事实桥 | 输入 | 唯一性 | 用途 |
|---|---|---|---|
| `01_触达订单归因桥.sql` | 会员触达 + 已完成订单 | 每个订单最多命中一次最近有效触达 | 私域漏斗、高层驾驶舱、触达后关联销售 |
| `02_券实例核销订单桥.sql` | 券实例事件 + 已完成订单 | 每个订单最多命中一个实际核销券实例 | 核销订单 GMV、优惠成本 |
| `03_活动参与订单归因桥.sql` | 活动参与 + 已完成订单 | 每个订单最多命中一次最近有效活动参与 | 活动参与后归因 GMV |

共同约束：

1. 所有输入事实日期不得晚于同一个 `as_of_date`。
2. 归因只能发生在事件之后；默认滚动窗口为事件时间（含）至事件时间加 8×24 小时（不含），标记为 0–7 天，可由调度参数替换。
3. 使用 `ROW_NUMBER() OVER (PARTITION BY 订单ID ...) = 1` 强制订单级唯一性。
4. 下游一律按订单发生日期汇总，不能把未来七天订单塞回触达日或参与日。
5. 这些桥只证明“时间窗口内关联”，不证明增量。没有随机对照或合格准实验时，只能叫“关联 GMV / 归因 GMV”，不能叫“贡献销售 / 增量 ROI”。
6. 券实例只有在核销日期落在发放日至失效日内、且不晚于 `as_of_date` 时才是有效核销；异常多券同单时按优惠金额降序、券 ID 升序只保留一张券承接订单 GMV。

SQL 为 Spark 3.4 方言。文件中的 `DATE '2026-06-24'` 是本模拟快照的默认值，生产调度必须替换为同一批次的运行参数。
