TapDB 埋点入门指南

从零开始掌握游戏数据分析

前言

你是否曾想过:玩家在哪个关卡弃坑最多?广告收益到底怎么样?新手引导有多少人跳过?这些问题的答案,都藏在埋点数据里。今天我们就来聊聊 TapDB 埋点那些事儿,让你从数据小白变身分析达人!


一、什么是埋点?为什么要埋点?

1.1 通俗理解

埋点就是在游戏里装"监控摄像头"

想象一下,你在游戏里装了无数个隐形摄像头:

这些摄像头记录的数据,就是埋点数据。

1.2 埋点能帮我们做什么?

场景对比:

场景 没有埋点 有埋点
关卡难度 感觉第3关太难了 第3关通过率只有32%,需要调整
广告收益 好像没人看广告 双倍收益广告最受欢迎,占65%
新手引导 引导应该没问题吧 43%的玩家在第5步跳过引导
一句话总结:埋点让你的决策有数据支撑,而不是靠感觉。

二、埋点设计:如何设计一个好的埋点方案?

2.1 核心原则

原则一:能合并就合并

很多新手喜欢一个动作一个事件,结果埋了几百个事件,自己都记不住。

❌ 错误示范:

AdSignIn        → 补签广告
AdDoubleIncome  → 翻倍广告
AdAddGuest      → 加客广告
AdGetRes        → 资源广告
...(还要继续吗?)

✅ 正确示范:

AdWatch(一个事件搞定)
  └── ad_type: sign_in / double_income / add_guest / get_res

ad_type 这个参数区分不同类型,一个事件解决所有广告场景!

原则二:属性名要统一

同一个东西,到处用不同的名字,分析时会崩溃。

❌ 错误示范:

事件A用:levelId、level_id、LevelID
事件B用:stageId、stage_id

✅ 正确示范:

所有事件统一用:level_id

原则三:命名要有规律

类型 命名风格 示例
事件名 PascalCase StartLevel、AdWatch、GuideEvent
属性名 snake_case level_id、ad_type、bonus_income

三、代码怎么写?实战教学

3.1 最重要的规则:井号前缀

这是 TapDB 的特殊要求:自定义属性必须加井号前缀!
场景 需要加井号
CSV 导入后台 不需要
代码上报数据 必须加

✅ 正确写法:

{ "#level_id", "level_1" }
{ "#ad_type", "double_income" }

❌ 错误写法(数据会上报,但属性无法识别):

{ "level_id", "level_1" }

3.2 常见埋点代码示例

1. 简单事件(无参数)

// 用户登录成功
Analytics.Event("UserLogin");

// 游戏加载完成
Analytics.Event("FinishLoading");

2. 带参数的事件

// 开始关卡
Analytics.Event("StartLevel", new Dictionary()
{
    { "#level_id", "level_1" }
});

// 关卡详情(多参数)
Analytics.Event("LevelDetail", new Dictionary()
{
    { "#level_id", "level_1" },
    { "#result", "pass" },        // pass 或 fail
    { "#duration", 120 },         // 时长(秒)
    { "#income", 1000 }           // 收入
});

3. 复合事件(用 action 区分)

// 拼图游戏 - 开始
Analytics.Event("JigsawEvent", new Dictionary()
{
    { "#action", "start" },
    { "#jigsaw_id", 1 }
});

// 拼图游戏 - 完成
Analytics.Event("JigsawEvent", new Dictionary()
{
    { "#action", "finish" },
    { "#jigsaw_id", 1 }
});
看到没?同一个事件,用 action 参数区分不同状态,清晰又简洁!

四、后台操作:CSV 批量导入

4.1 准备 CSV 文件

TapDB 支持批量导入事件配置,格式如下:

event_name,event_desc,status,remark,bind_prop_names
StartLevel,开始关卡,display,关卡开始时触发,level_id
LevelDetail,关卡详情,display,每局结束时触发,level_id|result|duration|income
AdWatch,观看广告,display,观看广告时触发,ad_type|level_id|bonus_income

4.2 字段说明

字段 必填 说明
event_name 事件名(PascalCase)
event_desc 事件描述
status display(显示)/ hide(隐藏)
remark 备注说明
bind_prop_names 绑定的属性,多个用竖线分隔

4.3 上传步骤

  1. 登录 TapDB 后台
  2. 选择项目 → 事件管理 → 批量操作
  3. 上传 CSV 文件
  4. 确认导入
注意:CSV 里的属性名不需要加井号!

五、数据查询:SQL 实战

数据上报后,怎么查?用 SQL!

5.1 基础查询

-- 查询最近两天的关卡事件
SELECT *
FROM hive_saas1.tapdb."events"
WHERE "$part_date" IN ('2026-03-01', '2026-03-02')
  AND name IN ('LevelStart', 'LevelDetail')
LIMIT 10000

5.2 查询指定属性

SELECT
  name,
  data."#level_id" AS level_id,
  data."#result" AS result,
  data."#duration" AS duration
FROM hive_saas1.tapdb."events"
WHERE "$part_date" IN ('2026-03-01', '2026-03-02')
  AND name = 'LevelDetail'
重点:属性要用 data."#属性名" 格式!

5.3 计算关卡通过率

SELECT
  data."#level_id" AS level_id,
  SUM(CASE WHEN data."#result" = 'pass' THEN 1 ELSE 0 END) AS pass_count,
  SUM(CASE WHEN data."#result" = 'fail' THEN 1 ELSE 0 END) AS fail_count,
  ROUND(
    SUM(CASE WHEN data."#result" = 'pass' THEN 1 ELSE 0 END) * 100.0 / COUNT(*),
    2
  ) AS pass_rate
FROM hive_saas1.tapdb."events"
WHERE "$part_date" BETWEEN '2026-03-01' AND '2026-03-07'
  AND name = 'LevelDetail'
GROUP BY data."#level_id"

运行结果示例:

level_id pass_count fail_count pass_rate
level_1 8500 1500 85.00%
level_2 7200 1800 80.00%
level_3 4500 3500 56.25%
一看就知道:第3关太难了,通过率才56%,该调整了!

5.4 查询广告类型分布

SELECT
  data."#ad_type" AS ad_type,
  COUNT(*) AS event_count
FROM hive_saas1.tapdb."events"
WHERE "$part_date" BETWEEN '2026-03-01' AND '2026-03-07'
  AND name = 'AdWatch'
GROUP BY data."#ad_type"
ORDER BY event_count DESC

5.5 常用字段速查表

字段 说明
"$part_date" 时间分区(查询必加)
name 事件名称
distinct_id 用户唯一标识
data."#xxx" 自定义属性

六、避坑指南

6.1 常见错误

错误 后果 解决方案
忘记加井号前缀 属性无法识别 代码上报时必须加井号
属性名不统一 无法跨事件分析 统一使用 snake_case
事件过度拆分 事件数量爆炸 用 action 参数合并
埋点时机错误 数据不准确 在正确的业务节点触发

6.2 最佳实践

  1. 埋点前先设计:先列出需要分析的问题,再设计埋点方案
  2. 命名要有文档:维护一份属性字典,团队共用
  3. 上线前先测试:在后台验证数据是否正确上报
  4. 定期清理:废弃的事件和属性及时清理

七、总结

速记口诀

事件命名 PascalCase    属性命名 snake_case
代码上报加井号          CSV 导入不加井号
相似事件用 action       属性复用要统一
查询记得加分区          数据驱动做决策

7.2 学习路线

阶段 目标
入门 先学会基本的 Event 上报
进阶 设计复合事件,用 action 区分
高级 用 SQL 分析数据,指导产品决策

参考资料