计算谷歌大查询中的每周留存率
Posted
技术标签:
【中文标题】计算谷歌大查询中的每周留存率【英文标题】:Calculate weekly retention in google big query 【发布时间】:2021-04-12 14:00:41 【问题描述】:我在谷歌大查询中有一个大表,我想在两列上执行保留:-
Date user
2021-02-03 08:35:07 UTC foo@abc.com
2021-02-03 08:35:07 UTC foo1@abc.com
2021-02-04 08:35:07 UTC foo2@abc.com
2021-02-05 08:35:07 UTC foo@abc.com
2021-02-03 08:35:07 UTC foo1@abc.com
2021-02-10 08:35:07 UTC foo@abc.com
2021-02-13 08:35:07 UTC foo1@abc.com
2021-02-18 08:35:07 UTC foo3@abc.com
2021-02-21 08:35:07 UTC foo2@abc.com
2021-02-23 08:35:07 UTC foo2@abc.com
2021-02-24 08:35:07 UTC foo5@abc.com
2021-02-24 08:35:07 UTC foo2@abc.com
我想在以下条件下计算留存率:-
第 1 周的唯一身份用户在第 2 周出现的百分比
第 2 周的唯一身份用户在第 3 周出现的百分比,依此类推。
所需的输出格式为:-
week2 week3 week4
23% 56% 33%
我想在 1 个月或 6 个月的时间范围内执行此操作,无论我选择什么时间范围,输出都应采用上述格式。
我想要一个 Big Query 解决方案,但即使是 mysql 解决方案也能帮到我。
【问题讨论】:
为什么是 mysql/sql 标签? 因为查询仅在 sql/mysql 中。即使是 mysql/sql 解决方案也适合我。 好的,定义一个“星期” 开始7天是第一周,以此类推。 还有(最后?),您使用的是什么版本的 MySQL? 【参考方案1】:这是一个可能的解决方案:
WITH leads AS (
SELECT
user,
EXTRACT(ISOWEEK
FROM
`Date`) AS visit_week,
EXTRACT(ISOWEEK
FROM
LEAD(`Date`) OVER (PARTITION BY user ORDER BY `Date`)) AS next_visit_week
-- here you look the user's next visit and take the week. If the user is there the following week, next_visit_week = visit_week + 1
FROM
`your_project`.`your_dataset`.`your_table`)
SELECT
visit_week+1 AS `week`,
SUM(CASE
WHEN visit_week= next_visit_week-1
THEN 1
ELSE 0
END
)/COUNT(DISTINCT user)*100 AS retention_pct
FROM
leads
GROUP BY
`visit_week`
对于每周,您计算用户下一次访问在当前周之后的一周发生的次数(注意:每个用户只能发生一次)。您将总数除以不同用户的数量。
因此,您获得了下一周的保留率(因此“visit_week+1 AS week
”中的“+1”)。
【讨论】:
注意:因为你提到的时间范围是 6 个月或更短,所以我没有考虑年份 有没有办法在查询时给出我的时间范围......它永远不会太大,但如果我可以说我想要从这个日期到这个日期的结果。 当然,您只需要在“leads”临时表的定义中添加过滤器“ WHEREDate
BETWEEN "2021-01-01" AND "2021-03-31" "这里
嘿任何想法我们如何为每日保留实施相同的。 @Cylldby
另外,它让我从第 4 周开始留存,知道为什么第 1 周、第 2 周和第 3 周不存在以上是关于计算谷歌大查询中的每周留存率的主要内容,如果未能解决你的问题,请参考以下文章