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.
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
Anatomy of a Data Table
Every Data Table has three pieces — the workspace-level definition, the per-appraisal records, and the rendered output:
| Piece | Where It Lives | Who Authors It |
|---|---|---|
| Definition (table name, columns) | Settings → Data Tables | You, once per workspace |
| Records (the actual row data) | Each appraisal's Report Details tab | You (or staff), per case |
| Output (looped table in PDF) | Generated when you render the template | Automatic |
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.
| Field | Format | Purpose | Example |
|---|---|---|---|
| Name (token) | lowercase, camelCase, no spaces | What your Word template references | comparisonRows |
| Display label | Anything human-readable | What appears in the dashboard and (if you use it) as the section header in your template | Award Comparison Table |
Renaming the display label is safe
Step 1: Create the Definition
Go to Settings → Data Tables
You'll see a list of existing tables (if any) and a New Data Table button.
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}.
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.
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
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]
Token Reference
| Token Pattern | What It Resolves To | Use 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 rows | Anywhere — totals row, summary text, etc. |
| {d.tableLabel.<tableName>} | The Display label as you set it in Settings | Section headings — change the label, headings update everywhere |
| {d.tableEnabled.<tableName>} | true if this table is enabled on the appraisal, false if skipped | Wrap 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 defaults | Snippet 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.
- Settings → Data Tables → New Data Table. Name: comparisonRows. Label: Award Comparison Table.
- Add 7 columns: coverage (text), originalSettlement (currency), awardRcv (currency), awardAcv (currency), demandRcv (currency), firmEstimate (currency), differenceRcv (currency). Save.
- 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.
- 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.
- 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
Related Articles
Narrative Snippets: Reusable Boilerplate Prose
Define reusable paragraph templates with embedded tokens. Write the boilerplate once, fill it per appraisal, ship it in any number of Word templates.
Computed Defaults: Auto-Fill Custom Fields
Make a custom field auto-compute its value from a Data Table cell or by aggregating other custom fields. The user can still type a value to override.
Master Templates: One Template, Many Variations
Build one Word template with every possible section, then enable only the relevant ones per appraisal. Disabled sections drop out of the rendered PDF.