@ -11,6 +11,8 @@ The Low-Code expression language is a provider-safe scalar profile used by virtu
Expressions are not JavaScript. They cannot contain arbitrary code, SQL, network calls, browser APIs, side effects, or unsupported Power Fx table and record operations.
An expression can contain up to 4096 characters.
> **Preview:** The language profile is preview functionality. The supported syntax and function set may change before general availability.
## Values and field references
@ -105,6 +107,13 @@ For a calculated property, the expression is expanded into the EF Core query. It
For an ordinary property mapping that uses **Formula** existing-data backfill, the same scalar profile is compiled into a provider-side update that initializes existing rows once. The mapped property then stores the result; this is separate from a virtual calculated property.
During JSON-to-database mapping, use `Self` to read the property's current JSON value before it is moved to the database column:
```text
Coalesce(Self, "Unknown")
Self & " migrated"
```
Related-record aggregates are not written inside a formula expression. Create a [Rollup Property](formula-properties.md#create-a-rollup-property) for `Count`, `Sum`, `Average`, `Min`, or `Max` over related records.
@ -49,6 +49,8 @@ Client applications cannot set a calculated property. Enable **Server only** whe
A rollup evaluates a correlated aggregate over related records. For example, an `Order` can expose the sum of `OrderItem.LineTotal` values when `OrderItem.OrderId` is a foreign key to `Order`.
`Sum` is a rollup operation, not a function that can be written inside a scalar formula. The relationship is evaluated in the reverse direction: the source entity contains the foreign key that points to the entity receiving the rollup.
1. Open **Add Property** and select **Rollup Property**.
2. Select the **Source Entity** that contains the related records.
3. Select the **Relation Field** whose foreign key points to the current entity.
@ -56,7 +58,14 @@ A rollup evaluates a correlated aggregate over related records. For example, an
5. For every operation except `Count`, select the **Value Field**.
6. Review validation and select **Create Rollup Property**.
`Count` returns a Long value and does not use a value field. `Sum` and `Average` require a numeric value field. `Min` and `Max` preserve a compatible scalar type. A rollup value may be a normal field or a formula property, but it cannot be another rollup.
| Operation | Value field | Result |
| --- | --- | --- |
| `Count` | Not used | Long |
| `Sum` | Int, Long, Decimal, or Money | Preserves a compatible numeric range |
| `Average` | Int, Long, Decimal, or Money | Decimal, or Money for a Money value |
| `Min` / `Max` | String, Int, Long, Decimal, Money, Boolean, Date, or DateTime | Preserves a compatible scalar type |
A rollup value may be a normal field or a formula property, but it cannot be another rollup. Formulas can reference other calculated properties, including rollup results, and the complete dependency graph is validated for cycles and provider translation.
@ -109,8 +109,8 @@ The screens below follow that common designer flow from data to page setup to fo



For virtual fields calculated from the current record, related records, or related-record aggregates, see [Calculated and Rollup Properties](formula-properties.md). For the provider-safe scalar syntax used by calculated properties and formula backfills, see the [Low-Code Expression Language](expression-language.md) reference.