FlowField Regions
A FlowField region calculates one field of one table — summed over the records its filters leave — once per cell, in a run of cells down a column or across a row. Every cell shares the table, the field, the aggregate and the filters. What differs from cell to cell is where the filters' [Address] references point: they shift one step per cell, the way a formula's references shift when you fill it down.
That makes the region the natural partner of a Date Range region. Put twelve period filters down column B, a FlowField region beside them in column C with the filter Date Filter=FILTER([B6]), and the first cell reads B6, the second B7, the third B8 — one balance per period, without a single formula:
| B | C | |
|---|---|---|
| 6 | 2026-01-01..2026-01-31 |
Net change for January |
| 7 | 2026-02-01..2026-02-28 |
Net change for February |
| 8 | 2026-03-01..2026-03-31 |
Net change for March |
The idea comes from the Indicators of the financial report extensions: a table, a field, a method and a set of filters. Here the account schedule's column period is replaced by a reference that walks down the sheet.
Setup
| Field | Meaning |
|---|---|
| Range | Only the top-left cell places the region; the number of values and the layout determine the extent. |
| Table No. | The Business Central table whose field is calculated — G/L Account, Customer, Item, Cust. Ledger Entry, any table. |
| Company | The company whose records the run calculates over. Blank reads the company you are working in; accepts [Address]. One run per company beside a shared Date Range column is the quickest group comparison. See Reading Another Company. |
| Field | The numeric field to calculate. Typically a FlowField — Net Change, Balance at Date, Balance (LCY), Sales (LCY) — but any decimal or integer field works. Type its name or caption, or pick it with the lookup. Not needed for the Count aggregate. |
| Aggregate | How the records the filters leave become one number — see below. Default Sum. |
| Filters | The filters every cell applies, as a table view. The AssistEdit button opens the view builder — every field as a row, FlowFilters included (Date Filter, Global Dimension 1 Filter, Budget Filter), with type-aware value lookups and a cell picker for [Address] references. |
| Number of Values | How many cells the run calculates — at most 1000. Match it to the Date Range or label column beside the region. Default 12. |
| Layout | The shape the run forms. Columns lays the values out as a column running down the sheet; the references shift one row per cell. Rows lays them out as a row running across; the references shift one column per cell. Default Columns. This reads like the Date Range region, and the opposite way from table regions. |
| Include Headers | Starts the run with a header cell: the field's caption for Sum and First Record, Count for Count, and Average of … / Min of … / Max of … for the rest. Off by default. |
The setup dialog shows a summary of what the settings calculate. The values themselves only exist on the sheet — with [Address] references they cannot be computed inside a dialog.
Aggregates
| Aggregate | The cell shows |
|---|---|
| Sum | The field summed over every record the filters leave. This is the FlowField reading: a filter isolating one G/L account gives that account's balance; a range 1000..1999 gives the range's total. On a plain field the sum takes the table's SIFT shortcut when one exists. |
| Count | The number of records the filters leave. Needs no field. |
| Average | The field's average over the records. Zero when no record matches. |
| Min / Max | The smallest / largest value of the field among the records. |
| First Record | The field's value on the first record the filters leave — for filters that isolate exactly one record. |
FlowFields are calculated per record as the region walks the filtered set. A filter that leaves one account per cell is instant; a filter that leaves the whole chart of accounts calculates the FlowField for every account, twelve times over. Narrow the filter when the run feels slow, and keep the whole-table cases for tables with a SIFT-indexed plain field.
Shifting References
Every [Address] token in the filters is a relative reference by default. The region shifts it along the run before resolving it:
- Columns layout, first cell at
C6, filterDate Filter=FILTER([B6])→ the cells readB6,B7,B8, … - Rows layout, first cell at
C4, filterDate Filter=FILTER([C3])→ the cells readC3,D3,E3, …
A $ pins a part of the reference, exactly as in a formula:
| Token | Down a column | Across a row |
|---|---|---|
[B6] |
B6, B7, B8 | B6, C6, D6 |
[B$6] |
B6, B6, B6 | B6, C6, D6 |
[$B6] |
B6, B7, B8 | B6, B6, B6 |
[$B$6] |
B6, B6, B6 | B6, B6, B6 |
Pin the references that name what is calculated — an account picked by a ?FIELD slicer, a dimension from a ?DIMENSION slicer — and leave the reference that names which period relative:
WHERE(No.=FILTER([$C$2]),Global Dimension 1 Filter=FILTER([$C$3]),Date Filter=FILTER([B6]))
The resolved values follow the same rules as every cell-driven filter: numeric cells arrive without thousand separators, date and range cells in the culture-independent 2026-01-31 form, ?FIELD slicers as their raw key. A [token] that is not a cell address is left untouched. When rows or columns are inserted or deleted, the tokens shift along with the cells they point at — the run keeps reading the same period column.
Two Date Range modes pair with a FlowField run:
- Date Range Filter — one text cell per period,
2026-01-01..2026-01-31. Filter:Date Filter=FILTER([B6]). - Two Dates — start in B, end in C. Filter:
Date Filter=FILTER([B6]..[C6]).
Refresh and Drill-Down
Calculating N aggregates over live tables is not free, so the region is cached like a pivot: the values are kept until a setting changes, until any cell a reference points at changes (a slicer pick, a Date Range moving with its start date, an edited fixture), or until you press the region's refresh button. A write-back through the sheet also drops the cache, so posted values show on the next recalculation.
Ctrl+click any value to drill down: the source table's list page opens filtered to exactly the records behind that cell — the region's filters with that cell's references resolved.
The values register as numeric cells, so formulas, charts, KPI cards and conditional formats read them like any number: =SUM(C6:C17), a column chart over C6:C17 with categories B6:B17.
Examples
Monthly net change of an account range beside a Date Range. Date Range at B6: Start <-CY>, Interval <1M>, 12 dates, Date Range Filter, Columns. FlowField at C6: table G/L Account, field Net Change, Sum, filters WHERE(No.=FILTER(40000..49999),Date Filter=FILTER([B6])), 12 values, Columns.
Balance at each month end, account from a slicer. ?FIELD(G/L Account, No., Name)-> in C2. Date Range at B6 in Two Dates mode (start in B, end in C is taken by the region, so place the FlowField at D6). FlowField: field Balance at Date, filters WHERE(No.=FILTER([$C$2]),Date Filter=FILTER(..[C6])).
Customer count per aging bucket across a row. Bucket end dates typed across C3:F3; FlowField at C4 in Rows layout: table Customer, aggregate Count, filters WHERE(Date Filter=FILTER(..[C3]),Balance Due (LCY)=FILTER(>0)), 4 values.
Twelve months of sales quantity per item picked by a slicer. ?FIELD(Item, No., Description)-> in C2; Date Range filters down B6; FlowField at C6: table Item, field Sales (Qty.), filters WHERE(No.=FILTER([$C$2]),Date Filter=FILTER([B6])). Add a ?RANGE-> period slicer in E2 and give the Date Range the Start Date [E2] — the twelve months then begin wherever the user's period does.
Errors
The region shows an error badge instead of values when:
- no table is selected, or the field is missing for an aggregate other than Count;
- the field is not numeric, is a FlowFilter, or no longer exists on the table;
- the number of values is 0 or above 1000;
- a resolved filter is not a valid filter expression for its field — the badge carries the platform's message.