Skip to content

Formula fields

A formula field computes a value from other fields in the same row, using a spreadsheet-style expression. It’s read-only and recomputes automatically whenever a field it references changes.

{Price} * {Qty}
IF({Status} = "Done", "✅", "…")
CONCATENATE(UPPER({First}), " ", UPPER({Last}))

Wrap a field’s name in curly braces: {Field Name}. Names with spaces are fine — {Unit Price}. In the field editor you can click a field chip to insert it.

Blank cells coerce sensibly: in a numeric context a blank counts as 0; in a text context it’s an empty string.

CloudTable infers the formula’s result type — number, text, checkbox (boolean), or date — from the expression. That type drives how the value is formatted and which filter/sort operators apply. For example, {Price} * {Qty} is a number, {A} > {B} is a checkbox, and TODAY() is a date.

Operator Meaning Example
+ - * / % Arithmetic (+ also concatenates if either side is text) {Qty} * {Price}
& String concatenation {First} & " " & {Last}
= or == Equal to {Status} = "Done"
!= or <> Not equal to {Status} <> "Done"
< > <= >= Comparison {Score} >= 80
&& Logical AND {Active} && {Paid}
|| Logical OR {Vip} || {Score} > 90
! Logical NOT !{Archived}
? : Ternary (inline if) {Score} > 50 ? "Pass" : "Fail"
Function Description
IF(condition, ifTrue, ifFalse) Branch on a condition (the unused branch isn’t evaluated).
AND(a, b, …) True if all arguments are truthy.
OR(a, b, …) True if any argument is truthy.
NOT(a) Logical negation.
XOR(a, b, …) True if an odd number of arguments are truthy.
SWITCH(subject, case1, val1, …, [default]) Match subject against cases; return the matching value, else the optional default.
TRUE() / FALSE() The boolean constants.
BLANK() An empty value.
ISBLANK(a) True if a is empty (null / undefined / "").
Function Description
SUM(a, b, …) Sum of the arguments.
AVERAGE(a, b, …) Mean of the arguments.
MIN(a, b, …) / MAX(a, b, …) Smallest / largest.
ABS(a) Absolute value.
ROUND(a, places) Round to places decimals (default 0).
ROUNDUP(a, places) / ROUNDDOWN(a, places) Round away from / toward zero.
CEILING(a) / FLOOR(a) Round up / down to an integer.
MOD(a, b) Remainder of a / b.
POWER(a, b) a raised to the power b.
SQRT(a) Square root.
Function Description
CONCATENATE(a, b, …) Join arguments into one string.
LOWER(a) / UPPER(a) Change case.
TRIM(a) Remove leading/trailing whitespace.
LEN(a) Length of the string.
LEFT(a, n) / RIGHT(a, n) First / last n characters.
MID(a, start, count) count characters starting at position start (1-based).
REPLACE(a, find, replacement) Replace every occurrence of find.
SUBSTITUTE(a, find, replacement) Same as REPLACE.
REPT(a, n) Repeat the string n times.
FIND(find, within) 1-based position of find in within, or 0 if not found.
Function Description
TODAY() Today’s date (YYYY-MM-DD).
NOW() The current date-time (ISO).
YEAR(d) / MONTH(d) / DAY(d) Parts of a date (month is 1–12).
HOUR(d) / MINUTE(d) Parts of a time.
DATEADD(d, n, unit) Add n of unit to d. Units: minute, hour, day, week, month, year (singular or plural).
DATETIME_DIFF(a, b, unit) Whole units between a and b. Units: second, minute, hour, day (default), week.
# Line total
{Qty} * {Price}
# Full name, upper-cased
CONCATENATE(UPPER({First}), " ", UPPER({Last}))
# Safe division (guard divide-by-zero)
IF({Price} = 0, 0, {Revenue} / {Price})
# Days until a due date
DATETIME_DIFF({Due}, TODAY(), "days")
# Grade bucket
SWITCH(TRUE(), {Score} >= 90, "A", {Score} >= 80, "B", "C")
  • Read-only. You can’t type into a formula cell, and the API rejects writes to it.
  • Materialized. The result is stored on the record, so filtering, sorting, grouping, API reads, and public shares all see it.
  • Same-row only. Formulas reference other fields in the same record. Aggregating across linked records (rollups) isn’t supported here.
  • No circular references. A formula can reference another formula (they recompute in dependency order), but a cycle is rejected when you save.
  • Errors → blank. If a formula can’t evaluate for a row, that cell is left blank rather than showing an error.
  • Safe by design. Formulas are evaluated with a restricted expression evaluator — there’s no eval, no property/.-access, and no way to reach the host environment. For arbitrary logic, use a Code field.