首页/数据/数仓建模速查/维度属性空值处理策略
维度与事实设计149 条

维度属性空值处理策略

空值在维度中有三义:未知、不适用、未采集;至少要区分「未知」与其他占位,避免把 NULL 当业务值统计。

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

空值有三种含义

维度里的空值至少代表三种情况:未知(源端本来就没有)、不适用(业务上该属性不存在)、未采集(未来可以获得)。把三者混成同一个空值,分析时就无法区分「客户没填城市」与「该属性对这类客户不适用」,统计口径会越来越含糊。

基本信息

未知统一占位符,例如 UNKNOWN
不适用业务上不存在,例如个人客户的企业规模
未采集暂未获取,未来可能补齐
规整要求入维前统一空串与空值,禁止空格串冒充空值
配套占位符约定写入维度规范与数据字典

典型使用场景

  • 客户画像:区分未填与不适用,避免把缺失当特征使用
  • 报表展示:未知归为一类固定展示,避免出现空白行
  • 质量监控:统计未知占比,评估采集流程的有效性
  • 模型特征:区分空值类型后,缺失值处理策略才准确
  • 运营触达:未采集手机号进入补全流程,不适用则不必触达

三类空值的规整

三类空值的规整
-- 约定:未知用 UNKNOWN,不适用用 NA,禁止空串
SELECT customer_id,
       coalesce(nullif(trim(city), ''), 'UNKNOWN') AS city,
       CASE WHEN cust_type = 'personal' THEN 'NA'
            ELSE coalesce(scale, 'UNKNOWN') END AS scale
FROM stg_customer;

占位与下游处理

空值类型占位约定下游处理
未知UNKNOWN归为一类展示,可量化占比
不适用NA统计时通常剔除
未采集PENDING进入补全队列
原始空值入维前必须规整不允许直接进入维表
空串与空值混用是最常见的脏数据来源:两者在过滤时行为不同,聚合结果会莫名多出一块,入维前统一规整最省事。
占位符不要用业务可能出现的真实值:用「其他」当未知占位时,一旦源端真有「其他」类目就无法区分,建议用源端不会出现的字符串。
空值策略要与未知成员对齐:事实表无法确定具体成员时统一落到未知成员键,而不是留空的代理键,否则维度关联会直接丢行。

易错点

  • 空格串冒充空值:聚合结果莫名多出一块,排查困难
  • 未知与不适用混为一谈:分析结论失真,模型特征含义错
  • 占位符选用业务真实值:与真实取值冲突,无法区分
  • 空值不规整直接入维:关联与分组结果不稳定
  • 各表占位符不统一:跨表关联时空值行对不上

数据来源与参考

  • 数据仓库工具箱:维度属性规整
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌