活动合约
查询期望的字段
| 字段 | 类型 | 为什么存在 |
|---|---|---|
| timestamp_utc | Timestamp | 当产品事件发生时。 |
| user_id | Utf8 | 稳定的用户标识符。 |
| event_name | Utf8 | 稳定的 snake_case 里程碑名称。 |
| source | Utf8 | 收购或活动来源。 |
DataFusion SQL
复制查询
sql
WITH events AS (
SELECT user_id, event_name, timestamp_utc
FROM product_events
WHERE timestamp_utc >= now() - INTERVAL '30 days'
),
signups AS (
SELECT user_id, MIN(timestamp_utc) AS signed_up_at
FROM events WHERE event_name = 'signup_completed'
GROUP BY user_id
),
onboarding AS (
SELECT s.user_id, s.signed_up_at, MIN(e.timestamp_utc) AS onboarded_at
FROM signups AS s
LEFT JOIN events AS e ON e.user_id = s.user_id
AND e.event_name = 'onboarding_completed'
AND e.timestamp_utc >= s.signed_up_at
GROUP BY s.user_id, s.signed_up_at
),
integrations AS (
SELECT o.user_id, o.signed_up_at, o.onboarded_at,
MIN(e.timestamp_utc) AS integrated_at
FROM onboarding AS o
LEFT JOIN events AS e ON e.user_id = o.user_id
AND e.event_name = 'integration_connected'
AND e.timestamp_utc >= o.onboarded_at
GROUP BY o.user_id, o.signed_up_at, o.onboarded_at
),
user_funnel AS (
SELECT i.user_id, i.signed_up_at, i.onboarded_at, i.integrated_at,
MIN(e.timestamp_utc) AS activated_at
FROM integrations AS i
LEFT JOIN events AS e ON e.user_id = i.user_id
AND e.event_name = 'first_value_completed'
AND e.timestamp_utc >= i.integrated_at
GROUP BY i.user_id, i.signed_up_at, i.onboarded_at, i.integrated_at
),
stage_counts AS (
SELECT 1 AS step_order, 'Signed up' AS step, COUNT(signed_up_at) AS users
FROM user_funnel
UNION ALL
SELECT 2, 'Onboarded', COUNT(onboarded_at) FROM user_funnel
UNION ALL
SELECT 3, 'Integrated', COUNT(integrated_at) FROM user_funnel
UNION ALL
SELECT 4, 'Activated', COUNT(activated_at) FROM user_funnel
)
SELECT
step_order,
step,
users,
100.0 * users
/ NULLIF(MAX(CASE WHEN step_order = 1 THEN users END) OVER (), 0)
AS conversion_from_signup_pct,
100.0 * users
/ NULLIF(LAG(users) OVER (ORDER BY step_order), 0)
AS conversion_from_previous_pct
FROM stage_counts
ORDER BY step_order;此只读查询是针对空类型表计划和执行的 阿帕奇 DataFusion 45.2.0。确定性样本输出是综合的并单独审查;根据您自己的数据验证字段类型、阈值和业务定义。 阅读测试方法。
查询结果
注册到激活渠道
最大的绝对损失发生在入职完成之前,而整合仍然是后期最严重的瓶颈。
Signed up8
Onboarded6
Integrated4
Activated3
| step_order | step | users | conversion_from_signup_pct | conversion_from_previous_pct |
|---|---|---|---|---|
| 1 | Signed up | 8 | 100 | — |
| 2 | Onboarded | 6 | 75 | 75 |
| 3 | Integrated | 4 | 50 | 66.67 |
| 4 | Activated | 3 | 37.5 | 75 |
综合示例输出。在将其用于操作决策之前,针对您自己的事件架构和阈值运行查询。
SQL 是如何工作的
- 1Each CTE selects the first milestone at or after the previous eligible stage, retaining one row per signed-up user.
- 2A missing or out-of-order milestone blocks all later steps. A later valid retry can advance the user, and duplicates count once.
- 3该查询报告注册转化和上一步转化,使总性能和最大转换损失一起可见。
- 4事件名称应代表已完成的里程碑,而不是不能证明用户已完成该步骤的页面视图或按钮单击。
需要决定的边缘情况
- 使用基于注册时间的队列窗口,并为最近的注册留出足够的时间来激活。
- 迟到的事件可能会暂时使用户在最近计算的漏斗中向后移动。
- 仅当总漏斗有足够的容量后才按采集源进行细分。
推荐仪表板
- 漏斗栏:用户逐步
- 折线图:按注册周划分的激活率
- 表:按来源、计划或角色划分的转换
让查询示例发挥作用
相关埋点和指南
定义源数据
此分析的事件模式
继续分析
在真实事件中运行它
创建表,调整字段并保存结果
免费开始,发送结构化事件,并将查询结果用作图表、共享仪表板小部件或警报输入。