A report is a customisable table that pulls together your portfolio data into rows and columns you control. Rows decide what each line is about — a group of holdings, a set of transactions, a category — and columns decide how each line is measured — a current value, a statistic, a sum of transactions, or a formula that combines other columns. Trac ships a set of built-in reports (such as a balance sheet) and lets you build and save your own. This page covers how to find reports, open one, add and edit rows and columns, read the output, and the controls available while you work.

For the underlying data model and engineering detail, see the engineer-facing reference under internal/features (the report data model) — this page is the end-user walkthrough.


Find what you need#

A few ideas carry the whole page:

  • A report is a table you build. Rows decide what each line is about, columns decide how it’s measured, and a formula can combine either. See How a report is structured.
  • A report page is a different thing — a document that arranges live tables, headline numbers, charts, and commentary you write. It’s a web feature, and it’s the whole second half of this page. See Report pages.
  • The two work together: a page doesn’t rebuild a table, it points at a report you’ve already saved and shows that report’s live data. See Live tables.
  • Nothing you change is stored until you press Save — in a report or on a page. See Saving a report.

Jump straight to a task:

Build a report (a table)

Read and export the numbers

Build a report page (a document)


Finding and opening reports#

The Reports screen is a directory of every report available to your portfolio. It lists your saved reports together with Trac’s built-in ones, grouped into folders. Each entry shows the report’s name, description, folder, and who created or last modified it; built-in reports are marked as system-created.

From the Reports screen you can:

  • Search the list with the search box at the top.
  • Open a report by tapping its entry. This takes you to the report view.
  • Create a new report by tapping the + button. This opens an empty report view where you start adding rows and columns.
  • Favourite a report (star it) so it’s easy to get back to.
  • Edit a report’s details (name, description, folder) with the pencil action — available on your own reports, not on built-ins.
  • Delete one of your own reports. Deleting asks you to confirm first and can’t be undone. Built-in reports can’t be deleted.

Folders are how reports are organised. Built-in reports sit in a Default folder, and any of your reports that you haven’t filed go under No Folder. You choose a folder when you save a report (you can type a new folder name to create one on the fly).

Inside a report, the header shows the report’s name in the centre and a Back to Reports link on the left that returns you to the directory.


How a report is structured#

Every report is a table built from two things:

  • Rows define each line of the report. A row can pull in a set of portfolio items or transactions, optionally grouped (for example, by category, tag, owner, or chart-of-accounts), or it can be a formula line computed from other rows.
  • Columns define what is measured for every row. A column can be a statistic, an aggregation of transactions, a manually-typed value, or a formula that references other columns.

The leftmost column always shows the row labels; every other column shows a value for each row. Where a row is grouped, it shows as an expandable tree — tap a group to expand it and reveal the holdings or sub-groups beneath it, and the group line shows the rolled-up total.


Editing a report#

Most building happens in edit mode. In the report’s control bar, tap the pencil (Edit Report) button to turn editing on; tap it again (Exit Edit Mode) to turn it off. While editing, each row and column exposes its own menu for reordering, editing, duplicating, hiding, and deleting, and you can resize or freeze the label column.

Adding rows and columns#

When a report has no rows or no columns yet, an add menu is available with Add Row and Add Column options. While editing, each existing row and column also offers actions to add a new one above/below (rows) or left/right (columns), so you can place new entries precisely.

Adding or editing a row#

Opening a row’s form lets you choose its Type and configure it:

  • Selection — the most common type. It filters and displays portfolio items or transactions. You can apply filters and choose a Group by option (such as tag, owner, type, sub-type, contact, individual portfolio item, or chart-of-accounts) to turn the row into an expandable, grouped tree. Grouped rows roll their children up into a group total.
  • Formula — a calculated line whose value comes from other rows (for example, one row minus another). This type only appears once the report has other rows to reference. Formula rows hide the grouping and filter options and show a formula editor instead.
  • Text — a static label line, useful for section headers or separators.
  • Spacer — an empty line used purely for spacing.

Adding or editing a column#

Opening a column’s form lets you choose its Type. The available column types include:

  • Stat — a portfolio-item statistic (the same statistics described on the Statistics page, including your custom ones). Use this to show, for example, current value or a return measure as a column.
  • Aggregation — aggregates transaction data (sum, average, count, min, or max) over a date range.
  • Transaction Math — sums transaction values for each row, optionally narrowed by transaction filters.
  • Manual — a column you fill in by hand. Cells start empty and you type values while editing; the column remembers what you entered. Manual cells can also hold a quick = formula.
  • Formula — a calculated column whose value comes from other columns (and can reference rows and individual cells). Formula columns are computed in the app, so they update automatically as the columns they depend on load.
  • Item Field / Transaction Field / Posting Field — show a specific field value (such as a name, type, description, tag, or attribute) rather than a number.
  • Item Metric, Item Target, Structured Stat, Posting Aggregation, Posting Math — additional specialised column types for performance metrics, goal targets, structured statistics, and posting-level aggregation.
  • Spacer — an empty column used for spacing.

To use a custom statistic as a column, first define it under Configurations → Statistics (see Statistics), then add a Stat column and pick your statistic.

Writing a formula#

Formula rows and columns use a small formula language. You reference other columns with column:<id>, other rows with row:<id>, and a single cell with cell(column:<id>, row:<id>). The formula editor lets you use $A, $B, $col1, $row1-style variables and pick what each maps to from a dropdown, so you rarely type raw IDs.

Formulas support:

  • Arithmetic (+, -, *, /), comparisons, and conditional logic (if, ifs, and, not, and ternary condition ? a : b).
  • Aggregate functions across many cells — sum, avg, min, max, count, median, product — and math helpers like abs, round, power, and sqrt.
  • Range syntax to reference many consecutive columns or rows at once: column:jan:dec or row:income:expenses. For example, sum(column:jan:dec) sums every monthly column from January to December.
  • Positional helpers for period-over-period comparisons: prev(...), next(...), and offset(..., n) reference a neighbouring row or column relative to the current position. For example, year-over-year growth across period columns can be written row:net-worth / prev(row:net-worth) - 1.

Empty or missing values are treated as 0 in arithmetic, so a formula doesn’t break when a referenced cell has no data yet.


Dates and period#

When a report has columns that measure over a time window or as of a date, the report header shows date controls:

  • Period — a relative window (such as a prior year or year-to-date) applied to columns that inherit the report-level period. Choosing Custom dates reveals From Date and To Date inputs for an explicit range.
  • As of Date — the reference date used to resolve relative periods and as-of values.

A column can either inherit these report-level dates or set its own period or explicit dates in its edit form. If no column needs date context, no date controls are shown.

When a report includes currency columns, a Currency Display option in the header controls how large currency figures are abbreviated (for example, in thousands).


Reading and working with the output#

The report’s control bar offers tools for viewing and exporting:

  • Edit Report — toggle edit mode on or off (the pencil).
  • Zoom In / Zoom Out — scale the table up or down.
  • Alternate Colors — toggle alternating row shading for readability.
  • Freeze First Column / Freeze First Row — pin the label column or the header row so they stay visible while you scroll a wide or tall report.
  • Expand All / Collapse All — open or close every grouped row at once.
  • Hide Zero Rows / Show Zero Rows — hide rows whose values are all zero, or bring them back.
  • Report Filters — open the report-level filters that narrow which items or transactions feed every row. The filter funnel fills in when filters are active, and active filters are summarised in a footer below the table.
  • Export Report — export the report as CSV, Excel, or PDF. See Exporting data for more on exports.
  • Enter Fullscreen / Exit Fullscreen — expand the report to fill the screen.
  • Refresh — reload the report’s data (the refresh control sits in the report header).

Drill into a cell. For columns that come from your data — Stat, Aggregation, and Transaction Math — you can tap a cell with a value to open a popup listing the underlying transactions behind that number. For a grouped row, tapping a group or item cell filters the popup to just that group or item, and for a column split into periods (for example monthly), tapping a specific period’s cell shows only that period’s transactions.


Saving a report#

Changes you make to a report aren’t stored until you save.

  • For one of your own reports, the Save button in the header updates it in place. The button highlights when you have unsaved changes.
  • Save As opens a dialog to save the current report as a new report. You set a Name, an optional Description, and a Folder (choose an existing folder or type a new one). When you’re working on an existing report, the dialog also lets you choose whether to update it or save a new copy.

After saving as a new report, Trac opens that new report so you can keep working on it.


Report pages#

Alongside the single-table report described above, Trac is introducing report pages — a newer way to build a report as a page of blocks rather than one table. A page reads like a finished document: headline numbers at the top, narrative you write in between, and one or more tables further down. It’s built for advisor-style reports (a quarterly review, a client letter) where you want commentary and structure around the numbers, not just a grid.

Report pages are a web feature. This section covers what a page lets you do; the building blocks below can be mixed and stacked in any order.

What a page is made of#

A page is a stack of blocks. You add blocks from an Add panel while editing — either drag a block onto the page or click to drop it at the bottom — and arrange them on a simple grid. Two blocks can sit side by side (each taking half the width) or three across (a third each); on a narrow screen they stack into a single column automatically. The block types are:

  • Table — a live report table (see below). The New table card opens a gallery of ready-made table templates; the same panel also lists your saved reports so you can drop an existing one onto the page.
  • Stat tiles — a row of headline numbers (see below).
  • Chart — a donut, bar, or line visual (an emerging block type) to accompany a table.
  • Text — rich text you write, with styles for a title, a lead-in, a body paragraph, a pull-quote, or a highlighted callout.
  • AI analysis — a block whose text Traci writes for you from instructions you type and the page’s live data. You press Run to generate it; the result is ordinary rich text you can then hand-edit, and it never regenerates on its own while someone is reading the page.
  • Section header — a heading that also becomes an entry in the page’s table of contents (a small rail down the left that you hover to jump between sections).
  • Divider — a thin rule to separate parts of the page.

While editing, hovering a block reveals a small control rail beside it: comment on the block, ask Traci about it, expand a table to full screen, download a table, drag the block to a new spot, or delete it. Use Preview to see the finished page without the editing chrome, and Save to store it.

Live tables#

A table block shows a real report — the same rows, columns, and numbers you build with the report described earlier in this page. You don’t rebuild the table inside the page; you point the block at one of your saved reports, and it renders that report’s live data right in the page. The header notes that the data is live, so the page always reflects your current portfolio.

Live tables stay interactive inside the page: expand and collapse grouped rows, and tap a cell to drill into the transactions behind a number, just like in the standalone report. Each table block can also be expanded to full screen or downloaded (CSV or PDF) from its control rail.

Building and editing a table#

You build and change the tables on a page in two ways, both without leaving the page.

Start from a template, then refine with Traci. The New table card opens a gallery of ready-made tables — a net-worth statement, asset allocation, a profit-and-loss, a holdings appraisal, performance by holding, private-market commitments, and more, grouped into categories. Pick one and it drops onto the page already wired to a live report. There’s also a manual table you fill in by hand. To change what a table shows — add a column, rescope it, restyle a line — ask Traci: use the Build with Traci button or a block’s Traci glyph, describe the change in plain language (“add a column showing this quarter’s income”), and the table updates in place. Nothing is saved until you press Save, so a page in edit mode is a safe sandbox.

Direct edits you make yourself. Some things you change straight on the rendered table, no Traci needed:

  • Scope — a picker to include or exclude whole entities (and everything beneath them), tags, or item types, so you can point a table at one part of the portfolio. Filters that fall outside this simple vocabulary show as read-only “advanced” chips — ask Traci to change those.
  • Period, dates, and currency display — the same date and currency controls described above, as pills on the table.
  • Manual overrides — type over any cell to pin your own value; an override marker shows, and clearing it reverts to the computed number.
  • Appearance — a small popover to hide zero rows, alternate row colors, or keep the first row and label column pinned while you scroll.
  • Title, subtitle, and footer — edit inline.

Ask about one cell. You can also point Traci at a single cell — select it, press the sparkle button beside the formula bar, and Traci proposes a formula or a value with an Apply button in the chat. That flow is described in full under Ask Traci about one cell.

Standalone stat tiles#

A stat tiles block is the row of headline numbers most reports open with — things like Net Worth, Quarter Change, or Realized Gains. Each tile is standalone: it carries its own label and value that you type in, so a headline figure never depends on some table’s row order or layout. Add up to eight tiles; they show four across and wrap to a second row beyond that. While editing, each tile has inline label and value fields and a remove control, and a + adds another.

Commenting and sharing#

Any block on a page can hold a comment thread — click the comment control on a block to start one. Comments are visible to everyone on the portfolio and can be resolved once addressed, which makes a page a place to discuss the numbers, not just read them.

Publishing a page as a frozen edition#

A saved page always shows live data, so its numbers move as your portfolio does. When you want a fixed record — a quarterly review exactly as it read on the day you sent it — use the Publish menu to save the page as a frozen edition:

  • Publish as new captures the page as it stands right now — every table, chart, number, and word — as a dated, named snapshot (Trac suggests a name like “Q3 2026”). A frozen edition never refetches; it renders the exact figures that were on screen when you published, even months later.
  • Publish an update re-freezes the latest edition over itself with the current data.

Each page can carry several editions (for example one per quarter); they appear as chips on the page’s card in the reports directory, and opening one shows that point-in-time version with a “frozen as of” banner. Editing always returns you to the live page — a frozen edition is a read-only record, not a working copy. Editions belong to a saved page, so save the page before publishing.