Back to Reports & Documents

Data Tables: Repeating Sections in Your Templates

Define per-appraisal tables (comparison rows, weather events, roof slopes) that loop in your Word templates with auto-totaled currency columns.

Intermediate12 min readUpdated 2026-05-03

Every appraisal report you write has a comparison table somewhere: coverages on the left, opposing estimate next to award amounts, differences in the last column. The number of rows changes case to case (sometimes it is 3 coverages, sometimes 8), and you are tired of building a fresh Word table for every file and adding up the columns by hand.

Data Tables are how you stop doing that. You design the columns once at the workspace level, then on each appraisal you just add the rows the case needs. The totals math is automatic. The Word template loops over the rows for you. This is power-user territory, but if you find yourself rebuilding similar tables on every report, the time it takes to set this up pays back inside a week.

This article walks through the full lifecycle: defining the table, entering rows on a case, referencing it in your Word template, and the Carbone token patterns that make it loop and total correctly.

When to use Data Tables vs. Custom Fields

Data Tables are for repeating, homogeneous data (multiple coverages, multiple weather events, multiple line items). Custom Fields are for single values per appraisal (a deductible amount, a policy form, an inspection date). If you need a list, use a Data Table. If you need exactly one value, use a Custom Field.

Anatomy of a Data Table

Every Data Table has three pieces — the workspace-level definition, the per-appraisal records, and the rendered output:

PieceWhere It LivesWho Authors It
Definition (table name, columns)Settings → Data TablesYou, once per workspace
Records (the actual row data)Each appraisal's Report Details tabYou (or staff), per case
Output (looped table in PDF)Generated when you render the templateAutomatic

Naming: Token Name vs. Display Label

Each Data Table has two names and they serve different purposes. Get this right when you create the table — changing the token name later breaks any templates that reference it.

FieldFormatPurposeExample
Name (token)lowercase, camelCase, no spacesWhat your Word template referencescomparisonRows
Display labelAnything human-readableWhat appears in the dashboard and (if you use it) as the section header in your templateAward Comparison Table

Renaming the display label is safe

The display label can change anytime — it's just a string. Your templates that use {d.tableLabel.<name>} for section headers will pick up the new label on the next render. Only the token name is load-bearing.

Step 1: Create the Definition

1

Go to Settings → Data Tables

You'll see a list of existing tables (if any) and a New Data Table button.

2

Click "New Data Table"

Enter a Name (token) and Display label. The form previews how the token will look — for a name comparisonRows, the loop token is {d.comparisonRows[i].fieldName}.

3

Add columns

Click Add column for each piece of data per row. Each column has a name (token), label, and field type (text, number, currency, date, textarea, dropdown, boolean). Currency and number columns auto-total at render time.

4

Save

The definition is now available on every appraisal in the workspace.

Step 2: Enter Rows on an Appraisal

Open any appraisal, go to the Report Details tab. Each active Data Table renders as a card in its own section. Click Add row, fill in the columns, blur to save. Reorder by dragging the grip handle. Delete rows with the trash icon.

Auto-totals at the bottom of the card

The card shows a Totals row beneath the records, summing every currency and number column. This is a preview — the exact same numbers flow into your Word template at render time via {d.<tableName>Totals.<columnName>}.

Step 3: Reference It in Your Word Template

In your .docx template, the Data Table renders as a Carbone loop. Build a regular Word table, then put the loop tokens in two adjacent rows of the same table:

Row 1 (the iterating row):
{d.comparisonRows[i].coverage}  |  {d.comparisonRows[i].awardRcv}  |  {d.comparisonRows[i].differenceRcv}

Row 2 (the loop continuation marker — same content with [i+1]):
{d.comparisonRows[i+1].coverage}  |  {d.comparisonRows[i+1].awardRcv}  |  {d.comparisonRows[i+1].differenceRcv}

Row 3 (the totals row — uses the auto-summed sibling):
Total  |  {d.comparisonRowsTotals.awardRcv}  |  {d.comparisonRowsTotals.differenceRcv}

Why two rows with [i] and [i+1]

Carbone needs two adjacent rows to know it's looping. The first row uses [i] and the second uses [i+1]. At render time, Carbone replaces both rows with one row per record. If you only put [i], Carbone won't loop — you'll get a single row of literal text.

Token Reference

Token PatternWhat It Resolves ToUse In
{d.<tableName>[i].<column>}Field value on row i (loop body)Word table row 1
{d.<tableName>[i+1].<column>}Field value on row i+1 (loop continuation)Word table row 2
{d.<tableName>Totals.<column>}Sum of every numeric/currency value in that column across all rowsAnywhere — totals row, summary text, etc.
{d.tableLabel.<tableName>}The Display label as you set it in SettingsSection headings — change the label, headings update everywhere
{d.tableEnabled.<tableName>}true if this table is enabled on the appraisal, false if skippedWrap conditional sections in {d.tableEnabled.x:showBegin}…:showEnd
{d.<tableName>[where <col>='<value>'].<col>}Single value from the row matching the filter — useful inside Narrative Snippets and computed defaultsSnippet bodies, formula filters

Worked Example: Award Comparison Table

You're writing a report that needs a 7-column comparison: Coverage, Original Settlement, Award RCV, Award ACV, Demand RCV, Firm Estimate, Difference. On a typical case there are 3 rows (Dwelling, OL, Coverage B), but it varies — sometimes 5, sometimes just 1.

  1. Settings → Data Tables → New Data Table. Name: comparisonRows. Label: Award Comparison Table.
  2. Add 7 columns: coverage (text), originalSettlement (currency), awardRcv (currency), awardAcv (currency), demandRcv (currency), firmEstimate (currency), differenceRcv (currency). Save.
  3. On every appraisal, the Award Comparison Table card now appears on the Report Details tab. Click Add row, fill in the values for that case.
  4. In your Word template, build a 7-column table. Put the loop tokens with [i] in the first body row and [i+1] in the second. Add a totals row at the bottom referencing {d.comparisonRowsTotals.awardRcv}, {d.comparisonRowsTotals.awardAcv}, etc.
  5. Generate. The PDF gets one row per record plus the totals row, with all the math done for you.

Filter Expressions: Pulling One Value Out

Sometimes you don't want the whole loop — you want a single cell value. Use a where filter:

# In a Narrative Snippet body or anywhere in your template:
The Dwelling RCV award is {d.comparisonRows[where coverage='Coverage A'].awardRcv}.
Loss of Use was settled at {d.comparisonRows[where coverage='Coverage D'].awardAcv}.

The filter resolves to one matching row's field. If multiple rows match, you get the first; if none match, you get an empty value.

Reserved Names

You can't name a Data Table after one of AwardLettr's built-in tokens (insuredName, claimNumber, custom, snippet, totalRcv, etc.) — the editor will reject the name. You also can't end a name in "Totals" because that suffix is auto-derived for the column-sum sibling.

Common Tables Customers Build

  • Coverage comparison: coverage, originalSettlement, awardRcv, awardAcv, demandRcv, firmEstimate, differenceRcv
  • Weather events: date, eventType, severity, distance, source
  • Roof slopes: slope, pitch, area, condition, action
  • Material samples: room, material, manufacturer, lotNumber, condition
  • Document review checklist: documentName, dateReceived, reviewedBy, notes
  • Witness statements: name, role, dateInterviewed, summary
Suggest an editLast updated 2026-05-03
Data Tables: Repeating Sections in Your Templates | AwardLettr Docs