Skip to content

Matrix Field

A table inside the form. The user fills in several rows of related data without leaving the form. Each row becomes a record in a linked table.

The linked table gets a Relation field back to the parent record, named after the parent table, the first time a record with rows is saved. Use it to join the rows to their parent in Views and dashboards.

Use it for

  • A fixed checklist with the same questions for each item, such as the condition of each area of a school.
  • A short list of items with a few columns each, such as the crops harvested and their tonnes.

For rows with many questions, or rows the user completes one at a time, use a Nested Form.

Example

A School Inspection form has a Matrix Areas checked, with a row for each of Classrooms, Toilets, Library and Playground, and the columns Condition and Notes. The inspector fills in the two columns for each row. Each row becomes a record in the Facility Rows table, linked to the inspection.

Settings

Every question has a Name, a Label, a Placeholder, Help Text and Skip Logic. See Adding a question. Matrix Field adds these.

Setting Description
Table The table that holds the rows. Required. Create it first, with a field for each column.
Columns The fields of that table to show as columns. Required. Geolocation, GEO Area, ID, Auto Calculated and Matrix fields cannot be columns.
Header column The column that labels the row. Optional. It is shown first.
View For a Relation header column: narrows the records the header offers. Appears when you edit the question from the form.
Select Index of Join Table Appears when the View joins the header's table more than once.
Pre-populate header column For a Relation header column: creates one locked row per record, up to 100, so the user fills in the other columns only.

There is no Required checkbox and no Validation panel.

Validation

None. The form accepts a Matrix with no rows. A row that holds only the header value is dropped when the record is saved.

Combinations that matter

  • Pre-populated rows need a Relation header. With a Select One header the rows are set when the form is built, one per option. Rows the user adds need a header column with an open list, such as a Relation with no pre-population.
  • A View on the header limits which records become rows, or which the user can pick.
  • Number columns get a Total row on the web, for display only.
  • A calculated field on the parent cannot read the rows. Put a calculated field in the linked table to compute per row, or use a Nested Form with sum() on the parent.
  • Every save replaces the rows. The row records are deleted and created again, so their ids change. Do not link other records to a matrix row.
  • Deleting the parent does not delete the rows.

How it looks

On the web the question is a grid: a row number, a reset or menu button, the header column, then the other columns. A dashed + adds a row when the rows are not pre-populated. The row menu offers Reset row, Create copies and Delete row. With more than three columns, each row stacks as a card on a narrow screen. In the 3D app each row is a collapsed bar with its number and header value. Tap it to open the other columns. Add row adds a row when the rows are not pre-populated.

Pre-populated rows, one per area:

A Matrix Field with pre-populated rows on the web
Web
A Matrix Field with pre-populated rows in the 3D app
3D app

Rows the user adds:

A Matrix Field with rows the user adds, on the web
Web
A Matrix Field with rows the user adds, in the 3D app
3D app

The question's settings, on the web, with a Relation header column:

The settings dialogue for a Matrix Field

The data

Where What you get
The parent record A reference to each row record.
The linked table One record per row, with a Relation back to the parent, named after the parent table.
A View Join the linked table to the parent to see the rows with the parent's fields.
An export of the parent table One text column that is not readable. Export the linked table instead.
The analytics warehouse The linked table as a table of its own, with the parent's id in the back-relation column.
  • Nested Form for rows with many questions, or a picker for several existing records.
  • Relation for the header column.
  • Select One for a fixed list of rows.