首页/数据/数仓建模速查/示例:流量域会话事实建模
建模基础69 条

示例:流量域会话事实建模

流量域以会话(session)为粒度记录访问行为:来源渠道、设备、落地页维度,配合页面事件事实表支撑漏斗分析。

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

流量域事实建模要点

流量域通常拆成两张事实表:会话事实以一次访问为粒度,一行为一个 session,记录来源渠道、设备、落地页与停留时长;事件事实以页面或点击为粒度,一行为一次行为,用于漏斗与路径分析。两张表通过 session_id 关联,但不要合并成一张宽表,因为粒度差异会导致跳出率、人均访问页数等指标被重复计数。会话切分规则(常见是静默 30 分钟算新会话)属于口径,必须写进模型文档。

基本信息

会话事实粒度一行 = 一次访问会话(session_id)
事件事实粒度一行 = 一次页面浏览或点击事件
常用维度日期、渠道、设备、页面、地域
关联字段session_id 连接会话与事件
关键口径会话超时切分规则,需写入文档

典型使用场景

  • 渠道效果评估:按来源渠道汇总会话数与转化数,判断投放质量
  • 转化漏斗:以事件事实逐层统计曝光点击下单,观察每层流失
  • 跳出率统计:会话事实中单页会话占比即跳出率,粒度必须正确
  • 设备与地域分析:会话维度切片,定位体验问题集中的终端类型
  • 路径分析:按 session_id 串联事件顺序,还原典型访问路径

两张事实表结构

两张事实表结构
-- 会话事实:一次访问一行
-- fact_session(session_id, user_sk, channel_sk, device_sk,
--              landing_page_sk, start_time, duration, pv_cnt)
SELECT c.channel_name,               -- 渠道维度
       count(1) AS session_cnt,      -- 会话数
       avg(s.duration) AS avg_dur,   -- 平均停留时长(秒)
       sum(s.pv_cnt) * 1.0 / count(1) AS pv_per_session
FROM fact_session s
JOIN dim_channel c ON s.channel_sk = c.channel_sk
WHERE s.dt = '2026-10-12'
GROUP BY 1;

-- 事件事实:页面或点击级,用于漏斗与路径分析
-- fact_event(session_id, event_type, page_sk, event_time)

指标与粒度对照

指标应使用用错粒度的后果
会话数会话事实计数用事件计数,会话数被页面数替代
跳出率会话事实单页会话占比事件表计算得出数值偏大
页面浏览量事件事实按浏览事件过滤会话表 pv_cnt 无法按页面拆分
平均停留时长会话事实 duration 求平均事件时间差累加,口径不可比
会话切分规则不统一是流量域最容易出现的口径问题:一个系统按 30 分钟,另一个按 30 分钟跨天重置,两套数据放在同一张报表里根本无法比较。
埋点事件缺失页面编码时不要直接丢弃,先落未知成员键并纳入监控,否则漏斗上层数字会静默变小。

易错点

  • 会话切分规则不统一:两端数据不可比,渠道效果结论互相矛盾
  • 会话粒度与事件粒度混算:跳出率与人均访问页数同时失真
  • 会话与事件合并成一张宽表:pv_cnt 被重复展开,汇总金额与次数虚增
  • 埋点缺失直接丢弃:漏斗上层数字静默变小,定位时才发现丢失一批流量

数据来源与参考

  • 流量域建模实践
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌