跳转到主要内容

使用 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 (登录 -> 访问 -> 购物车 -> 购买).