失效成员如何呈现
维度成员失效(软删除、合并、归档)之后,报表要不要看到它,取决于视图口径,而不是数据本身。通行做法是同时提供两个视图:历史口径视图保留失效成员,保证历史事实仍能 join 到名称;当前口径视图过滤掉失效成员,用于下拉列表、增量抽取与状态核对。
基本信息
| 历史视图 | 包含 is_deleted = 1 的成员 |
|---|---|
| 当前视图 | is_current = 1 且 is_deleted = 0 |
| 关键字段 | is_deleted / deleted_at / merged_to_sk |
| 合并场景 | 失效成员指向合并后的新成员 |
| 对外原则 | 只暴露声明了口径的视图 |
| 权限 | 历史视图通常限制自助报表直接使用 |
典型使用场景
- 历史报表复现:去年报表里的门店已闭店,但名称仍要显示
- 下拉列表:新增订单时不允许选择已失效的客户或门店
- 合并追溯:被合并的旧客户主体能指向新主体继续统计
- 增量同步:只推当前有效成员,减少下游无谓更新
- 口径核对:对账时确认失效成员数量与业务下线清单一致
双视图定义与合并追溯
双视图定义与合并追溯
CREATE VIEW v_dim_customer_hist AS
SELECT * FROM dim_customer; -- 历史口径:含失效成员
CREATE VIEW v_dim_customer_cur AS
SELECT * FROM dim_customer
WHERE is_current = 1 AND (is_deleted = 0 OR is_deleted IS NULL); -- 当前口径
SELECT f.customer_sk,
COALESCE(c.customer_name, m.customer_name) AS customer_name -- 失效被合并的成员回指到新成员
FROM fact_order f
LEFT JOIN v_dim_customer_hist c ON f.customer_sk = c.customer_sk
LEFT JOIN dim_customer m ON c.merged_to_sk = m.customer_sk;两种视图的用途对照
| 视图 | 成员范围 | 典型用途 |
|---|---|---|
| 历史口径 | 全部成员含失效 | 历史报表、审计追溯 |
| 当前口径 | 仅当前有效成员 | 下拉选择、增量同步、白名单校验 |
报表引用当前口径视图时,历史期间出现过的失效成员不显示,这是口径定义下的预期行为而非数据缺失;如果业务希望看到,应改用历史口径视图,而不是把失效成员重新置为有效。
软删除与「合并」要区分:软删除只是停用,合并意味着新成员承接了旧成员的业务,后者必须保留 merged_to_sk 才能把历史事实归并到新主体。