Field Builder
What it does
The Field Builder lets you create custom calculated fields on top of your data — without writing SQL. Every field you define becomes a real column your team can use across BPP: as a filter when building audiences, as a value input when configuring signals, and in persona exploration.
It supports five field types, grouped in two scopes:
| Type | What it computes | Scope |
|---|---|---|
| Aggregated | One value per user, rolled up from an event table (totals, averages, "did it ever happen?") | User-level |
| Formula | Math on numeric fields of a table (e.g. time_on_page × 10) | Row-level |
| Text | Combine and format text fields and fixed strings | Row-level |
| Conditional | CASE / if-then rules that bucket rows into values | Row-level |
| Lookup | Map a field's values through a mapping table (inline or uploaded CSV) | Row-level |
Examples of what you can compute:
- Total number of orders in the last 90 days (Aggregated).
- Average order value over the last year (Aggregated).
- A margin per transaction:
price − cost(Formula). - A tidy display name:
first_name + " " + last_name, uppercased (Text). - An engagement tier: "high" when sessions > 10, "medium" when > 3, otherwise "low" (Conditional).
- A city name derived from a postal code, via an uploaded CSV (Lookup).
The Field Builder list — every field type in one place, with visibility, Active toggle and status.
Row-level vs user-level fields
The two scopes behave differently, and it helps to know what happens behind the scenes:
- Row-level fields (Formula, Text, Conditional, Lookup) add a virtual column to their source table. When you activate one, BPP builds a companion view of the table (named
<table>_calc_bpp) that contains all the original columns plus your calculated ones, and transparently points the platform at it. No data is copied and the source table is never modified. The value is computed on the fly for every row. - Aggregated fields roll an event table up to one value per user. They are materialized into the
user_features_bpptable by a nightly job, so their values refresh once a day.
Note: row-level fields are available immediately after activation; aggregated fields are available after their first computation run.
Why it matters for marketers
Without calculated fields, you can only filter audiences on the attributes that already exist in your tables. The Field Builder lets you filter and act on what users have actually done and on derived values your tables don't contain:
- "Users who placed 3 or more orders in the last 6 months" → loyalty targeting (Aggregated).
- "Users with average order value above €150" → premium up-sell audience (Aggregated).
- "Users whose region — derived from postal code — is Lombardia" → geo targeting (Lookup).
- "Transactions with margin above €20" → value-based signals (Formula).
- "Users in the 'high engagement' tier" → tiered messaging (Conditional).
You can also use field values in your conversion signals — for example, sending a user's total lifetime revenue as the conversion value, rather than a fixed number.
Field lifecycle
Every field is created as a Draft and moves through a simple lifecycle:
| Status | What it means |
|---|---|
| Draft | Defined but not active. Nothing is computed or exposed yet. |
| Active / Ready | The field is live: row-level fields are part of their table's view; aggregated fields are computed by the daily run. |
| Suspended | Temporarily paused. The column is removed from the view (row-level) or excluded from computation (Aggregated), but the definition is kept. |
| Error | Activation or computation failed. The error message is shown on the field. |
Allowed transitions:
- Draft → Active — activate from the list (Active toggle) or the editor.
- Active ⇄ Suspended — pause and resume at any time; suspending a row-level field removes its column from the view immediately.
- Error → Draft — simply edit the field: saving a change to a field in Error automatically resets it to Draft (the error belonged to the previous definition), so you can fix and re-activate it.
Note: the field type cannot be changed after creation — create a new field instead.
Aggregated fields have a few extra states of their own (Running, Complete, Partial Complete) reflecting the daily computation — see Aggregated fields.
Visibility
Each field has a Visible in platform toggle: it controls whether the field is exposed in audiences, signals and persona. Turn it off to hide experimental or deprecated fields from the pickers without deleting or suspending them — the column keeps existing and computing.
Where fields appear
Once a field is Active (and visible):
- Audiences — the field appears as a filterable condition (e.g. "Total Orders is greater than 5"). Note that audience filters operate at user level: row-level fields defined on user tables are directly filterable, while a row-level field on an event table is not — to filter audiences on event behaviour, use an Aggregated field, which rolls events up to one value per user.
- Signals — numeric fields can be used in the signal value formula (e.g.
1 × TotalRevenue). - Persona — the field enriches persona exploration on its table.
Learn more
- Row-level field types — Formula, Text, Conditional and Lookup in detail, including CSV upload rules and validation.
- Aggregated fields — aggregation types, event filters and the daily computation.
- Creating & managing fields — step-by-step guide, sample preview and troubleshooting.