跳转到内容
Telemetry
产品分析 SQL查询示例

使用 SQL 构建注册到激活渠道

通过注册、入职、集成和第一价值里程碑计算唯一用户转化。

中级product_events已审核 2026-07-27测试用 阿帕奇 DataFusion 45.2.0

审阅者 Telemetry产品团队 . SQL 兼容性、事件契约、合成输出和操作注意事项. 审查标准和所有权

问题已回答

新用户在达到第一个价值之前会离开哪里?

仅当每个步骤都有行为定义时,漏斗才有用。此查询为每个用户创建一行,强制执行里程碑顺序,并计算注册和上一步的转化。

活动合约

查询期望的字段

字段类型为什么存在
timestamp_utcTimestamp当产品事件发生时。
user_idUtf8稳定的用户标识符。
event_nameUtf8稳定的 snake_case 里程碑名称。
sourceUtf8收购或活动来源。
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。确定性样本输出是综合的并单独审查;根据您自己的数据验证字段类型、阈值和业务定义。 阅读测试方法。

查询结果

注册到激活渠道

最大的绝对损失发生在入职完成之前,而整合仍然是后期最严重的瓶颈。

step_orderstepusersconversion_from_signup_pctconversion_from_previous_pct
1Signed up8100
2Onboarded67575
3Integrated45066.67
4Activated337.575

综合示例输出。在将其用于操作决策之前,针对您自己的事件架构和阈值运行查询。

Signup-to-activation funnel:来自 Build a Signup-to-Activation Funnel in SQL 示例结果的合成 users 值的静态图表
确定性示例输出的可索引 SVG。下载它以获取带有归属的文章、操作手册或设计评论。

重现示例

下载公共装置

JSON 包包含类型化事件契约, reproducible 输入行、确切的 SQL、预期输出、审阅注释和引擎版本。 CSV 包含显示的结果。

SQL 是如何工作的

  1. 1Each CTE selects the first milestone at or after the previous eligible stage, retaining one row per signed-up user.
  2. 2A missing or out-of-order milestone blocks all later steps. A later valid retry can advance the user, and duplicates count once.
  3. 3该查询报告注册转化和上一步转化,使总性能和最大转换损失一起可见。
  4. 4事件名称应代表已完成的里程碑,而不是不能证明用户已完成该步骤的页面视图或按钮单击。

需要决定的边缘情况

  • 使用基于注册时间的队列窗口,并为最近的注册留出足够的时间来激活。
  • 迟到的事件可能会暂时使用户在最近计算的漏斗中向后移动。
  • 仅当总漏斗有足够的容量后才按采集源进行细分。

推荐仪表板

  • 漏斗栏:用户逐步
  • 折线图:按注册周划分的激活率
  • 表:按来源、计划或角色划分的转换

警报指导

当成熟注册群体的激活率大幅低于其最近的基线时,请使用低紧急度警报。

读取警报设置

让查询示例发挥作用

相关埋点和指南

定义源数据

此分析的事件模式

继续分析

在真实事件中运行它

创建表,调整字段并保存结果

免费开始,发送结构化事件,并将查询结果用作图表、共享仪表板小部件或警报输入。

获取 API 密钥