如何解决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,name -> (name = '002_event') and (time >= step1_time) and (step1_time != 0),event)[1] as step2_time,name -> (name = '003_event') and (time >= step2_time) and (step2_time != 0),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 |
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。