data

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Data — Analytics & Intelligence

数据——分析与智能

Measure what matters. Every metric should drive a decision. If it doesn't, stop tracking it.
衡量重要的指标。每个指标都应该为决策提供依据。如果不能,就停止追踪它。

Metric Hierarchy

指标层级

LevelMetricCadence
North Star1 metric that defines success (e.g., WAU, MRR)Weekly
Health3-5 metrics that predict north star (retention, activation, NPS)Weekly
FeaturePer-feature usage, conversion, time-to-valuePer release
DebugGranular events for troubleshootingOn-demand
Rules:
  • North star is singular. Two north stars = zero north stars.
  • Vanity metrics (page views, total signups) are not health metrics.
  • Every feature ships with tracking. No "we'll add analytics later."
层级指标频率
北极星指标定义成功的1个核心指标(例如:WAU、MRR)每周
健康指标3-5个可预测北极星指标的辅助指标(留存率、激活率、NPS)每周
功能指标各功能的使用情况、转化率、价值实现时间每次版本发布后
调试指标用于故障排查的细粒度事件按需
规则:
  • 北极星指标唯一。两个北极星指标等于没有北极星指标。
  • 虚荣指标(页面浏览量、总注册数)不属于健康指标。
  • 每个功能上线时都必须包含追踪机制。不要说“我们以后再添加分析功能”。

SQL Patterns

SQL模式

Cohort Retention

同期群留存

sql
SELECT
  DATE_TRUNC('week', u.created_at) AS cohort_week,
  DATE_TRUNC('week', e.created_at) AS activity_week,
  COUNT(DISTINCT e.user_id) AS active_users
FROM users u
JOIN events e ON e.user_id = u.id
GROUP BY 1, 2
ORDER BY 1, 2;
sql
SELECT
  DATE_TRUNC('week', u.created_at) AS cohort_week,
  DATE_TRUNC('week', e.created_at) AS activity_week,
  COUNT(DISTINCT e.user_id) AS active_users
FROM users u
JOIN events e ON e.user_id = u.id
GROUP BY 1, 2
ORDER BY 1, 2;

Funnel Analysis

漏斗分析

sql
WITH steps AS (
  SELECT user_id,
    MAX(CASE WHEN event = 'signup' THEN 1 END) AS step_1,
    MAX(CASE WHEN event = 'onboard_complete' THEN 1 END) AS step_2,
    MAX(CASE WHEN event = 'first_action' THEN 1 END) AS step_3,
    MAX(CASE WHEN event = 'paid' THEN 1 END) AS step_4
  FROM events
  WHERE created_at > NOW() - INTERVAL '30 days'
  GROUP BY user_id
)
SELECT
  COUNT(*) AS total,
  SUM(step_1) AS signup,
  SUM(step_2) AS onboarded,
  SUM(step_3) AS activated,
  SUM(step_4) AS converted
FROM steps;
sql
WITH steps AS (
  SELECT user_id,
    MAX(CASE WHEN event = 'signup' THEN 1 END) AS step_1,
    MAX(CASE WHEN event = 'onboard_complete' THEN 1 END) AS step_2,
    MAX(CASE WHEN event = 'first_action' THEN 1 END) AS step_3,
    MAX(CASE WHEN event = 'paid' THEN 1 END) AS step_4
  FROM events
  WHERE created_at > NOW() - INTERVAL '30 days'
  GROUP BY user_id
)
SELECT
  COUNT(*) AS total,
  SUM(step_1) AS signup,
  SUM(step_2) AS onboarded,
  SUM(step_3) AS activated,
  SUM(step_4) AS converted
FROM steps;

Rolling Averages

滚动平均值

sql
SELECT
  date,
  value,
  AVG(value) OVER (ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS rolling_7d
FROM daily_metrics;
sql
SELECT
  date,
  value,
  AVG(value) OVER (ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS rolling_7d
FROM daily_metrics;

Event Tracking Design

事件追踪设计

Every event needs:
FieldExample
event_name
button_clicked
,
page_viewed
,
feature_used
user_id
Authenticated user
anonymous_id
Pre-auth (cookie/device)
timestamp
ISO 8601, UTC always
properties
{ page: "/pricing", plan: "pro" }
Naming convention:
noun_verb
form_submitted
,
file_uploaded
,
subscription_cancelled
Never:
click
,
event1
,
trackThis
,
misc
每个事件需包含以下字段:
字段示例
event_name
button_clicked
,
page_viewed
,
feature_used
user_id
已认证用户ID
anonymous_id
未认证用户(Cookie/设备标识)
timestamp
ISO 8601格式,始终使用UTC时区
properties
{ page: "/pricing", plan: "pro" }
命名规范:
名词_动词
——
form_submitted
,
file_uploaded
,
subscription_cancelled
禁止:
click
,
event1
,
trackThis
,
misc

Dashboard Rules

仪表盘规则

  • One question per dashboard. "How is acquisition?" not "Everything."
  • Top-left = most important metric. Eye lands there first.
  • Comparison always. This week vs last week. This month vs last month.
  • No pie charts. Use bar charts. Humans can't compare angles.
  • Annotate changes. "Launched feature X" on the timeline.
  • 每个仪表盘只聚焦一个问题。比如“获客情况如何?”而非“所有数据汇总”。
  • 左上角放置最重要的指标。用户的视线首先会落在那里。
  • 始终进行对比。本周与上周对比,本月与上月对比。
  • 禁止使用饼图。改用柱状图。人类无法准确比较角度。
  • 标注变化点。在时间轴上标注“上线功能X”等关键事件。

Data Pipeline Defaults

数据管道默认配置

LayerToolPurpose
CollectionPostHog, Segment, or customEvent ingestion
StoragePostgres or BigQueryQueryable warehouse
Transformdbt or SQL viewsBusiness logic layer
VisualizationMetabase, Grafana, or PostHogDashboards
Keep it simple. You don't need Kafka until you have 10M events/day.
层级工具用途
采集层PostHog、Segment或自定义工具事件摄入
存储层Postgres或BigQuery可查询的数据仓库
转换层dbt或SQL视图业务逻辑层
可视化层Metabase、Grafana或PostHog仪表盘展示
保持简单。除非每日事件量达到1000万,否则不需要Kafka。