# 业务知识库总结 ## 整体业务理解 ### 公司业务模式 这是一个在线教育产品,主要提供 L1/L2 级别的英语学习课程。 ### 核心业务流程 1. **用户获取**:用户通过各个渠道下载 App 并注册 2. **用户激活**:用户创建角色,填写性别、生日等信息 3. **用户转化**:用户通过站内或站外渠道购课 4. **用户学习**:用户学习课程,完成课时 5. **数据回收**:收集用户学习行为数据,用于分析和优化 --- ## 核心数据模型 ### 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. 时间序列分析 按日期分组,分析用户增长、收入、学习行为的趋势变化。 --- ## 常见筛选条件 ### 测试用户排除 ```sql id not in (51, 2121, 1386, 1397, ...) ``` ### 有效订单 ```sql order_status = 3 AND pay_amount_int > 49800 ``` ### 有效用户 ```sql status = 1 AND deleted_at IS NULL ``` ### 完课记录 ```sql play_status = 1 ``` --- ## 数据处理技巧 ### 1. 分表合并 使用 UNION ALL 合并8个分表: ```sql 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 ...)` 取第一条记录。