使用 Databend 作漏斗分析
漏斗分析用来衡量执行了一组操作的唯一用户数量,我们用它来查看多步骤流程中的流失和转化。
使用 WINDOW_FUNNEL FUNCTION 进行漏斗分析既简单又高效。
第1步: Databend
1.1 部署 Databend
请确保您已经成功安装了 Databend。安装指导:
1.2 创建用户
使用 MySQL 客户端连接到 Databend 服务器:
mysql -h127.0.0.1 -uroot -P3307
创建用户:
CREATE USER user1 IDENTIFIED BY 'abc123';
授予用户权限:
GRANT ALL ON *.* TO user1;
参考如何创建用户。
1.3 创建表
使用 MySQL 客户端连接到 Databend 服务器:
mysql -h127.0.0.1 -uuser1 -pabc123 -P3307
CREATE TABLE events(user_id BIGINT, event_name VARCHAR, event_timestamp TIMESTAMP);
准备数据:
INSERT INTO events VALUES(100123, 'login', '2022-05-14 10:01:00');
INSERT INTO events VALUES(100123, 'visit', '2022-05-14 10:02:00');
INSERT INTO events VALUES(100123, 'cart', '2022-05-14 10:04:00');
INSERT INTO events VALUES(100123, 'purchase', '2022-05-14 10:10:00');
INSERT INTO events VALUES(100125, 'login', '2022-05-15 11:00:00');
INSERT INTO events VALUES(100125, 'visit', '2022-05-15 11:01:00');
INSERT INTO events VALUES(100125, 'cart', '2022-05-15 11:02:00');
INSERT INTO events VALUES(100126, 'login', '2022-05-15 12:00:00');
INSERT INTO events VALUES(100126, 'visit', '2022-05-15 12:01:00');
表格:
+---------+------------+----------------------------+
| user_id | event_name | event_timestamp |
+---------+------------+----------------------------+
| 100123 | login | 2022-05-14 10:01:00.000000 |
| 100123 | visit | 2022-05-14 10:02:00.000000 |
| 100123 | cart | 2022-05-14 10:04:00.000000 |
| 100123 | purchase | 2022-05-14 10:10:00.000000 |
| 100125 | login | 2022-05-15 11:00:00.000000 |
| 100125 | visit | 2022-05-15 11:01:00.000000 |
| 100125 | cart | 2022-05-15 11:02:00.000000 |
| 100126 | login | 2022-05-15 12:00:00.000000 |
| 100126 | visit | 2022-05-15 12:01:00.000000 |
+---------+------------+----------------------------+
我们有一个带有以下字段的表格:
- user_id - 用户唯一的标识符
- event_name - 事件类型
- event_timestamp - 事件时间戳
第2步: 漏斗分析
了解用户一小时内的活动轨迹。
SELECT
level,
count() AS count
FROM
(
SELECT
user_id,
window_funnel(3600000000)(event_timestamp, event_name = 'login', event_name = 'visit', event_name = 'cart', event_name = 'purchase') AS level
FROM events
GROUP BY user_id
)
GROUP BY level ORDER BY level ASC;
tip
event_timestamp
类型是时间戳, 3600000000
是一个小时的时间窗口。
结果:
+-------+-------+
| level | count |
+-------+-------+
| 2 | 1 |
| 3 | 1 |
| 4 | 1 |
+-------+-------+
- 用户
100126
级别是 2 (登录 -> 访问
) 。 - 用户
100125
级别是 3 (登录 -> 访问 -> 购物车
)。 - 用户
100123
级别是 4 (登录 -> 访问 -> 购物车 -> 购买
).