
1) 【一句话结论】采用星型模型构建数据仓库,以“学员行为事实表”为核心,关联“学员”“课程”“时间”维度表,定义核心业务指标(学员数、续费率、完课率)的计算逻辑,并设计分析视图(如仪表盘),实现业务指标的统一计算与可视化展示。
2) 【原理/概念讲解】数据仓库建模的核心是星型模型,由事实表(存储业务事件的量化数据,如学员注册、续费、完课行为)和维度表(描述事实的属性,如学员ID、课程ID、时间、地区)组成。事实表记录每个业务动作的细节(如行为类型、时间、业务线),维度表提供分类标签(如学员表记录学员的姓名、入学时间,课程表记录课程类型)。类比:事实表像“业务事件日志”,记录每个动作的原始数据;维度表像“属性字典”,给事件打上标签,方便按属性查询。例如,“学员注册”事件,事实表记录“学员ID=1001,行为类型=注册,时间=2023-01-01”;维度表“学员表”记录“学员ID=1001,姓名=张三,入学时间=2023-01-01”,这样能关联学员的属性信息,支持后续分析。
3) 【对比与适用场景】
| 指标名称 | 定义(严谨条件) | 计算逻辑 | 数据来源 |
|---|---|---|---|
| 学员数 | 注册并完成首次支付(支付状态=成功,金额>0)的学员去重总数 | 统计“注册”行为中满足支付条件的学员ID去重计数 | 学员行为事实表(注册行为) |
| 续费率 | 某周期内续费学员数与总注册学员数的比例 | 续费行为数(行为类型=续费)/ 注册行为数(行为类型=注册,支付成功) | 学员行为事实表(注册、续费行为) |
| 完课率 | 某周期内完成课程学习的学员数与报名该课程的学员数的比例 | 完课行为数(行为类型=完课)/ 报名行为数(注册行为且关联完课行为) | 学员行为事实表(注册、完课行为) |
4) 【示例】
假设数据仓库表结构,用简化SQL计算当前月学员数、续费率、完课率:
SELECT COUNT(DISTINCT 学员ID) AS 学员数
FROM 学员行为事实表
WHERE 行为类型 = '注册'
AND 支付状态 = '成功'
AND 金额 > 0
AND 行为时间 >= DATE_TRUNC('month', CURRENT_DATE)
AND 行为时间 < DATE_TRUNC('month', CURRENT_DATE) + INTERVAL '1 month';
WITH 注册学员 AS (
SELECT DISTINCT 学员ID
FROM 学员行为事实表
WHERE 行为类型 = '注册'
AND 支付状态 = '成功'
AND 金额 > 0
AND 行为时间 >= DATE_TRUNC('month', CURRENT_DATE)
AND 行为时间 < DATE_TRUNC('month', CURRENT_DATE) + INTERVAL '1 month'
),
续费学员 AS (
SELECT DISTINCT 学员ID
FROM 学员行为事实表
WHERE 行为类型 = '续费'
AND 行为时间 >= DATE_TRUNC('month', CURRENT_DATE)
AND 行为时间 < DATE_TRUNC('month', CURRENT_DATE) + INTERVAL '1 month'
)
SELECT
COUNT(*) AS 续费学员数,
COUNT(DISTINCT 注册学员.学员ID) AS 总注册学员数,
COUNT(*) * 100.0 / COUNT(DISTINCT 注册学员.学员ID) AS 续费率
FROM 续费学员
JOIN 注册学员 ON 续费学员.学员ID = 注册学员.学员ID;
WITH 报名学员 AS (
SELECT DISTINCT 学员ID
FROM 学员行为事实表
WHERE 行为类型 = '注册'
AND 支付状态 = '成功'
AND 金额 > 0
AND 行为时间 >= DATE_TRUNC('month', CURRENT_DATE)
AND 行为时间 < DATE_TRUNC('month', CURRENT_DATE) + INTERVAL '1 month'
),
完课学员 AS (
SELECT DISTINCT 学员ID
FROM 学员行为事实表
WHERE 行为类型 = '完课'
AND 行为时间 >= DATE_TRUNC('month', CURRENT_DATE)
AND 行为时间 < DATE_TRUNC('month', CURRENT_DATE) + INTERVAL '1 month'
)
SELECT
COUNT(*) AS 完课学员数,
COUNT(DISTINCT 报名学员.学员ID) AS 总报名学员数,
COUNT(*) * 100.0 / COUNT(DISTINCT 报名学员.学员ID) AS 完课率
FROM 完课学员
JOIN 报名学员 ON 完课学员.学员ID = 报名学员.学员ID;
5) 【面试口播版答案】面试官您好,针对好未来的核心业务指标建模与视图设计,我的思路是:首先采用星型模型构建数据仓库,以“学员行为事实表”为核心,关联“学员”“课程”“时间”维度表,确保业务事件的完整性与属性可追溯。对于学员数,定义为注册并完成首次支付(支付成功且金额大于0)的学员去重数,计算逻辑是统计“注册”行为中满足支付条件的学员ID;续费率是续费学员数与总注册学员数的比例,需过滤时间周期并去重;完课率是完成课程的学员数与报名该课程的学员数的比例,需关联“注册”与“完课”行为。然后设计分析视图,比如仪表盘,包含指标卡片(展示各指标数值)、趋势图(按时间维度展示变化)、筛选器(按地区、课程类型等维度筛选),实现业务指标的统一计算与可视化展示。
6) 【追问清单】
7) 【常见坑/雷区】