Skip to content

Defining Your Data Model

Register warehouse tables under Data Management → Tables so the rest of the team can build experiments, metrics, and audiences on top of them.

ABetterChoice does not maintain its own copy of your data — it reads directly from the warehouse you connected (today, BigQuery). Each registered table tells the platform "this BigQuery table plays a specific role in my experiment data model."

Data Management → Tables list with one Assignment Table, one Fact Table, and one User Property Table registered

The three table types

TypeRoleRequired to run experiments?
Assignment TableRecords who saw which experiment variant, and when. The single source of truth for exposures.Yes — at least one is needed before an experiment can read results.
Fact TableRecords what users did (events, transactions, durations, counts). Metrics are defined on top of one fact table.Yes — needed once you start measuring metrics beyond cumulative exposures.
User Property TableRecords who users are — country, app version, lifecycle segment, paying status. Powers Dimensions and Features.Optional — only if you want dimension slicing or feature-based HTE analysis.

The three types are joined on a shared user identifier column. ABetterChoice never moves rows between them; queries push down into the warehouse and join in place.

Where to find this in the console

Open Data Management → Tables. The list view shows every registered table with these columns:

  • Name — the display name you gave the table on registration.
  • Source — currently always BigQuery (see Connecting Your Warehouse).
  • TypeAssignment Table, Fact Table, or User Property Data Source.
  • Source Data — the underlying BigQuery DataSet ID / Table ID.
  • Owner / Created at — the registering user and timestamp.
  • StatusActive or archived.
  • ActionsArchive only; archived tables surface in the same list.

A search box (Search by name/owner), a Documentation link, and a New Table button sit above the list.

Naming consistency

The list page labels the third type as User Property Data Source, but the New Table dialog and the table detail page label the same type as User Property Table. The two labels refer to the same object — this skill, the docs, and the sidebar all use User Property Table as the canonical name.

How a table becomes part of your model

Click New Table and fill in the form. The dialog adapts to the Table Type you select:

New table dialog with the shared fields visible

  1. Pick the source. Data Warehouse is fixed at BigQuery; pick DataSet ID, then Table ID (the second dropdown is filtered by the first). Name defaults to the table ID and is editable. Owner defaults to you and cannot be cleared.
  2. Choose a Table Type. Available values: Assignment Table, Fact Table, User Property Table.
  3. Map the join column in User ID Field — the column ABetterChoice uses to identify the experiment subject across the three table types. For Assignment Tables, you also map an Experiment Field (e.g. exp_group_id).
  4. Declare the time partition. Pick Partition Field and Partition Field Type. The supported types are Date, Timestamp, and Datetime. Optionally set Event Time Field if your event time differs from the partition.
  5. Confirm the schema. ABetterChoice reads the BigQuery schema and lists every column with its detected type. Use the Refresh link if upstream columns have changed since you opened the dialog.

Click Confirm to register the table. After registration the table appears in selectors when you create experiments, metrics, dimensions, or features.

Worked example (Demo project 6666)

The Demo project illustrates the data model with three sibling tables, all built on the same abc_demo BigQuery dataset and partitioned daily by ds (Date):

  • Assignment Tableabc_exp_exposure_date_partition. One row per (user, exp_group) exposure.
  • Fact Tableabc_user_fact_date_partition. A user-behavior event log covering game click, level, and ad events.
  • User Property Tableabc_user_property_date_partition. A daily user-attribute snapshot covering string, integer, and float user properties for targeting and analysis.

When an experiment is created, you pick the Assignment Table as the assignment source; metrics are defined against the Fact Table; dimensions and features read from the User Property Table.