Build a Table and Matrix Report
Table and matrix components work as a pair in project control reports: the matrix shows the summary pattern (cost by WBS by period), and the table below it shows the supporting detail rows. This tutorial builds a cost report page using both.
Prerequisites
- A published blueprint with a cost or quantity section (repeating rows).
- Fields including: WBS code, Activity name, Planned value, Actual value, Variance, Period date.
- An approved edition with cost rows entered.
Step 1: Add a new page
- Open the output in the Output Designer.
- Click + in the page thumbnail panel to add a new page.
- Name the page "Cost Detail".
- Set page orientation to Landscape for the matrix (wider column set).
Step 2: Add a section header
- Insert a Section Header component at the top of the page.
- Set the label to "Cost Performance — [Period]" — bind the period field for dynamic text.
Step 3: Add the Matrix component
- Insert a Matrix component below the section header.
- Bind the source section (cost section).
- Configure the matrix structure:
- Row group: WBS code (groups rows by WBS level).
- Column group: Period date (creates one column per reporting period).
- Value: Actual cost (the cell value).
- Aggregation: Sum.
- Enable Row totals column on the right.
- Enable Column totals row at the bottom.
- Set Expand depth: WBS Level 2 by default (rows collapsed to Level 2 on load).
Step 4: Format the matrix
- In the Format panel:
- Header row background: theme primary colour, white text.
- Row group indent: 16px per level.
- Row totals: bold, shaded background.
- Column totals: bold, border-top.
- Set Conditional row formatting: Variance < 0 → amber background on the row.
- Set Number format: Currency, 0 decimal places, show negative in red.
- Resize columns to fit — most period columns can be narrow (60–80px); the WBS column needs 200px.
Step 5: Add the Table component
- Insert a Table component below the matrix.
- Bind the same cost section.
- Add columns:
- WBS code (80px)
- Activity name (200px)
- Planned value (100px)
- Actual value (100px)
- Variance (100px)
- % Complete (80px)
- Period date (100px)
- Set Sort: WBS code ascending, then Activity name ascending.
- Set Column totals row: Sum for Planned, Actual, and Variance columns.
Step 6: Filter both components consistently
Both the matrix and the table should show the same data scope:
- In the Table component → Filters tab:
- Add filter: Period date = current period (bind to the edition period end date field).
- Repeat the same filter on the Matrix component.
This ensures the matrix totals match the table totals.
Step 7: Add a slicer (optional)
If the report audience needs to filter by WBS branch:
- Insert a Slicer component above the matrix (type: Hierarchy).
- Bind to the WBS field in the cost section.
- Link both the table and matrix to this slicer in their Filters → Slicer settings.
Now selecting a WBS branch in the slicer filters both components simultaneously.
Step 8: Preview and verify
- Click Preview.
- Compare the matrix column totals against the table column totals — they should match.
- Check that the matrix row group expand/collapse works correctly.
- Check that long activity names don't overflow the table column — reduce font size or increase column width.
- If the table has many rows, enable Pagination in the table settings (10 or 20 rows per page in the viewer).
Step 9: Publish and generate
- Save and Publish the output template.
- Open the edition → Generate output.
- Preview the generated output.
- Export as PDF or Excel.
For Excel export: the matrix and table export as separate sheets. The matrix sheet will have the WBS/period cross-tab structure; the table sheet has flat rows.
Good practices
| Practice | Why |
|---|---|
| Keep both components filtered to the same scope | Mismatched totals undermine trust in the report. |
| Use matrix for pattern, table for audit | The matrix shows where; the table shows what. |
| Limit matrix to 6–8 column periods | More periods than that produces an unreadable wide chart. |
| Use conditional formatting on negative variances | Makes overruns visible without requiring column-by-column scanning. |
| Add a totals row to the table | Makes the table auditable against the matrix. |