首页/数据/数据工程与 ETL 速查/桥接表处理多值维度

桥接表处理多值维度

当一条事实对应多个维度取值(一笔订单多张优惠券、一个客户多个标签)时,事实与维度是多对多关系;桥接表存两者中间关系并按需加权,避免事实行被复制放大。

问题一条事实对应多个维度成员
桥接表事实代理键 × 维度代理键 + 权重
权重用于按主次分配度量,避免重复计算
替代也有团队在维表存字符串数组简化查询

桥接表结构

桥接表结构
CREATE TABLE bridge_order_promo (
  order_sk BIGINT, promo_sk INT, weight DECIMAL(5,2)
);

-- 按权重分摊订单金额
SELECT p.promo_name, SUM(f.pay_amount * b.weight) AS allocated_amt
FROM fact_order f
JOIN bridge_order_promo b ON f.order_sk = b.order_sk
JOIN dim_promo p ON b.promo_sk = p.promo_sk
GROUP BY p.promo_name;
不设权重直接连接会把订单金额按优惠券数量重复计算;若只需命中哪些券,用无事实事实表更简单。

易错点

  • 桥接表不带权重导致金额被重复累加
  • 每个聚合场景各建一张桥接表,事实与维度关系口径不一致

数据来源与参考

  • Kimball《The Data Warehouse Toolkit》多值维度与桥接表
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌