事实表
Fact Table(事实表) 记录"用户做了什么" —— 事件、交易、时长、广告曝光、内购金额。ABetterChoice 中每个指标都基于一张或多张事实表定义,所以注册事实表是测算"累计曝光"以外任何指标的前置条件。
在控制台的位置
Data Management → Tables 列出所有已注册的表,Type 为 Fact Table 的行就是本页面描述的对象。点击行可进入表的详情页。

表单字段
打开 New Table(或已有事实表的详情页)。当 Table Type 为 Fact Table 时,表单需要填写:
| 字段 | 说明 |
|---|---|
Data Warehouse | 当前固定为 BigQuery。 |
DataSet ID | 源表所在的 BigQuery 数据集。 |
Table ID | 要注册的 BigQuery 表,下拉受 DataSet ID 过滤。 |
Name | 在 ABetterChoice 中的展示名,默认与 Table ID 一致。 |
Owner | 默认为当前用户且不可清空。 |
Description (Optional) | 自由文本。 |
User ID Field | ABetterChoice 用来与分流表 User ID Field join 的列。 |
Partition Field | ABetterChoice 用来按天扫描事件数据的列。 |
Partition Field Type | Date、Timestamp、Datetime 三选一,与列在仓库中实际存储时间的形式保持一致。 |
Event Time Field (Optional) | 当事件时间与分区列不同时,填写一个独立的事件时间列。主要用于 MAB 实验 的指标按事件时间精准过滤用户数据。 |
事实表 没有 Experiment Field —— 该字段是分流表特有的。表单下方的 Schema 面板会列出 ABetterChoice 在 BigQuery 侧检测到的所有列与类型,可点击 Refresh 重读上游 schema。
真实事实表的样子
Demo 项目 6666 注册的事实表是 abc_user_fact_date_partition —— 一张覆盖游戏点击、关卡、广告事件的用户行为日志。它的注册配置:
User ID Field=user_idPartition Field=ds,Partition Field Type=DateEvent Time Field=event_time(事件级精确时间,独立于按日的分区列)
它的 schema 自然分成四类:
| 分组 | 列 | 典型用途 |
|---|---|---|
| 身份与时间 | user_id(string)、ds(date)、event_time(string)、event_code(string) | 主体识别、分区裁剪、事件分类。 |
| 点击事件 | click_target、click_scene(string);click_position_x、click_position_y(float);click_count(integer) | 用于 UI 实验的计数与位置分析。 |
| 关卡事件 | level_id(integer)、level_name、level_difficulty、level_result(string);level_duration_seconds(float);level_score、level_star、level_retry_count(integer) | LiveOps 关卡调优指标。 |
| 广告事件 | ad_unit_id、ad_type、ad_placement、ad_network(string);ad_revenue_usd、ad_ecpm(float);ad_is_clicked(integer) | 广告变现实验。 |
您不需要照抄这些列名 —— 关键的是表单中的角色绑定。不同团队的事实表形态各不相同,平台读什么取决于您指向什么。
指标如何消费一张事实表
事实表是 指标 的指标单位。创建指标时,您先选一张事实表作为来源,然后选择:
Metric Type(用户占比、均值、用户数、比率、求和)—— 详见 指标类型。- 用于计算公式的数值列(例如
ad_revenue_usd表示广告收入、level_duration_seconds表示通关耗时)。 - 限定事件或其他过滤条件。
多个指标可以共享同一张事实表。
编辑与归档
详情页以只读为主,Update 按钮在没有改动时禁用;唯一的破坏性操作是列表页的 Archive,归档对依赖指标的传导详见 表生命周期。