Skip to main content

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:

TypeWhat it computesScope
AggregatedOne value per user, rolled up from an event table (totals, averages, "did it ever happen?")User-level
FormulaMath on numeric fields of a table (e.g. time_on_page × 10)Row-level
TextCombine and format text fields and fixed stringsRow-level
ConditionalCASE / if-then rules that bucket rows into valuesRow-level
LookupMap 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 with fields of every type

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_bpp table 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:

StatusWhat it means
DraftDefined but not active. Nothing is computed or exposed yet.
Active / ReadyThe field is live: row-level fields are part of their table's view; aggregated fields are computed by the daily run.
SuspendedTemporarily paused. The column is removed from the view (row-level) or excluded from computation (Aggregated), but the definition is kept.
ErrorActivation 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