Advanced Spreadsheets and Reporting Documentation
Index

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, filter Date Filter=FILTER([B6]) → the cells read B6, B7, B8, …
  • Rows layout, first cell at C4, filter Date Filter=FILTER([C3]) → the cells read C3, 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.