在线教育学习域建模
教育域通常建两类事实:报名事实按订单行为粒度(一次报名一行),学习行为事实按事件粒度(一次看课、一次做题一行);维度包括课程维、班级维、教师与机构维,其中教师与机构是角色维度,同一个人可能既是授课老师又是班主任。完课率、续报率这类指标要在指标层把报名与行为两张表组合计算。
基本信息
| 事实表 | 报名事实 + 学习行为事实 |
|---|---|
| 维度 | 课程维 / 班级维 / 教师角色维 / 机构维 |
| 关键指标 | 完课率、续报率、人均学习时长 |
| 粒度差异 | 报名按订单行,行为按事件 |
| 角色维度 | 同一主体在不同关系中扮演不同角色 |
| 分区 | 行为事实按 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; -- 按天分区,便于按时间范围扫描两套事实的分工
| 事实表 | 粒度 | 典型指标 |
|---|---|---|
| 报名事实 | 一次报名一行 | 报名量、续报率、收入 |
| 学习行为事实 | 一次行为一行 | 完课率、活跃度、时长 |
报名与学习是两个粒度(订单行与行为事件),分别建事实表后在指标层组合:塞进同一张表会让转化率类指标既算不准也无法追溯计算过程。
章节进度要用事件表达而不是覆盖累计值:覆盖式更新只能看到最新进度,学习时长与进度变化过程无法还原,完课判定也就无法复核。