使用 SQL 分析同期群留存
保留询问指定的参与者在开始里程碑后是否返回。有用的保留查询会说明参与者、队列事件、合格返回活动、间隔和观察窗口。在这五个选择明确之前,“每周保留”是不明确的。
分别构建队列和活动表
WITH cohorts AS (
SELECT
account_id,
date_trunc('week', MIN(timestamp_utc)) AS cohort_week
FROM product_events
WHERE event_name = 'activation_completed'
GROUP BY account_id
),
activity AS (
SELECT DISTINCT
account_id,
date_trunc('week', timestamp_utc) AS activity_week
FROM product_events
WHERE event_name IN ('query_completed', 'dashboard_viewed')
)
SELECT
cohort_week,
activity_week,
COUNT(DISTINCT cohorts.account_id) AS retained_accounts
FROM cohorts
JOIN activity
ON cohorts.account_id = activity.account_id
AND activity.activity_week >= cohorts.cohort_week
GROUP BY cohort_week, activity_week
ORDER BY cohort_week, activity_week;
这一结果保留了队列和活动周。在确认所选 SQL 引擎支持的日期算法后,报告层可以将间隙转换为第 0 周、第 1 周和后续周期。保持中间日期可见可以使边界错误更容易被发现。
定义一次分母
分母是队列中符合条件的参与者的数量,而不是产生后来活动事件的数量。单独计算队列大小并将其加入保留计数中。使用 NULLIF 保护百分比,并在输出中保留两个计数。
最近的队列没有时间达到较晚的间隔。将这些单元格标记为不完整,而不是将它们视为零保留。还要决定第零周是意味着激活本身还是激活后单独返回。
使用代表持久价值的事件而不是任何后台心跳。排除测试帐户和具有受控字段的自动化活动。使用小型装置验证身份合并、重复事件、迟到和时区边界。
阅读 漏斗分析 了解里程碑进展,阅读 时间分桶 了解间隔规则,并在采用另一种 SQL 方言的日期计算之前阅读 DataFusion SQL 参考。