Clickhouse:漏斗分析

时间:2021-03-30 13:06:01

标签: clickhouse

我正在尝试在 Clickhouse 中做一个漏斗,但遇到了在步骤中只记录第一个事件的问题。 让我们假设: 客户端应该经历 3 个事件 - '001_event'、'002_event' 和 '003_event'。 问题是一个客户可以无限次地走这条路,我想考虑到每个客户通过这 3 个事件的这个漏斗的所有尝试。

例如我有数据集:

<头>
appmetica_device_id event_datetime 事件名称
168 2021-03-01 12:01:00 001_event
168 2021-03-01 12:02:00 002_event
168 2021-03-01 12:03:00 003_event
168 2021-03-01 15:00:00 001_event
168 2021-03-01 18:00:00 001_event
168 2021-03-01 18:02:00 002_event
200 2021-03-01 12:01:00 001_event
200 2021-03-01 12:02:00 002_event
200 2021-03-15 12:03:00 001_event

最后我想得到一个包含漏斗通过次数的表格,而不是通过漏斗的用户数量:

<头>
001_event 002_event 003_event
5 3 1

我的代码:

select
sum(step1_time != 0) as step1_achieve,
sum(step2_time != 0) as step2_achieve,
sum(step3_time != 0) as step3_achieve,
sum(step4_time != 0) as step4_achieve
from (
    select groupArray(event_name) as event, groupArray(event_datetime) as event_time,
    arrayFilter(time, name -> (name = '001_event'), event_time, event)[1] as step1_time,
    arrayFilter(time, name -> (name = '002_event') and (time >= step1_time) and (step1_time != 0), event_time, event)[1] as step2_time,
    arrayFilter(time, name -> (name = '003_event') and (time >= step2_time) and (step2_time != 0), event_time, event)[1] as step3_time,
    from app_metrica.events_all
    prewhere event_date >= '2021-03-01'
    where event_name in ('001_event', '002_event', '003_event')
    group by appmetrica_device_id
)

但是我明白了:

<头>
001_event 002_event 003_event
2 2 1

0 个答案:

没有答案
相关问题