文章目录
-
- 一、一句话解释
- 二、用一个电商例子理解
- 三、漏斗分析的关键指标
- 四、不同行业的漏斗分析例子
- 五、传统漏斗分析的痛点
- [六、ClickHouse 的漏斗函数:windowFunnel](#六、ClickHouse 的漏斗函数:windowFunnel)
-
- [6.1 函数语法](#6.1 函数语法)
- [6.2 电商漏斗完整 SQL](#6.2 电商漏斗完整 SQL)
- [6.3 更直观的横表输出](#6.3 更直观的横表输出)
- [七、ClickHouse 为什么适合漏斗分析?](#七、ClickHouse 为什么适合漏斗分析?)
- 八、实战注意事项
- 九、总结
在数据驱动的时代,每个业务环节都会产生用户行为。但如何量化用户的"流失"与"转化"?如何定位业务瓶颈?答案就是漏斗分析。本文将带你彻底理解漏斗分析的概念、核心指标,并展示如何用 ClickHouse 的一行 SQL 完成复杂漏斗计算。
一、一句话解释
漏斗分析:追踪用户完成一个"目标流程"时,每一步有多少人"流失"了。
通俗来说,你有一个业务路径(比如:打开App → 搜索商品 → 加购物车 → 支付成功),漏斗分析会帮你算清楚:
10000 人进来了,到最后只有 500 人付款------那 9500 人分别在哪一步走掉了?
二、用一个电商例子理解
假设一个电商 App 的"下单"流程如下:
| 步骤 | 动作 | 人数(假设) | 转化率(相比上一步) |
|---|---|---|---|
| 1 | 打开 App | 10000 人 | 100% |
| 2 | 搜索商品 | 8000 人 | 80% |
| 3 | 点击商品详情 | 5000 人 | 62.5% |
| 4 | 加入购物车 | 3000 人 | 60% |
| 5 | 支付成功 | 1500 人 | 50% |
漏斗图表示:
10000人 ──80%──→ 8000人 ──62.5%──→ 5000人 ──60%──→ 3000人 ──50%──→ 1500人
│ │ │ │
└─ 流失2000人 └─ 流失3000人 └─ 流失2000人 └─ 流失1500人
结论:
- 从"打开 App"到"支付成功",整体转化率只有 15%(1500/10000)
- 最大流失发生在搜索商品 → 点击详情这一步(流失 3000 人)
- 优化方向:检查搜索结果是否准确?商品列表是否吸引人?
这就是漏斗分析的核心价值------找到业务瓶颈,指导优化。
三、漏斗分析的关键指标
| 指标 | 计算公式 | 含义 |
|---|---|---|
| 单步转化率 | 当前步骤人数 / 上一步人数 | 每一步的"通过率" |
| 单步流失率 | 1 - 单步转化率 | 每一步的"逃跑率" |
| 整体转化率 | 最终步骤人数 / 第一步人数 | 全流程成功率 |
实际业务中的含义:
- 转化率低 → 这一步可能存在体验问题(如加载慢、按钮不明显)
- 流失率高 → 用户意愿在这里断崖式下跌
四、不同行业的漏斗分析例子
| 行业 | 漏斗流程 | 典型优化方向 |
|---|---|---|
| SaaS 产品 | 注册 → 创建项目 → 邀请成员 → 付费 | 简化注册流程,增加引导 |
| 内容平台 | 浏览列表 → 点击文章 → 读完 50% → 读完 100% → 评论/点赞 | 优化推荐算法,提升内容质量 |
| 游戏 | 下载 → 注册 → 完成新手教程 → 首次充值 | 降低新手门槛,设计付费点 |
| B2B 销售 | 官网访问 → 提交咨询表单 → 销售跟进 → 签合同 | 优化表单字段,缩短跟进时间 |
| 金融 App | 下载 → 注册 → 实名认证 → 绑卡 → 首次投资 | 简化认证流程,提供新手奖励 |
五、传统漏斗分析的痛点
在没有专用工具时,漏斗分析通常需要:
sql
-- 传统方式:多次查询,手动关联
-- 步骤1:打开App的用户
SELECT DISTINCT user_id FROM events WHERE event = 'open_app' AND date = '2025-01-15';
-- 步骤2:搜索商品的用户(且必须在步骤1之后)
SELECT DISTINCT user_id FROM events WHERE event = 'search' AND date = '2025-01-15'
AND user_id IN (上一步结果);
-- 步骤3:点击详情的用户...
-- 步骤4:加入购物车的用户...
-- 步骤5:支付成功的用户...
痛点:
- 需要写大量代码,多次查询
- 时间窗口控制复杂(必须在 1 小时内完成)
- 大数据量下性能差
- 难以灵活调整步骤顺序
六、ClickHouse 的漏斗函数:windowFunnel
ClickHouse 内置了 windowFunnel 聚合函数,专门用于漏斗分析,一行 SQL 搞定所有步骤。
6.1 函数语法
sql
windowFunnel(window_seconds)(timestamp, cond1, cond2, cond3, ...)
| 参数 | 说明 |
|---|---|
window_seconds |
时间窗口(秒),用户必须在规定时间内完成所有步骤 |
timestamp |
事件时间戳列 |
cond1, cond2, ... |
事件条件,按顺序定义漏斗步骤 |
返回值 :一个整数,表示该用户按顺序完成了前几个步骤(0 ~ 步骤总数)。
6.2 电商漏斗完整 SQL
sql
-- 假设事件表:user_events
-- 字段:user_id, event_time, event_type
SELECT
-- 按步骤统计每个用户的完成深度
level,
COUNT(*) AS user_count,
-- 计算转化率
round(COUNT(*) * 100.0 / (SELECT COUNT(*) FROM user_events WHERE event_date = '2025-01-15' AND event_type = 'open_app'), 2) AS conversion_rate
FROM (
SELECT
user_id,
windowFunnel(3600)(event_time,
event_type = 'open_app', -- 步骤1
event_type = 'search', -- 步骤2
event_type = 'view_detail', -- 步骤3
event_type = 'add_cart', -- 步骤4
event_type = 'pay' -- 步骤5
) AS level
FROM user_events
WHERE event_date = '2025-01-15'
GROUP BY user_id
)
GROUP BY level
ORDER BY level;
结果示例:
| level(完成步骤数) | user_count | conversion_rate(整体转化率) |
|---|---|---|
| 0(未完成第一步) | 0 | 0% |
| 1(完成 open_app) | 10000 | 100% |
| 2(完成 search) | 8000 | 80% |
| 3(完成 view_detail) | 5000 | 50% |
| 4(完成 add_cart) | 3000 | 30% |
| 5(完成 pay) | 1500 | 15% |
6.3 更直观的横表输出
sql
WITH funnel_data AS (
SELECT
user_id,
windowFunnel(3600)(event_time,
event_type = 'open_app',
event_type = 'search',
event_type = 'view_detail',
event_type = 'add_cart',
event_type = 'pay'
) AS level
FROM user_events
WHERE event_date = '2025-01-15'
GROUP BY user_id
)
SELECT
COUNT(DISTINCT CASE WHEN level >= 1 THEN user_id END) AS step1_open_app,
COUNT(DISTINCT CASE WHEN level >= 2 THEN user_id END) AS step2_search,
COUNT(DISTINCT CASE WHEN level >= 3 THEN user_id END) AS step3_view_detail,
COUNT(DISTINCT CASE WHEN level >= 4 THEN user_id END) AS step4_add_cart,
COUNT(DISTINCT CASE WHEN level >= 5 THEN user_id END) AS step5_pay
FROM funnel_data;
输出:
| step1_open_app | step2_search | step3_view_detail | step4_add_cart | step5_pay |
|---|---|---|---|---|
| 10000 | 8000 | 5000 | 3000 | 1500 |
七、ClickHouse 为什么适合漏斗分析?
| 传统方式 | ClickHouse 方式 | 优势 |
|---|---|---|
| 多次查询,手动 JOIN | 一行 SQL + windowFunnel |
开发效率高 |
| 内存处理亿级数据慢 | 列式扫描 + 向量化执行 | 查询速度快(秒级) |
| 需要预聚合,不灵活 | 实时计算任意时间窗口 | 可随意调整漏斗步骤 |
| 时间窗口控制复杂 | 函数内置参数 | 简单直观 |
性能数据(实测):
- 10 亿行事件数据
- 漏斗步骤:5 步
- 查询耗时:2-5 秒
八、实战注意事项
| 注意点 | 说明 | 解决方案 |
|---|---|---|
| 事件顺序 | windowFunnel 严格按参数顺序匹配 |
确保漏斗步骤顺序正确 |
| 时间窗口 | 用户必须在窗口内完成所有步骤 | 根据业务流程设置合理窗口(如 3600 秒) |
| 重复事件 | 同一步骤可能多次发生 | 函数自动取第一次满足条件的时间 |
| 数据倾斜 | 某些用户事件过多 | 可加上 LIMIT BY 或过滤异常用户 |
| 性能优化 | 全表扫描耗时 | 用分区裁剪(WHERE event_date = today()) |
九、总结
| 你关心的问题 | 答案 |
|---|---|
| 漏斗分析是什么? | 追踪用户完成目标流程时,每一步的转化与流失 |
| 核心指标有哪些? | 单步转化率、流失率、整体转化率 |
| 传统做法有什么痛点? | 多次查询、代码复杂、性能差 |
| ClickHouse 如何实现? | 内置 windowFunnel 函数,一行 SQL 搞定 |
| 为什么 ClickHouse 适合? | 列式存储 + 向量化执行,亿级数据秒级返回 |
| 典型场景? | 电商下单、App 注册、游戏付费、B2B 销售 |
一句话记住
漏斗分析就是用数据画出用户的"旅程地图",帮你看清楚:人是从哪个路口走丢的。ClickHouse 的
windowFunnel函数让你用一行 SQL 完成复杂漏斗计算,秒级返回亿级数据结果。
如需深入了解 ClickHouse 的部署架构选型、分片与副本机制详解、分布式表原理剖析、无中心架构设计哲学、生产环境集群调优、多副本一致性实践、ClickHouse Keeper 核心原理等内容,请持续关注本专栏《ClickHouse 一站式从入门到实战》系列文章。
在数据驱动的时代,每个业务环节都会产生用户行为。但如何量化用户的"流失"与"转化"?如何定位业务瓶颈?答案就是漏斗分析。本文将带你彻底理解漏斗分析的概念、核心指标,并展示如何用 ClickHouse 的一行 SQL 完成复杂漏斗计算。