4.1 KiB
4.1 KiB
业务知识库总结
整体业务理解
公司业务模式
这是一个在线教育产品,主要提供 L1/L2 级别的英语学习课程。
核心业务流程
- 用户获取:用户通过各个渠道下载 App 并注册
- 用户激活:用户创建角色,填写性别、生日等信息
- 用户转化:用户通过站内或站外渠道购课
- 用户学习:用户学习课程,完成课时
- 数据回收:收集用户学习行为数据,用于分析和优化
核心数据模型
1. 用户层
表:bi_vala_app_account
- 记录用户注册信息
- 关键字段:id, created_at, download_channel, key_from, status
- 筛选条件:status=1, deleted_at IS NULL, 排除测试用户ID
2. 用户详情层
表:account_detail_info
- 记录用户的详细信息
- 关键字段:account_id, login_address, phone_login_times
- login_address 格式:"省份-城市"
3. 角色层
表:bi_vala_app_character
- 一个用户可以有多个角色
- 关键字段:id, account_id, gender, birthday, purchase_season_package, created_at
- 性别映射:0=girl, 1=boy, 其他=unknow
- 赛季包状态:'[1]'=未购买,其他=已购买
4. 订单层
表:bi_vala_order
- 记录用户购课订单
- 关键字段:account_id, sale_channel, key_from, pay_success_date, pay_amount, pay_amount_int, order_status, goods_name
- 有效订单筛选:order_status=3 AND pay_amount_int>49800
- 购课渠道:17个渠道映射
5. 课程层
表:bi_level_unit_lesson
- 课程体系映射表
- 课程层级结构:course_level (L1/L2) → course_season (S0-S4) → course_unit (U00-U48) → course_lesson (L1-L5)
- chapter_id 映射到完整的课程ID
6. 学习行为层
表:bi_user_chapter_play_record_0~7(8个分表)
- 记录用户的课程播放记录
- 关键字段:user_id, chapter_id, chapter_unique_id, play_status, updated_at, created_at
- play_status=1 表示播放完成
- 需要用 UNION ALL 合并8个分表
表:bi_user_component_play_record_0~7(8个分表)
- 记录用户的组件播放记录(更细粒度)
- 关键字段:chapter_unique_id, interval_time(毫秒)
- 用于计算完课耗时
核心业务指标
1. 用户指标
- 新增注册用户数:按日期、渠道统计
- 用户画像:性别、年龄、地域分布
2. 转化指标
- 转化率:注册 → 购课的转化
- 购课标签:未购课、站外购课、站内购课
- 退费率:订单退费情况
3. 收入指标
- GMV:成交总额,按渠道、日期统计
- 购课金额:客单价分析
4. 学习行为指标
- 课程进入完成率:进入课程 → 完成课程的转化
- 平均通关时长:课程完课平均时间
- 学习进度:用户完课的课程数量和顺序
- 完课间隔:距离上次完课的时间
常用分析模式
1. 用户全链路分析
将用户、角色、订单、课程完课数据关联,形成宽表,用于综合分析。
2. 渠道分析
按 download_channel 或 sale_channel 分组,分析不同渠道的用户质量和转化效果。
3. 课程分析
分析不同课程的完课率、完课时长,识别热门课程和难点课程。
4. 时间序列分析
按日期分组,分析用户增长、收入、学习行为的趋势变化。
常见筛选条件
测试用户排除
id not in (51, 2121, 1386, 1397, ...)
有效订单
order_status = 3
AND pay_amount_int > 49800
有效用户
status = 1
AND deleted_at IS NULL
完课记录
play_status = 1
数据处理技巧
1. 分表合并
使用 UNION ALL 合并8个分表:
select * from bi_user_chapter_play_record_0
union all
select * from bi_user_chapter_play_record_1
-- ... 其他6个表
2. 渠道映射
使用 CASE WHEN 将数字编码映射为渠道名称。
3. 时间处理
- 使用
date()或to_char()提取日期 - 使用
interval_time/1000/60将毫秒转为分钟
4. 去重逻辑
使用 rank() over (partition by ... order by ...) 取第一条记录。