维度表设计

维度表承载描述属性与层级:主键(代理键)、业务键、名称与分类层级、生效状态;宽而扁平、一行一实体,是 BI 切片筛选的主要入口。

维度表承载什么

维度表承载描述属性与层级关系:代理键(系统内自增或哈希生成)、业务键(源系统主键)、名称与分类层级、生效状态等。它是宽而扁平的,一行一个实体,是 BI 切片筛选的主要入口。维度表设计得好不好,直接决定下游能不能顺利「拖拽出报表」——常用层级与枚举映射预置在维度层,报表层就不用反复写 CASE WHEN。

基本信息

核心字段代理键、业务键、属性、层级、生效标志
编码处理枚举与状态码统一在维度层维护映射
层级组织例如商品-类目-一级类目冗余在同一行
更新策略按缓慢变化维策略决定历史保留方式

典型使用场景

  • 用户与会员维度:等级、城市、注册渠道等切片属性
  • 商品维度:类目层级、品牌、规格,支持多级下钻
  • 组织与门店维度:上下级关系与所属区域
  • 枚举统一:把源系统状态码翻译成可读文本,避免下游各写一套
  • 代理键管理:为 Type 2 版本化预留稳定的代理键生成机制

用户维度表

用户维度表
CREATE TABLE dim_user (
  user_sk   BIGINT COMMENT '代理键,供事实表关联',   -- 版本化时每个版本一个代理键
  user_id   BIGINT COMMENT '业务键,来自源系统',     -- 同一实体的业务唯一标识
  user_name STRING,
  city      STRING,
  level     STRING COMMENT '会员等级',
  is_current BOOLEAN                                -- 是否当前有效版本
) STORED AS ORC;

维度表字段设计

字段类型作用设计要点
代理键事实表关联使用稳定且不与源系统耦合,支持版本化
业务键标识真实实体源系统可能变更或复用,不宜直接当关联键
属性字段切片与筛选宽而扁平,常用分组预计算好
层级字段多级下钻冗余上级名称,避免报表层多层关联
生效标志区分历史版本与生效区间配合,避免查询命中多行
维度表尽量预计算好常用层级与分组,避免每次查询都在报表层重复写 CASE WHEN 映射,这类重复逻辑是口径不一致的主要来源。
维度表混入度量字段(数量、金额)会打破事实与维度的边界,导致同一个指标在维度表和事实表里算出两个数。

易错点

  • 维度属性直接暴露源系统编码(如 status=1/2/3),每个下游各自翻译,口径不一
  • 维度表混入度量字段,事实与维度的边界被打破
  • 用业务键直接做事实表的关联键,源系统改了键值后历史关联全部断裂
  • 层级只存本级编码不存上级,多级下钻时被迫多次关联,SQL 复杂且容易写错

数据来源与参考

  • Kimball《The Data Warehouse Toolkit》维度表设计
  • 阿里《大数据之路:阿里巴巴大数据实践》公共维度层(DIM)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌