51mee - AI智能招聘平台Logo
模拟面试题目大全招聘中心会员专区

如何将好未来的核心业务指标(如学员数、续费率、课程完课率)建模到数据仓库中,并设计相应的分析视图(如仪表盘),请说明指标定义、计算逻辑及视图设计。

好未来数据仓库难度:中等

答案

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) 【追问清单】

  • 如何处理新业务线(如直播课)的指标扩展?回答要点:通过在事实表中增加“业务线类型”字段(如“直播课”),或新增“业务线维度表”,将新业务行为纳入事实表,确保模型可扩展,ETL流程中新增业务线类型过滤条件。
  • 如何处理数据延迟对指标计算的影响?回答要点:采用每日增量ETL加载最新行为数据,并设置1-2天的延迟缓冲(如事实表数据延迟1天),确保仪表盘数据及时性,同时满足业务对实时性的需求。
  • 如何定义“活跃学员”?回答要点:活跃学员定义为最近30天内有行为(注册、续费、完课等)的学员,通过事实表中的行为时间计算,用于计算流失率等指标,在仪表盘中提供活跃学员占比的卡片。
  • 如何处理多级续费(如月/季/年)?回答要点:在事实表中增加“续费周期”字段(如“月”“季”“年”),按周期统计续费行为,计算不同周期的续费率,并在仪表盘中提供周期维度筛选。
  • 如何优化完课率的计算粒度(如日/周/月)?回答要点:在时间维度表中增加“粒度”字段,根据粒度聚合数据,计算不同粒度的完课率,并在仪表盘中提供粒度切换功能。

7) 【常见坑/雷区】

  • 指标定义边界模糊:如续费率是否包含新注册学员?需明确“总注册学员数”是否包含新注册的,避免混淆,应明确为“某周期内注册并支付成功的学员”。
  • 建模时事实表与维度表关联错误:如“学员行为事实表”与“学员维度表”的“学员ID”字段未正确关联,导致指标计算错误,需确保主键一致。
  • 未考虑业务变化(如新业务线加入):未设计可扩展的模型(如雪花模型),当新业务线(如直播课)加入时,模型难以扩展,应预留字段或维度表扩展点。
  • 数据延迟导致实时性不足:未考虑业务对实时性的要求(如实时监控续费率),导致数据延迟影响决策,需评估数据延迟对业务的影响,设置合理的延迟阈值。
  • 指标计算逻辑错误:如完课率未过滤“报名”与“完课”行为的关联性,导致计算结果不准确,需确保完课行为与报名行为关联(如同一学员ID,同一课程ID),避免跨课程或跨学员的误计算。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1