A composite table joins and rolls up your synced sources into a single, governed table that your extensions and the AI can read. This article covers creating one and keeping it healthy.
Any tenant admin can use this. Composite tables are the third tab of the Integrations Hub and are open to any tenant admin — unlike Connected integrations and Audit, which are developer-admin only.
Before you begin. Composite tables live in the admin-only Integrations Hub, which has to be enabled with your group granted access, after which you may need to sign out and back in. If it's missing or you see "Access Denied," start with Getting Access to Apps and Extensions. You also need at least one connected integration source — without one, + Add source has nothing to offer, so connect a source first. See Connecting Your Systems with Integrations.
What a Composite Table Is
Open Integrations Hub → Composite tables. The panel explains it in one line: "Join and roll up your synced sources into the tables extensions read." The list shows each table's Name, how many Sources it draws from, and when it was last Updated. Use + Add composite table to create one.
A composite draws from one or more sources — a table published by an integration, for example a Google Sheets worksheet, or another composite you've already built — and produces a clean set of rows.
Why it matters. A composite defines exactly which columns exist and how each is filled. That makes it the governed layer your extensions and the AI build on — they read the table you designed, not the raw source systems.
Creating One (Settings)
Click + Add composite table. The editor has four tabs — Columns, Computed rows, Activity, and Settings. Start on Settings:
-
Set the Id — a kebab-case slug like
projects-with-revenue. This is the table's permanent identifier. Until you enter one, the editor shows "This table needs an id.". - Give it a Name and an optional Description.
- Choose a Rebuild setting. "As soon as a source row changes (recommended)" recomputes the table automatically whenever a source updates.
- Click Create composite. This returns you to the list, so reopen the table you just made to keep building. Its sources and columns are on the Columns tab.
Adding Sources and the Key (Columns)
On the Columns tab, the Sources panel on the left is where you choose what to combine. Click + Add source for each table you want to join. Each source shows where it comes from — for example, google-sheets · worksheet.
How rows line up has two modes. In the default, "Rows are identified by" — "Every source row becomes one output row. Rows sharing these values collapse into one — pick them with the key toggle on each column." — you set the grain by flipping the Key toggle on the output columns that identify a row. When you join multiple sources, the grain is instead set by "Joined on", above the Sources panel, and the Key toggle won't change it. Leave it one row per source row, or dedupe on a key like an item number.
Choosing a join type. When a composite draws on more than one source, you pick how they combine — and this decides which rows survive:
| Join | What it keeps |
|---|---|
| inner | Only rows found in every source. |
| left | The first source decides which rows exist; columns from the others come through empty when there's no match. |
| full outer | A row found in any source is kept. |
Data-loss warning. The app says it plainly — "use full outer, or those rows go missing with no warning." If a join silently drops rows you expected, the join type is the first thing to check.
Choosing Output Columns
The Output columns table is the shape of your composite. Click + Add column for each column you want to expose. Each row has:
| Field | What it does |
|---|---|
| Key | Toggle on if this column helps identify a row. It becomes part of the dedupe key. |
| Column | The name this column has in the composite. |
| How it is filled | One of three: Copy from source (take a source field's value), Roll up (aggregate matching rows — add up, count, count distinct, smallest, largest, average, or join together), or Formula (compute a value from an expression). |
| From / Value | Which source the value comes from, and which field. |
Only what you add is exposed. The composite exposes only the columns you add here — a simple way to keep sensitive source fields out. Don't see the field you need? Use "Field not listed? Add by name."
Changing a key is destructive. A key "changes what a row is," so on save every computed row is discarded and anything reading the table sees it empty until the rebuild finishes. Subtler still: change what a source lines up on and "every roll-up over that source comes out a different number… nothing in the grid will look different." That means silent wrong numbers, so treat key changes with care.
Handy. If a Roll up can't work at your table's grain, the editor offers to build the second, grouped table for you in one click.
Previewing the Result (Computed Rows)
The Computed rows tab shows "what this table is returning right now, so you can see what it built before an extension reads it. Read-only." It shows when the table was last computed, a Compact / Full text toggle, and a search box, and it previews the rows. The header shows the real row count, and for very large tables you'll see a note to "refine upstream or scope the source."
Rebuilding and Housekeeping
- Save changes whenever you edit the definition.
- Recompute… rebuilds the rows on demand — handy after a change if you don't want to wait for the automatic rebuild.
- The Activity tab is more than history. It shows a dependency tree (what feeds this table and what reads it), the rows it's dropping, an errors count, and the recompute history — so when something's off, it usually tells you exactly what.
- Delete this table removes the composite; Cancel discards unsaved edits.
Fix problems upstream. If the preview looks wrong, fix it in the source data or the column definitions, then Recompute. The composite only ever reflects what its sources and column rules produce.
Troubleshooting
Create composite is refused
Solutions: the editor names the missing piece. Work through whichever it reports.
- "Add at least one source." — nothing has been chosen to combine yet.
- "Add at least one output column — check a field in the Sources panel." — sources are chosen but no column is selected for output.
- "Add the key column as an output column so this table has a row key." — your key is not among the output columns, so rows would have nothing to identify them.
- "This table needs an id." — the table has no identifier yet.
The table is empty after I saved a change
Solutions:
- Changing the key discards every computed row and the table reads empty until the rebuild finishes. Wait for it rather than changing anything else.
- Check the preview to confirm the table is returning what you expect once the rebuild completes.
The numbers changed and nothing looks different
Solutions:
- This is the dangerous case. Changing what a source lines up on changes every roll-up over it, and the grid gives no visual sign. If a total moved unexpectedly, check whether a key or a join was edited.
- Compare against the preview, which shows what the table is returning right now rather than what you expect it to return.
The field I need is not in the list
Solutions:
- Use "Field not listed? Add by name" to name it directly.
- If the field is new in the source system, the integration may not have synced it yet — check its synced data first.
Related Articles
- Connecting Your Systems with Integrations — Connect a source before you build a composite on it
- Getting Access to Apps and Extensions — Start here if the Hub is missing or you see "Access Denied"
- Creating Quotes with Quote Generator — Turn an RFQ into a priced, formatted quote
Need help? Contact our support team at support@nxtconstruction.ai
Comments
0 comments
Please sign in to leave a comment.