Skip to content

Formula

Transform

Append a new column whose value is the result of evaluating a per-row expression in CEL — Google’s Common Expression Language. Each input row is passed to the expression as the evaluation context, with column names available as variables. Use it to derive computed fields (totals, ratios, formatted strings), conditional flags, or normalized values from existing columns.

Formula is a streaming transform: each input row is evaluated independently and emitted with one extra column appended. CEL expressions are parsed once when the transform starts and reused per row, so per-row evaluation is fast even on large inputs.

The CEL flavor used is @marcbachmann/cel-js. The transform additionally registers cross-type arithmetic operators (mixed int and dyn<double>) so that integer literals work naturally with column values that arrive as JavaScript numbers, e.g. Amount * -1 does not require a cast. See apps/web/src/transforms/computed-column/logic.ts:23-38.

If either the expression or the output column name is empty, rows pass through unchanged.

Input: One tabular data connection. Output: The same columns plus the new computed column appended at the right.

OptionTypeDescription
expressionstringCEL expression evaluated once per row. Required to compute a value.
outputColumnstringName of the column to append. If a column with this name exists, it is overwritten. Required to compute a value.

Both default to empty string. With either empty, the transform is a passthrough.

Inside the expression, columns are available as bare identifiers. Examples: price, status, signup_year.

For columns whose names contain spaces, hyphens, or other non-identifier characters, use FileBender’s bracket-syntax: [Column Name]. The transform rewrites bracketed references to internal safe identifiers before parsing, so [First Name] + " " + [Last Name] works. See apps/web/src/transforms/computed-column/logic.ts:42-64.

The bracket-syntax is a FileBender extension, not part of CEL. It runs as a preprocessor before the expression is parsed.

You have an order line items table and want a total column derived from quantity * price.

Before:

productquantityprice
Widget310
Gadget125
Doohickey54

Configuration: expression: quantity * price, output column: total.

After:

productquantitypricetotal
Widget31030
Gadget12525
Doohickey5420

The source table has column names with spaces. You want a full_name column built from them.

Before:

First NameLast Nameemail
AliceAnderson[email protected]
BobBrown[email protected]
CarolChen[email protected]

Configuration: expression: [First Name] + " " + [Last Name], output column: full_name.

After:

First NameLast Nameemailfull_name
AliceAnderson[email protected]Alice Anderson
BobBrown[email protected]Bob Brown
CarolChen[email protected]Carol Chen

You want a flagged column that is true when amount exceeds 1000, otherwise false.

Before:

customeramount
Acme Corp250
Beta Inc1500
Gamma LLC800
Delta Co3000

Configuration: expression: amount > 1000 ? true : false, output column: flagged.

After:

customeramountflagged
Acme Corp250false
Beta Inc1500true
Gamma LLC800false
Delta Co3000true
  • The bracket syntax is a FileBender extension, not part of CEL. It is a textual preprocessor: every [Column Name] token is replaced with a safe internal identifier before the expression is handed to the CEL parser. Nested brackets and dynamic column-name strings are not supported. Mixing styles is fine: price * [Tax Rate] works. See apps/web/src/transforms/computed-column/logic.ts:42-64.
  • Per-row evaluation errors drop the offending row. When CEL evaluation throws for a row (e.g. dividing by zero, accessing a column that doesn’t exist on that specific row), the transform yields an error result for that row. Downstream transforms see the row as missing rather than as null. See apps/web/src/transforms/computed-column/logic.ts:137-143.
  • A bad expression silently drops every row. If the CEL expression itself fails to parse, every row through the transform yields an error result, so downstream transforms receive nothing. The configuration UI surfaces the parse error, but if the flow auto-runs from a saved config that no longer parses (e.g. a referenced column was renamed upstream), the flow will appear to drop all rows. See apps/web/src/transforms/computed-column/logic.ts:95-112.
  • Add Column — append a static value (no expression).
  • Replace Values — rewrite values in an existing column rather than appending a new one.
  • Change Type — convert strings to numbers / booleans / dates before using them in arithmetic.
  • CEL Expression Language — full syntax reference for operators, built-in functions, and column reference styles.