本文主要介绍相关漏斗数据分析函数。
FUNNEL_COUNT
v语法
funnel_count(<事件发送时间戳:bigint>, <事件窗口毫秒宽度:bigint>, <事件id:int/varchar>, <事件id列表:varchar>)
函数说明
- 过滤所有满足事件窗口宽度内的数据。
- 将过滤后的事件按时间戳排序,例如t1发送e1、t2发送e2、t3发送e1、t4发送e3。
- 对比事件列表,从第一个事件依次做“最长、有序”匹配,返回匹配的最大长度。一旦匹配失败,结束整个匹配。
例如关心事件为e1,e2,e3,而用户数据为e1,e2,e4,最终匹配到e1,e2,函数返回值为2。
关心事件为e1,e2,e3,而用户数据为e2,e1,e3,最终匹配到e1,函数返回值为1。
关心事件为e1,e2,e3,而用户数据为e4,e3,最终没有匹配到事件,函数返回值为0。
FUNNEL_COUNT函数用于查询从起点事件到终点事件的最长匹配路径从而来分析转化率,因此如果您从中间某个步骤开始执行FUNNEL_COUNT函数,或者仅产生几个事件,则整个转化率是没有影响。
示例
select uid, funnel_count(event_time, 10, event_id, '1,3,6,7')
as max_ordered_match_length
from (
SELECT * FROM VALUES
(1,2,1),
(3,4,1),
(1,4,3),
(1,5,3),
(2,5,3),
(3,6,3),
(4,1,1),
(4,11,3),
(1,7,6)
t1 (
uid, event_time, event_id
)
)as tmp
group by uid;
| uid | max_ordered_match_length |
+------+--------------------------+
| 1 | 3 |
| 3 | 2 |
| 2 | 0 |
| 4 | 1 |
-- 用户1,在时间点2触发了1号事件,在时间点4和5触发了3号事件,在时间点7触发了6号事件,与关心事件列表(1,3,6,7)相比,匹配了(1,3,6) 三个事件,所以函数返回值为3。
-- 用户3,在时间点4触发了1号事件,在时间点6触发了3号事件,与关心事件列表(1,3,6,7)相比,匹配了(1,3)两个事件,所以函数返回值为2。
-- 用户2,在时间点5触发了3号事件,与关心事件列表(1,3,6,7)相比,匹配了0个事件(因为第一个事件是1),所以函数返回值为0。
-- 用户4,在时间点1触发了1号事件,在时间点11触发了3号事件(这个事件超过窗口10,无效),与关心事件列表(1,3,6,7)相比,匹配(1) 一个事件,所以函数返回值为1。
FUNNEL_SUM
语法
funnel_sum(<通过funnel_count计算出来的最长事件匹配链:int>,<共有几个事件:int>)
函数说明
FUNNEL_SUM也是聚合函数,搭配FUNNEL_COUNT使用,对漏斗函数做二次聚合。对每个最长有序事件进行匹配统计,根据关心的事件个数参数,依次统计完成1次转换、2次转化、3次转化等。
示例
select funnel_sum(max_ordered_match_length, 4)
as conversion_link
from (
SELECT * FROM VALUES
(1,3), --- 上面的计算结果
(3,2),
(2,0),
(4,1)
t1 (
uid, max_ordered_match_length
)
)as tmp
| conversion_link |
+-----------------+
| [3, 2, 1, 0] |
-- 用户1完成了连续3个事件,用户3则完成2个,用户4完成1个,用户2没有,假如关心的事件数为4,那么:
-- funnel_sum(max_ordered_match_length, 4) = [3, 2, 1, 0] ,
-- 有3个用户(分别是1,3,2)完成的事件数大于等于1;
-- 有2个用户(分别是1,3)完成的事件数大于等于2;
-- 有1个用户(就是1这个用户)完成的事件数大于等3;
-- 有0个用户完成的事件数大于等4;
-- 所以函数的结果从1开始分别统计每个事件完成的人数[3,2,1,0]。