首页/数据/数仓建模速查/失效成员在报表中的呈现
维度与事实设计149 条

失效成员在报表中的呈现

含失效成员的维度视图要把失效行保留在「历史口径」中、过滤出「当前口径」外;避免不声明口径的全量视图直接对外。

数仓建模速查数据更新于 2026-10-13

失效成员如何呈现

维度成员失效(软删除、合并、归档)之后,报表要不要看到它,取决于视图口径,而不是数据本身。通行做法是同时提供两个视图:历史口径视图保留失效成员,保证历史事实仍能 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 才能把历史事实归并到新主体。

易错点

  • 不带口径说明的全量视图直接对外,使用者把失效成员当成有效成员
  • 当前视图过滤条件漏掉 is_deleted,已删除成员仍出现在选择列表里
  • 合并旧成员没有保留指向关系,历史事实无法归并到新主体,客户维度人数虚高
  • 为了防止「丢数据」关闭软删除改成物理删除,历史事实直接变成孤儿记录

数据来源与参考

  • 数仓实践:维度视图口径
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌