首页/数据/数仓建模速查/案例:在线教育学习域建模
建模基础69 条

案例:在线教育学习域建模

教育域:课程维 + 班级维 + 报名事实 + 学习行为事实;完课率、续报率从行为与订单组合计算,教师与机构为角色维度。

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

在线教育学习域建模

教育域通常建两类事实:报名事实按订单行为粒度(一次报名一行),学习行为事实按事件粒度(一次看课、一次做题一行);维度包括课程维、班级维、教师与机构维,其中教师与机构是角色维度,同一个人可能既是授课老师又是班主任。完课率、续报率这类指标要在指标层把报名与行为两张表组合计算。

基本信息

事实表报名事实 + 学习行为事实
维度课程维 / 班级维 / 教师角色维 / 机构维
关键指标完课率、续报率、人均学习时长
粒度差异报名按订单行,行为按事件
角色维度同一主体在不同关系中扮演不同角色
分区行为事实按 dt 分区存储

典型使用场景

  • 完课率:按学员统计课程进度达到结课标准的比例
  • 续报分析:把本期报名与下期报名关联,计算续报率
  • 教师评估:按教师角色汇总其班级的完课率与满意度
  • 学习行为:分析学习时段分布与人均有效学习时长
  • 班级容量:按班级统计报名人数与满班率

学习行为事实

学习行为事实
CREATE TABLE fact_study_event (
  student_sk bigint,
  course_sk bigint,
  class_sk bigint,
  event_type string,          -- watch / exercise / exam 等行为类型
  progress_pct decimal(5,2),  -- 事件发生时的进度,保留事件快照而非覆盖
  event_ts timestamp
)
PARTITIONED BY (dt string)
STORED AS ORC;   -- 按天分区,便于按时间范围扫描

两套事实的分工

事实表粒度典型指标
报名事实一次报名一行报名量、续报率、收入
学习行为事实一次行为一行完课率、活跃度、时长
报名与学习是两个粒度(订单行与行为事件),分别建事实表后在指标层组合:塞进同一张表会让转化率类指标既算不准也无法追溯计算过程。
章节进度要用事件表达而不是覆盖累计值:覆盖式更新只能看到最新进度,学习时长与进度变化过程无法还原,完课判定也就无法复核。

易错点

  • 报名与学习事件塞进一张表,完课率与转化率都无法正确计算
  • 章节进度用累计值覆盖更新,学习过程与时长无法还原
  • 教师与班主任混为一个字段,同一人的不同职责无法分别统计
  • 续报按学员同一课程判断,未区分同一学员换课续报的情况,续报率失真

数据来源与参考

  • 教育数仓实践:学习行为模型
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌