Pivot Tables
One dimension down the side, another across the top, and the measure you chose sitting in every cell. Edge totals when you ask for them, a grand total in the corner, and headers that stay put as you scroll.
Postgres groups, JavaScript arranges
6 of 9 triples placed| row_label | col_label | value |
|---|---|---|
| Enterprise | 2025-Q3 | 412K |
| Growth | 2025-Q3 | 186K |
| Starter | 2025-Q3 | 41K |
| Enterprise | 2025-Q4 | 508K |
| Growth | 2025-Q4 | 204K |
| Enterprise | 2026-Q1 | 473K |
| Starter | 2026-Q1 | 52K |
| Enterprise | 2026-Q2 | 561K |
| Growth | 2026-Q2 | 231K |
| tier \ quarter | 2025-Q3 | 2025-Q4 | 2026-Q1 | 2026-Q2 |
|---|---|---|---|---|
| Enterprise | 412K | 508K | 473K | · |
| Growth | 186K | 204K | · | · |
| Starter | 41K | · | 52K | · |
A hundred and fifty label pairs by default, three thousand at the ceiling. Past that the grid is trimmed rather than paged.
The cell holds the widget's primary measure. One dimension down and one across is the shape; arrays of either are not accepted on the config.
The drawer's Visualization tab opens on the table shape, so crossing two dimensions is a pair of pickers rather than a definition written by hand. The runtime decides on the presence of a pivot config and the renderer draws it with sticky headers on both edges. Colour rules land per cell through the same evaluator the charts use.
Product figures from the platform’s own defaults - not customer averages
How it works.
Postgres groups, JavaScript arranges
The query groups on both dimensions at once and returns flat triples of row label, column label and value. The runtime collects the distinct labels, sorts each axis, and drops each value into its coordinate. A coordinate with no triple stays empty rather than reading zero.
Both axes chunk like a chart dimension
Each dimension takes the same banding a chart dimension does, so quarters can run across the top while product bands run down the side. The query orders both axes by their bucket keys and the runtime then re-sorts the labels as plain strings, which is why dated bands read correctly and numeric ones come out in alphabetical order.
Totals are added after the fetch
Switching them on sums the matrix in memory. That means they total the window that came back, which is the same window you are looking at, and not a separate pass over the whole table.
Where one gets authored
The runtime decides purely on the presence of a pivot config, and the renderer draws it with sticky headers on both edges. The drawer's Visualization tab opens on the table shape, so crossing two dimensions is a pair of pickers rather than a definition somebody has to hand-write.
Two moments in every number.
Every number passes through the same seven. Pivot Tables is the lit ones, and everything either side of it is a different page in this category.
- 01Query
what is asked, and of what
- 02Shape
the measure and the dimension
- 03Draw
the visual chosen for that shape
- 04Arrange
where it sits on a dashboard
- 05Filter
narrowing it after the fact
- 06Drill
going from the number to the rows
- 07Share
who else gets to see it
The specifics.
8 facts- Dimensions
- Exactly one down and one across. An array on either axis is refused by the config rather than flattened
- Cell value
- The widget's primary measure. A second measure per cell is not supported
- Budget
- A hundred and fifty label pairs by default, three thousand at the ceiling. Past that the grid is trimmed, not paged
- Empty cell
- Drawn as a dash so an absent combination reads differently from a zero
- Totals
- Two switches, one per edge, computed over the returned window. The corner is derived rather than switched, and it is only painted inside the column-totals row
- Colour rules
- Applied per cell by the same evaluator the charts use, so a coordinate under target reads like a bar under target
- Authoring
- The drawer's Visualization tab on the table shape, or an import of a definition written elsewhere
- Not the same as
- Chart Visuals, where this is one of two names the table shape offers
What this is assembled from.
A number on a dashboard was built somewhere before it was drawn. These are the parts it is made of.
More in Reporting & Analytics
12 capabilitiesSeven data shapes, twenty-two visuals, shareable without the portal.
Hand a board to a team or a CRM role, at read or at edit, by the person who built it. Roles outlive people, which is why a share points at one, not a mailbox.
Build as many as the floor needs, arrange them on a grid, and give each team the one that answers their question rather than everybody's question.
Click a bar and the rest of the dashboard follows it, so the next question is asked by pointing at the answer instead of rebuilding the filter.
Wire a chart's clicks to a second dashboard. The value travels on the URL and is read by the board that was named before it paints for the first time.
Colour a number by the rule that matters - under target, over threshold, inside a band - so a dashboard reads correctly from across the room.
Draw the target on the chart itself, so performance is read against the number that was promised rather than against the shape of the bars.
Put a window against the one before it, or against the same window a week, month, quarter or year back, on a card as a difference or a chart as a series.
Seventeen operators in a nested and-or tree, so the report that needs two exceptions and a date range stays one widget instead of becoming three.
Six palettes including a print set, pinned per widget, each carrying eight series colours plus the axis, grid, card and tooltip colours drawn around them.
Thirty-two bytes of entropy, an expiry you choose, revocation on the spot, and only the hash kept at rest, on a board that draws its figures for a reader.
Name a slot at the call site and one authored widget answers it everywhere inside the product, computed against the records of whoever is signed in.
Total calls, answered rate, average duration and missed calls, split by direction and outcome, over the call records rather than a sampled export.
The rest of the platform.
Five more categories, all on the same record and the same bill. Each card names three of its capabilities, so you can tell from here whether it is worth opening.
Reporting & Analytics
See pivot tables on your own floor.
Thirty minutes, your numbers and your data. We will set pivot tables up live and you can decide from the thing itself rather than from this page.
14-day trial · no card · migration included