---
title: "Build a custom report"
description: "Design a report in the Report builder from one or more dataset sections, with the columns, filters, grouping, sort, and totals you choose."
url: "https://support.outpostplatform.com/reports/report-builder/"
product: "depot"
type: "how-to"
status: "draft"
ai_summary: "How to build a custom report in Reports > Report builder in the Outpost console: name it, add up to 12 sections, pick a dataset, columns, filters (is, is not, less than, at most, greater than, at least, contains, is one of), Group by, sort keys, Summarize this section, and a row limit up to 10,000, then Preview and Save report. Needs report:manage."
availability:
  plans: ["home-lab", "essentials", "enterprise", "msp"]
  permission: "report:manage"
  preview: false
source: "https://gitlab.com/outpostplatform/docs/-/edit/main/src/content/docs/reports/report-builder.md"
license: "CC BY 4.0"
---

# Build a custom report

When none of the built-in reports answers your question, build your own. A
custom report has one or more sections, and each section reads one dataset
with the columns, filters, and sort you choose. Saved reports appear under
**Custom reports** on **All reports**, where anyone with `report:read` can run
them, and you can [schedule them](/reports/run-and-schedule/).

## Before you begin

- You need `report:manage` to create, change, or delete a custom report.
- Each section also needs the permission of the dataset it reads, both when
  you preview it and whenever anyone runs it. See
  [Report datasets](/reports/datasets/).
- Build per-client reports in a client's **Reports**. On the MSP plan, build
  reports across clients in the practice-level **Reports**.

## Build the report

1. Go to **Reports** > **Report builder**, or select **New report** on **All
   reports**.
2. Under **Details**, enter a **Name** and, optionally, a **Description**.
3. On the practice-level builder, choose the clients in **Clients**, or leave
   every client.
4. In **Section 1**, enter an optional **Title**. Without one, the section uses
   the dataset's name.
5. In **Dataset**, choose what the section reads, such as **Endpoints** or
   **Patch compliance**.
6. Under **Columns**, select the columns to show. With none selected, the
   section shows every column.
7. Under **Filters**, select **Add filter** for each condition. Choose a
   column, an operator, and a value. Every filter must match.

   | Operator | Means |
   | --- | --- |
   | **is** | Equals |
   | **is not** | Does not equal |
   | **less than** | Below |
   | **at most** | Below or equal |
   | **greater than** | Above |
   | **at least** | Above or equal |
   | **contains** | Contains the text |
   | **is one of** | Equals one of a comma-separated list |

8. Optionally, in **Group by**, choose a column. The section then shows one
   row per value of that column with a count, instead of the columns you
   picked.
9. Under **Sort**, select **Add sort key** for each level of ordering, and
   select **Descending** where needed.
10. Optionally, select **Summarize this section** to add the row count and,
    for numeric columns, the lowest and highest values. Counts, sizes, and
    money are also totaled. Percentages are not, because a total of
    percentages means nothing.
11. Optionally, in **Row limit**, enter the most rows the section returns, up
    to 10,000. Leave it empty for the dataset's own limit. A value above the
    dataset's own limit has no effect.
12. To add another section, select **Add section**. A report can have up to 12.
    Use **Up**, **Down**, and **Remove** to arrange them.
13. Select **Preview** to run the report and see the result under **Preview**.
14. Select **Save report**.

To change a saved report, open **All reports** and select its name under
**Custom reports**. Select **Save changes** when done.

## What a report cannot include

Datasets leave out columns that hold encrypted content or sensitive personal
data, such as the person signed in to an endpoint or a credential's secret. A report
naming one is refused with **That column holds personal data and is not
available in reports.**

## Verify

Select **Preview**. Each section shows its table, and a section cut off by a
row limit says it is a partial view. After saving, the report is listed under
**Custom reports** with **PDF** and **CSV** beside it.

## If something goes wrong

| Symptom | Cause | Fix |
| --- | --- | --- |
| **A report can have at most 12 sections.** | Too many sections. | Split the report in two. |
| **A section can return at most 10000 rows.** | **Row limit** is above 10,000. | Lower the limit, or add filters. |
| Preview refuses a section and names a permission. | You lack the permission of that section's dataset. | Ask an administrator, or choose another dataset. |

## Next steps

- [Run and schedule reports](/reports/run-and-schedule/)
- [Report datasets](/reports/datasets/)
