无事实事实表是什么
无事实事实表只记录维度键的组合,用来描述「发生过的关系」:哪个促销覆盖了哪些商品、哪个用户订阅了哪些服务、谁报名了哪场活动。它通常不存业务度量,或只存一个常量 1、一个权重、一个计数,真正的指标由 count 现场算出来。它的价值在于让关系本身成为可被多维分析的对象,而不是只能查配置表。
基本信息
| 内容 | 若干个维度键;可选一个常量或权重列 |
|---|---|
| 典型度量 | 常量 1,或用 count 现算覆盖数、参与人数 |
| 例子 | 促销 × 商品覆盖表、用户订阅关系表、活动报名表 |
| 用途 | 覆盖分析、关系计数、参与度分析 |
| 粒度 | 必须显式声明,如一个促销一个商品一天一行 |
典型使用场景
- 促销覆盖分析:某场活动覆盖了哪些商品、多少个 SKU
- 订阅关系:谁订阅了哪些服务,按服务维度统计订阅人数
- 活动报名:报名名单与活动、渠道、时间维度组合
- 权限与授权:角色与资源的授权关系,分析权限覆盖范围
- 课程与学员:选课关系表,统计课程报名与学员分布
- 名单类业务:白名单、推送名单,按渠道与人群维度统计规模
覆盖分析
覆盖分析
-- 每个促销覆盖多少个商品
SELECT p.promo_id, count(1) AS sku_cnt
FROM fact_promo_sku p
WHERE p.dt = '2026-10-11'
GROUP BY p.promo_id;
-- 交叉覆盖:同时参加两场促销的商品
SELECT a.promo_id, b.promo_id, count(1) AS overlap_cnt
FROM fact_promo_sku a
JOIN fact_promo_sku b
ON a.sku_id = b.sku_id AND a.promo_id < b.promo_id
GROUP BY a.promo_id, b.promo_id;度量列怎么设计
| 做法 | 适用 | 注意 |
|---|---|---|
| 不设度量列 | 关系本身即事实 | 查询要 count,性能敏感时加预聚合 |
| 常量列恒为 1 | 便于求和与 join 简化 | 必须约束不可为 NULL |
| 权重列 | 一条关系代表多个单位 | 权重含义要写进文档,否则被误当计数 |
| 计数列 | 源端只给汇总数 | 与明细并存时口径要对齐 |
无事实事实表与配置表的区别在于粒度与可分析性:它挂在日期、渠道、人群等维度上,能按时间切片看关系变化;配置表往往只有当前状态,无法回答「上周覆盖了多少」。粒度声明缺失时,覆盖数会因重复行而被高估。