数据分析指南

本文档介绍如何使用 Vibany 的数据分析功能监控系统运营状况。

数据来源

Vibany 的数据主要来自:

  • PostgreSQL 数据库:业务数据(用户、订单、历史记录等)
  • Clerk:用户认证数据
  • Vercel Analytics:访问统计(如果启用)
  • Microsoft Clarity:用户行为分析(可选)

核心指标

用户指标

指标说明计算方式
总用户数注册账号总数COUNT(*) FROM users
日新增用户当日注册用户COUNT(*) FROM users WHERE DATE(created_at) = TODAY
活跃用户最近 7 天有操作COUNT(DISTINCT user_id) FROM histories WHERE created_at > NOW() - 7 days
付费用户有过充值记录COUNT(DISTINCT user_id) FROM orders WHERE status = 'SUCCESS'

收入指标

指标说明计算方式
日收入当日充值积分SUM(amount) FROM orders WHERE status = 'SUCCESS' AND DATE(created_at) = TODAY
月收入当月充值积分SUM(amount) FROM orders WHERE status = 'SUCCESS' AND MONTH(created_at) = CURRENT_MONTH
ARPU用户平均收入总收入 / 付费用户数
付费率付费用户占比付费用户数 / 总用户数

使用指标

指标说明计算方式
日生成量当日生成图片数COUNT(*) FROM histories WHERE DATE(created_at) = TODAY
总生成量累计生成图片数COUNT(*) FROM histories
平均耗时图片生成平均时间AVG(generation_time) FROM histories
成功率生成成功比例成功数 / 总数

SQL 查询示例

用户增长趋势

-- 每日新增用户
SELECT 
  DATE(created_at) as date,
  COUNT(*) as new_users
FROM users
WHERE created_at > NOW() - INTERVAL '30 days'
GROUP BY DATE(created_at)
ORDER BY date DESC;

-- 累计用户数
SELECT 
  DATE(created_at) as date,
  COUNT(*) OVER (ORDER BY DATE(created_at)) as cumulative_users
FROM users
GROUP BY DATE(created_at)
ORDER BY date;

收入分析

-- 每日收入统计
SELECT 
  DATE(o.created_at) as date,
  COUNT(*) as order_count,
  SUM(o.amount) as revenue_points,
  COUNT(DISTINCT o.user_id) as paying_users
FROM orders o
WHERE o.status = 'SUCCESS'
  AND o.created_at > NOW() - INTERVAL '30 days'
GROUP BY DATE(o.created_at)
ORDER BY date DESC;

-- 支付方式分布
SELECT 
  payment_method,
  COUNT(*) as order_count,
  SUM(amount) as total_points,
  ROUND(AVG(amount), 2) as avg_points
FROM orders
WHERE status = 'SUCCESS'
GROUP BY payment_method
ORDER BY order_count DESC;

模型使用统计

-- 各模型使用频率
SELECT 
  (extra->>'model') as model,
  COUNT(*) as usage_count,
  AVG(points_used) as avg_points
FROM histories
WHERE created_at > NOW() - INTERVAL '30 days'
  AND status = true
GROUP BY (extra->>'model')
ORDER BY usage_count DESC;

用户留存分析

-- 次日留存率
WITH first_login AS (
  SELECT 
    user_id,
    MIN(DATE(created_at)) as first_date
  FROM histories
  GROUP BY user_id
),
next_day_login AS (
  SELECT DISTINCT
    h.user_id,
    DATE(h.created_at) as login_date
  FROM histories h
  JOIN first_login f ON h.user_id = f.user_id
  WHERE DATE(h.created_at) = f.first_date + INTERVAL '1 day'
)
SELECT 
  ROUND(
    COUNT(DISTINCT n.user_id) * 100.0 / COUNT(DISTINCT f.user_id),
    2
  ) as retention_rate
FROM first_login f
LEFT JOIN next_day_login n ON f.user_id = n.user_id
WHERE f.first_date = CURRENT_DATE - INTERVAL '1 day';

邀请效果分析

-- 邀请码效果统计
SELECT 
  i.invite_code,
  i.invite_type,
  i.ref_ratio,
  COUNT(iu.id) as usage_count,
  SUM(iu.recharge_amount) as total_recharge
FROM invitations i
LEFT JOIN invitation_usages iu ON i.id = iu.invitation_id
GROUP BY i.id, i.invite_code, i.invite_type, i.ref_ratio
ORDER BY usage_count DESC;

可视化工具

Drizzle Studio

内置数据库 GUI 工具:

npm run db:studio

访问 http://localhost:4983

连接 BI 工具

可以使用以下工具连接 PostgreSQL 进行可视化分析:

工具特点适用场景
Metabase开源,易用自建分析平台
Grafana专业监控实时仪表板
Tableau商业软件高级分析
Google Data Studio免费简单报表

Metabase 配置示例

  1. 安装 Metabase(Docker):
docker run -d -p 3000:3000 --name metabase metabase/metabase
  1. 添加数据库连接:
  • 数据库类型:PostgreSQL
  • 主机:Neon 连接字符串中的主机
  • 端口:5432
  • 数据库名:数据库名
  • 用户名/密码:连接字符串中的凭证

监控告警

关键指标告警

建议设置以下告警:

指标阈值告警方式
错误率> 5%邮件/短信
支付成功率< 90%邮件
API 响应时间> 5s邮件
磁盘使用率> 80%邮件

Vercel 监控

如果使用 Vercel Pro,可以在 Dashboard 设置:

  • 函数错误率告警
  • 带宽使用告警
  • 构建失败通知

数据导出

CSV 导出

-- 导出用户数据
\copy (SELECT * FROM users) TO '/tmp/users.csv' WITH CSV HEADER;

-- 导出订单数据
\copy (
  SELECT 
    o.id, 
    u.email, 
    o.amount, 
    o.status, 
    o.created_at
  FROM orders o
  JOIN users u ON o.user_id = u.clerk_id
  WHERE o.status = 'SUCCESS'
) TO '/tmp/orders.csv' WITH CSV HEADER;

定期报告

可以使用 node-cron 创建定期报告任务:

// 每日报告示例
import { cron } from 'node-cron';

cron.schedule('0 9 * * *', async () => {
  // 生成昨日报告
  const report = await generateDailyReport();
  // 发送邮件
  await sendEmail('admin@yourdomain.com', 'Daily Report', report);
});

A/B 测试

测试场景

  1. 定价测试:不同积分套餐的转化效果
  2. UI 测试:不同界面的用户体验
  3. 模型测试:不同 AI 模型的用户偏好

数据追踪

在代码中添加追踪:

// 记录 A/B 测试分组
await db.insert(experiments).values({
  userId,
  experimentId: 'pricing_v2',
  variant: 'B',
  createdAt: new Date()
});

隐私与合规

数据脱敏

分析时注意:

  • 邮箱地址脱敏(a***@example.com
  • 不导出敏感字段(密码、API Key 等)
  • 遵守数据保留政策

GDPR 合规

  • 提供数据导出功能
  • 支持数据删除请求
  • 记录数据处理活动

最佳实践

  1. 定期备份:每日自动备份数据库
  2. 数据验证:定期检查数据一致性
  3. 性能优化:为常用查询添加索引
  4. 安全访问:限制数据库访问权限
  5. 文档记录:维护数据分析文档

相关文档

© copyright Justin 2025. All rights reserved.