Skip to content

Reports

A report is a document. Where a dataset answers one question, a report puts several of them in order, wraps them in a cover and a table of contents, and produces a single branded PDF you can send to someone who was not looking over your shoulder.

Each page of a report is exactly one dataset. Pages are ordered, and the order is yours.

Logging & Reports → Reporting → Reports → New report opens the builder. Creating one needs reports.build; an account holding only reports.view can open an existing report, but the builder renders read-only with no Save.

The report builder The report builder: the document’s settings and its ordered pages on the left, the rendered preview on the right.

Name it — report names are unique — then add pages. Add page opens a drawer over your saved datasets: search it and press Add on each one you want. The drawer stays open, so you can add several in a row, and each appends to the end of the page list in the order you added it. The same dataset may appear on more than one page — the drawer tells you how many times it is already in. Drag a page by its grip to move it; remove one you no longer want.

A page holds a reference to a dataset, not a copy of one. Whatever the dataset is saved as — its filters, its chart or table, its row limit — is what the page renders, and editing the dataset changes every report that uses it.

Saving validates that every referenced dataset still exists, so you cannot save a report pointing at nothing. Deleting a dataset that a report uses is refused in the first place — see Datasets. If a reference goes missing anyway — removed out of band, or an upgrade that dropped the in-code template behind it — the page degrades instead of breaking the document. It prints as a placeholder headed Removed dataset (or the dataset’s own name, when only its template went) reading This dataset is no longer available, it still takes its place in the table of contents, and the builder flags that row in red as Dataset removed so you can drop it.

Two optional pieces make the difference between a stack of charts and something you can hand over:

Title page — a cover carrying the report name, an optional subtitle, and an optional confidentiality notice. It also prints when the document was generated and, for a global period, the window it covers (“Reporting period: … — …”); a per-dataset report has no single window, so the cover omits that line.

The notice is rich text, which is there for the real use: an NDA line, a distribution restriction, or the classification your organisation requires on the front of a document that leaves the building. The editor offers bold, italic, underline, two heading levels, bulleted and numbered lists and links — and the server sanitizes what you save down to exactly that set of tags, so nothing else survives onto the cover. A new report starts with a neutral default you edit or clear:

Confidential. This report and the information it contains are confidential and intended solely for the recipient. Do not copy, distribute, or disclose it, in whole or in part, without authorization.

Table of contents — generated from the pages, so a fourteen-page report is navigable rather than a scroll. On screen the entries are plain text; in the PDF they are clickable, with page numbers read back from the printed document itself.

This is the setting worth understanding, because it decides whether a report reads consistently or as a patchwork.

Global applies one window to every page, overriding what each dataset saved. It can be relative (last N days, up to 3650) or absolute (a fixed start and end, either side optional for an open-ended range, read in the system timezone). Use this for anything where the pages have to agree — a monthly review is about one month, and a page quietly covering a different seven days makes the document wrong.

There is one exception, and it is the useful kind. A page whose template has no period at all — an inventory, a health snapshot, a certificate posture — has nothing to override, so it ignores the global window and prints its own as of moment instead. A mixed report stays honest about which pages are a span and which are a snapshot.

Per dataset lets every page keep its own saved window. Use it when the pages are deliberately different: a live snapshot next to a 30-day trend next to a point-in-time inventory.

A new report starts global, relative, last 7 days. A relative global period stays relative: a report set to “last 30 days” means the last thirty days each time it renders — including every time a schedule mails it. Whichever window applies, it is resolved once per render, so every page of one document shares the same instant.

The preview renders on the server, from the very HTML the PDF is printed from, so it is not a browser’s approximation of the document — shown in a frame with zoom and fit-width controls.

It does not refresh itself, and that is deliberate: every page of a report is a database query, so a render only fires when you ask for it. Edit anything and the last render stays on screen, blurred, under an Out of date badge and a Refresh button. Opening a saved report renders once on arrival; a brand-new one waits for your first Refresh. Previewing needs reports.run — without it the panel is locked.

Download PDF exports the composed document and needs reports.export. It exports what is saved: a report has to exist before it can be exported (while you are creating one the button is disabled, saying “Save the report first to export it”), and on an existing report it renders the last saved version rather than your unsaved edits. Save first, then export.

The PDF is that same HTML, printed by the taranac-renderer container: paginated, page numbers in the footer, contents entries resolved to the pages they landed on, and the cover printed edge to edge as an unnumbered front page.

Nothing in a report PDF is truncated. The 100,000-row export ceiling belongs to dataset CSV/XLSX extracts; a report page renders its dataset exactly as saved — its own row limit included — and the document runs as long as it runs.

Reports export to PDF only. That is not a limitation so much as the point: a report is a laid-out document with a cover, ordered pages and per-page presentation. If you want the numbers as a spreadsheet, export the underlying dataset — a table dataset gives you CSV and XLSX directly. See Exports.

The report list Each report shows how many datasets it holds and the period it covers.

The list shows the dataset count and the resolved period for each report — relative (“Last 7 days”), an absolute range in the system timezone, open-ended (“From …”, “Until …”), all time, or Per dataset where the report defers to its pages — so you can tell at a glance which documents are pinned to fixed dates and which move with the calendar. Search by name; sort by name or by when a report was last modified.

Row actions are Download PDF, Configure and Delete. Export needs reports.export and delete needs reports.build — without them the buttons are simply absent, and an account holding only reports.view gets a View eye where the Configure gear would be. Only one PDF renders at a time: while one is in flight every Download button is disabled and the working row shows a spinner.

The dashboard carries a Reports widget with the five most recently modified reports and their periods, and the same one-click PDF for anyone holding reports.export.

A first install seeds four ready-made reports over the seeded datasets, each with a cover, a table of contents and a global relative window:

ReportPagesWindow
System overview7Last 7 days
AAA activity report8Last 7 days
NAC access report6Last 7 days
Full platform report14Last 30 days

The seed runs once, watermarked, and never again. Rename them, reorder their pages, change their period or delete them outright — an upgrade will not put them back. They are worked examples as much as anything: open the fourteen-page one to see how a long document is ordered.

A compliance pack. One report, global absolute period covering the audit window, title page with the confidentiality notice, table of contents on, pages ordered the way the auditor reads: inventory first, then access, then exceptions.

A weekly operations digest. One report, global relative period of 7 days, scheduled for Monday morning. It always means “the week just gone” without anyone touching it.

A mixed status page. Per-dataset periods, so a live sessions snapshot can sit beside a 30-day trend without either being wrong.