# Reports

> Boards are named pages of tiles, with key figures from your data and views from your apps. You create one with a name, the AI Assistant suggests figures and builds views, you filter by period and values, share the board with colleagues and download it as a PDF. Every tile counts and reads with the rights of whoever looks at it.

A **board** is a page of figures on one topic: "Team hours" with the hours of the year, the hours per month and per project, or "Projects at a glance" with the number of projects, the customers and the billing model. It is made of tiles on a grid of four columns, with filters for the period and for single values above them. You find the boards under <MenuPath to="Start > Reports" /> (`/analytics`).

A tile is one of two things. A **key figure tile** counts from your tenant's data, for example hours per project. A **view tile** shows data from your connected apps, for example your team's open tickets as a table with status. Both sit side by side on the same board.

The dashboard knows the same tiles (see [Build your dashboard](/use/dashboard/#add-a-key-figure)). A board does more: you can have as many as you like, each with a name, share them, filter all tiles at once and pass them on as a PDF. The dashboard stays your personal start page.

<Flow
  steps={[
    { icon: 'file-plus', title: 'Name', text: 'A new board needs nothing but a name.' },
    { icon: 'sparkles', title: 'Suggestions', text: 'The AI Assistant opens beside it and suggests figures from your data.', tone: 'lavender' },
    { icon: 'circle-check', title: 'Confirm', text: 'You confirm every tile on a card, and it appears at once.', tone: 'cyan' },
    { icon: 'shield-check', title: 'Count', text: 'Every tile counts with the rights of whoever looks at it.' },
  ]}
  caption="You share the board, not the data."
/>

## Before you start

- You need the permission **Reports** (`core.analytics.read`). Every role the setup wizard creates includes it; older roles get it under [Roles and rights](/setup/roles/). Without it, the menu entry is missing.
- For each tile you also need the read permission of its data source, for example projects or time entries. The sources and the permission each one asks for are listed in the [NQL reference](/reference/nql/#the-sources).
- The AI Assistant's suggestions need a connected AI model (see [Connect your AI](/setup/connect-ai/)). Without one you build key figure tiles yourself.
- View tiles need at least one connector you may use (see [What connectors are](/plugins/overview/)) and the AI model: only the AI Assistant builds views.

## The overview

The page <Ui>Reports</Ui> shows your boards and the ones others shared with you as cards. The tabs <Ui>All</Ui>, <Ui>Mine</Ui> and <Ui>Shared with me</Ui> separate them, <Ui>Search boards</Ui> searches the names.

Each card shows its board as a coloured miniature: the tiles in their width and their kind (figure, bar, line, doughnut, table), but without numbers. The numbers belong to whoever opens the board. Below are the name, <Ui>Tiles: 5</Ui> or <Ui>Still empty</Ui>, on a shared board <Ui>Shared with 2</Ui> or <Ui>by</Ui> and the owner's name, and when it was last changed.

If you already have a view that stands on its own, from the time before views became tiles, it is in the overview too. Its card carries <Ui>View</Ui> and, instead of the tiles, the apps it reads from or <Ui>Own page</Ui>. New views are only made as tiles of a board.

<Screenshot src={shot_analytics_gallery} url="/analytics" alt={"The overview with four boards as coloured miniatures"} caption={"The miniature shows the width and kind of the tiles, but no numbers."} />

## Create a board

<Steps>

1. Click <Ui>New board</Ui>. The dialog only asks for the <Ui>Name</Ui>, for example "Hours and projects 2026", at most 120 characters. Click <Ui>Create</Ui>.

2. The new board opens, and the AI Assistant opens beside it, asking what the board should show. Below are suggestions as buttons, built from the sources you may read, the ones with the most data first. The names of figures and fields come from the server in German, so for projects you see for example <Ui>Key figure: Anzahl Projekte</Ui> (number of projects), <Ui>Anzahl Projekte per month</Ui>, <Ui>Anzahl Projekte by Abrechnungsart</Ui> (billing model) and <Ui>Top 5 Kunde by Anzahl Projekte</Ui> (customer), plus <Ui>Suggest filters</Ui>.

3. Click a suggestion, or describe in your own words what you want to see, for example "hours per month by project". The AI Assistant answers with a card that shows each planned tile as a step. Several tiles come as one bundle.

4. Check the card and click <Ui>Execute</Ui>, or for several steps <Ui>Execute all 3</Ui>. Nothing happens before that. The tiles appear on the board at once, and the AI Assistant keeps offering what is still missing above the input field.

</Steps>

<Screenshot src={shot_analytics_new_board_ava} url="/analytics/6" alt={"A new, empty board with the AI Assistant beside it, suggesting key figures"} caption={"The suggestions come from the sources you may read."} />

Instead of asking the AI Assistant you can add tiles yourself: <Ui>Add tile</Ui> on the empty board, or <Ui>Customize</Ui> and then <Ui>Add widget</Ui>. That opens the dialog <Ui>Set up report</Ui>, the same as on the dashboard.

The buttons of a board are at the bottom of the page: <Ui>Ask AI Assistant</Ui> for everyone, <Ui>Filters</Ui> and <Ui>Customize</Ui> for everyone who may edit, <Ui>PDF</Ui> once there are tiles, and <Ui>Share</Ui> for the owner. <Ui>More actions</Ui> holds <Ui>Rename</Ui> and, for the owner, <Ui>Delete</Ui>.

## Key figure tiles

Every key figure tile is a query in the query language **NQL**: one source, one or more figures, optionally fields to group by, and filters. The [NQL reference](/reference/nql/) describes how a query is built. You don't need to know it; the AI Assistant and the tile dialog write it for you.

### Displays

| Display | For | What the query needs |
|---|---|---|
| <Ui>Figure</Ui> | One single number, "how many in total" | One figure. With a field, the tile adds up all rows; for an average that makes no sense, and the dialog points it out |
| <Ui>Bar</Ui> | Comparing values, such as projects per customer. <Ui>Stacked</Ui> stacks several series, <Ui>Horizontal</Ui> turns the axes for long names | A field for the axis |
| <Ui>Line</Ui> | A trend over time. <Ui>Area</Ui> stacks several series as areas | A date field with a time grain (day, week, month, quarter, year) |
| <Ui>Doughnut</Ui> and <Ui>Pie</Ui> | Shares of a whole | Exactly one field and exactly one figure |
| <Ui>Table</Ui> | Exact values, several fields | Nothing special; a tile shows the first 12 rows |

Several series in one tile come about in two ways: through a second field (the series are its values, for example per billing model) or through several figures (the series are the figures). A tile shows at most six series. With more values the query keeps the strongest and puts the rest together as "Sonstige" (other); that series is always grey. Empty values show as <Ui>Not set</Ui>.

Numbers on the axes and in the tooltips follow your language, in English with a thousands comma (2,000), in German with a dot (2.000).

### Conditions

A key figure tile's conditions narrow down what it counts: only approved absences, only entries of the last 30 days, only your own. You join them with "and", "or" and "not" and nest them in groups, in the tile's dialog under <Ui>Conditions</Ui>. How that works is described under [Conditions with and, or and not](/use/dashboard/#conditions-with-and-or-and-not). You can also ask the AI Assistant for it, for example "only approved ones, and only this year".

The conditions stand as a sentence below the tile, so everyone on the board sees what is counted. The filters above the board are added to them, they do not replace the tile's conditions.

### Label values readably

Some values look technical in the data, such as the object type in the audit log (`app.modules.core.migration.MigrationStatus`) or a constant like `SPECIAL_LEAVE`. A tile can label them without changing the data: as a short class name (`MigrationStatus`), in words (`Migration Status`), with a template like "Level 3" or with fixed names per value. Ask the AI Assistant for it, for example "write the object types short", or put it into the query; the options are under [Label values](/reference/nql/#label-values). Filters keep counting with the stored value, but the filter list above the board shows the same labels as the tiles.

The object type of the audit log shows as the short class name by itself.

### Customize

<Ui>Customize</Ui> switches the board into edit mode, as on the dashboard:

- Drag tiles to another place with the mouse; with the keyboard, Enter or Space lifts a tile and the arrow keys choose the target.
- <Ui>Change width</Ui> sets a tile to one to four columns: <Ui>Narrow, 1 column</Ui> up to <Ui>Full, 4 columns</Ui>.
- <Ui>Settings</Ui> opens the tile's dialog, <Ui>Remove</Ui> takes it away.
- <Ui>Done</Ui> saves, <Ui>Cancel</Ui> discards the changes of this round.

<Ui>Templates</Ui> holds four ready-made sets. Their names come from the server and are German in every language:

| Template | Contents |
|---|---|
| Zeiten (time) | Total hours, time entries, billable or not, hours per month and per project |
| Projekte (projects) | Number of projects and customers, projects per billing model, projects per customer (the eight largest and "Sonstige") |
| Abwesenheiten (absences) | Requests and days, requests by status, days by type, days per person |
| KI-Nutzung (AI usage) | Sessions and messages, sessions per model and per day |

A template replaces the tiles of the board. It leaves out tiles whose source you may not read; if nothing is left, the template is not offered. <Ui>Previous layout</Ui> with <Ui>Restore</Ui> brings back the state from before the last template, once.

## Views from your apps

A view tile shows what is in your connected apps: the open tickets, today's unread e-mails, a customer's orders. It reads through the connectors you may use and can add figures from your own data.

### Build a view tile

The AI Assistant builds views. On a board you may edit, describe a list from your apps, for example "my open tickets with status and due date". The AI Assistant looks up which fields the app returns, builds the tile and shows it on a card you confirm. Nothing happens before that. To change a view tile, tell it what should be different; that comes as a card too.

The AI Assistant decides per figure which kind of tile fits: a number from your tenant's data becomes a key figure tile; data from your apps, tables with status, targets, last year's values or forecasts become a view tile.

### What a view tile can show

- **Tables** with their own columns: status as coloured badges, numbers and dates formatted in your language, text coloured by threshold, a totals row, links, and sorting by a click on a column header. Long tables show a part first and the rest behind <Ui>Show all 24</Ui>.
- **Charts**, combined ones too, with target and forecast lines.
- **Lists** like the lists in nexxus itself, with status, the person responsible and dates.

A view tile looks like the rest of nexxus and has no look of its own. It refuses its own colours and fonts: status, highlights and charts take the system's colours, so they match the dark theme and your company's colour.

### The tile belongs to its board

- **Who sees it:** everyone the board is shared with, in the same role. You don't share a view tile on its own.
- **With which data:** each person sees their own. The tile reads with the rights and the account of whoever looks at it, not with those of the person who built it.
- **For how long:** when you remove the tile or delete the board, the view and its versions are gone. The data in your apps stays untouched.

Every view tile also has its own page, `/analytics/view/` plus its number. At the top, <Ui>Tile on “Name”</Ui> leads back to the board; <Ui>Versions</Ui> shows every saved state and brings back an earlier one without losing anything.

### The first time you open it

If someone else built the tile, you see which of your accounts it reads from before it shows anything. Until then the tile says <Ui>This view still needs something from you: a confirmation or a connection.</Ui> and <Ui>Open</Ui>.

<Steps>

1. Click <Ui>Open</Ui>. The view's page shows <Ui>This view reads data from your accounts</Ui>, who built it, and the connectors it reads from.

2. Click <Ui>Got it, show it</Ui>. nexxus remembers this in your profile and only asks again when a new version reads from another app. From then on the tile shows your data on the board too.

3. If an app is not connected to your account yet, it says <Ui>... is not connected yet</Ui> with <Ui>Connect account</Ui>. Until you connect, that part stays empty; the rest of the view already shows.

</Steps>

If a connector is not shared with you at all, the view says <Ui>... is not available to you</Ui>, and that part stays empty.

## Filters

Filters sit in a row above the tiles. Whoever may edit a board decides **which** filters there are; **which values** apply, each person chooses for themselves. The choice is not saved, and a colleague sees their own.

### Set up filters

<Steps>

1. Click <Ui>Filters</Ui>. The dialog <Ui>Filters for “Name”</Ui> lists the fields of all sources on the board, with their kind: <Ui>Period</Ui>, <Ui>Choice</Ui>, <Ui>Yes/No</Ui> or <Ui>Text</Ui>.

2. Pick the fields people should be able to filter by. Except for a period, <Ui>Several values</Ui> allows tick boxes instead of a single choice.

3. Click <Ui>Apply</Ui>.

</Steps>

A board has at most eight filters. Numbers and references to other modules (customer, project, employee) cannot be filtered: a query by customer answers with names, a filter would need the ids behind them. The AI Assistant can suggest and add filters, each as a step of its own on a card.

### Choose values

- **Period.** All date filters of a board share one button <Ui>Period</Ui>. It offers <Ui>All time</Ui>, <Ui>Last 7 days</Ui>, <Ui>Last 30 days</Ui>, <Ui>Last 90 days</Ui>, <Ui>This year</Ui>, <Ui>Last year</Ui> and a <Ui>Custom period</Ui> in the calendar: two months side by side, <Ui>first day on the left, last day on the right</Ui>. Starting from the whole period, the tiles change once both days are picked. The bin of each calendar empties only its own end: without a last day the period runs from the first day (<Ui>from 01.10.2026</Ui>), without a first day until the last (<Ui>until 13.10.2026</Ui>), and with neither it is the whole period again. Weeks start on Monday. On a phone the calendar shows one month with <Ui>from</Ui> and <Ui>to</Ui> to switch between. The note under the calendar says which fields the period applies to, for example <Ui>Applies to „Datum“, „Angelegt am“.</Ui> The last day counts in full.
- **Choice, Yes/No and Text** are dropdowns with the values that occur in your data. <Ui>All</Ui> lifts the filter, with several values also <Ui>Show all</Ui>.
- <Ui>Reset</Ui> at the end of the row lifts all filters at once. The button appears as soon as a filter is set.

A filter only acts on the key figure tiles of its own source; view tiles choose their own data and are left alone by the board's filters. A filter on the status of absences leaves a tile about projects alone, and a period on "Datum" of the time entries does not act on "Angelegt am" (created on) of the projects unless there is a date filter for that too. It is added to the tile's own filters, it does not replace them.

<Screenshot src={shot_analytics_period} url="/analytics/1" alt={"The period with presets on the left and two months in the calendar on the right, 1 to 13 October picked"} caption={"First day on the left, last day on the right; each bin empties only its own end."} />

## Share

A board belongs to whoever created it. Only the owner can share and delete it.

<Steps>

1. Click <Ui>Share</Ui>. The dialog <Ui>Share “Name”</Ui> shows who already has access.

2. Under <Ui>Choose a person</Ui> pick someone from your company, choose the <Ui>Role</Ui> and click <Ui>Share</Ui>. You change a role later in the same row; <Ui>Remove access</Ui> takes the access away again.

3. Close with <Ui>Done</Ui>.

</Steps>

| | <Ui>Owner</Ui> | <Ui>Editor</Ui> | <Ui>Viewer</Ui> | Everyone else |
|---|---|---|---|---|
| See the board, filter it, download the PDF | yes | yes | yes | don't see it |
| Change tiles, filters and the name | yes | yes | no | |
| Share and delete | yes | no | no | |

**You share the board, not the data.** Every tile counts with the rights of the person looking at the board. Someone without the read permission of a source sees <Ui>No permission for this data</Ui> on that tile. A source that limits rows per person shows each person their own figures: AI sessions count only your own (administrators see all), absences your own and those of the teams you lead.

Administrators have no access to other people's boards. A board stays private until its owner shares it. When it is deleted it also disappears for everyone it was shared with; the data itself stays untouched.

## Download as PDF

<Ui>PDF</Ui> at the bottom of the board downloads it the way you see it right now: with your figures and the filters you chose. On a phone, <Ui>PDF</Ui> is in the menu <Ui>More actions</Ui>. Every role may do this, viewers too.

The PDF is A4 landscape and lays the tiles out in rows of four columns, as on screen. At the top are the name, "Stand" (as of) with date, time and your name, and the filters that are set; at the bottom the board's name and the page numbers. The PDF's own texts are German. Charts come out light on white paper, even when you use nexxus in the dark theme. A tile without figures (no permission, no data) appears with its own note. A view tile appears in the PDF as a note: <Ui>A view with data from your apps. It is on the page only, not in the PDF.</Ui>

nexxus queries nothing a second time for this. The page hands the server what it shows, and the server sets the document from it. So the PDF holds exactly what you were allowed to see.

## With the AI Assistant

On a board, the AI Assistant works on that board. <Ui>Ask AI Assistant</Ui> opens its column; on a new or empty board you may change, it opens by itself.

- **Whoever may edit** can have the AI Assistant add, change and remove tiles, add and remove filters and rename the board. Every change comes as a card you confirm. It only builds from sources you may read and runs every new key figure tile once with your rights before the card appears. View tiles it builds from the connectors you may use (see [Views from your apps](#views-from-your-apps)).
- **Whoever may only view** can ask the AI Assistant about the figures. It explains them and suggests no changes.
- The AI Assistant can also create a new board, for example "create a board 'Team hours' with the hours per month", and read your boards.

If the AI Assistant changes the board while you are in edit mode, the page says <Ui>AI Assistant changed the board. It reloads once you finish customizing.</Ui>

## What happens behind the scenes

- **Every key figure tile is an NQL query** that runs when it loads, with the rights of the person looking at it. The server checks the permission for reports, the read permission of the source and the fields the source publishes, and limits the rows to your tenant. More in the [NQL reference](/reference/nql/#who-sees-what).
- **A board you may not open** answers like one that does not exist. A number in the address gives nothing away.
- **Limits:** at most 40 tiles, at most 16 KB of settings per tile, one to four columns wide, at most eight filters, a name of 1 to 120 characters. In the PDF: at most 40 tiles, 200 rows and 12 columns per table, 3 MB per chart.
- **A view tile runs walled off** in a frame of its own with no access to the rest of the page. It asks nexxus for its data, with the account and rights of whoever looks at it, and may only call the connector actions it declared when it was built. How often it may query a connector is set by the connector; without its own setting that is 120 queries a minute for the whole tenant and 60 a minute for one person on one view, and an answer is reused for 60 seconds.
- **The AI Assistant's changes** go through the same checks as the page. The steps of one card count together: if one fails, the earlier ones are rolled back too.

## When something goes wrong

| Message | Cause and fix |
|---|---|
| <Ui>This board does not exist (any more), or it is not shared with you.</Ui> | The board was deleted, or the share was removed. <Ui>To the overview</Ui> takes you back. |
| <Ui>No permission for this data</Ui> | You lack the read permission of this tile's source. Ask an admin for it; the other tiles still show their figures. |
| <Ui>No data for this selection.</Ui> | The filters leave no row. Choose another period or <Ui>Reset</Ui>. |
| "... ist für dich nur zum Ansehen freigegeben; ändern kann es ..." (shared with you for viewing only) | You are a viewer. Ask the owner to make you an editor. |
| "Nur ... als Eigentümer kann „...“ freigeben oder löschen." (only the owner can share or delete) | Sharing and deleting are left to the owner. |
| "Höchstens 8 Filter auf einer Auswertung." (at most 8 filters) | Remove a filter before you add a new one. |
| "Nach '...' lässt sich auf einer Auswertung nicht filtern" (cannot be filtered on a board) | The field is a number or a reference to another module. Filter in the tile's own query. |
| "Es gibt keinen früheren Stand dieser Auswertung, der sich wiederherstellen ließe." (nothing to restore) | <Ui>Restore</Ui> only brings back the state from before the last template, and only once. |
| "Der PDF-Dienst hat kein Dokument geliefert." (the PDF service returned no document) | The installation's PDF service does not answer. Try again later or tell your operator. |
| <Ui>The assistant cannot be reached.</Ui> | No AI model is connected, or the gateway does not answer. You can still add key figure tiles yourself. |
| <Ui>This view no longer exists, or it is no longer shared with you.</Ui> | The view was deleted, or the share was removed. Remove the tile. |
| <Ui>Problems in this view: 2</Ui> | Something went wrong in the view while loading, for example because an app returns other fields than when the view was built. <Ui>Let AI Assistant fix it</Ui> hands it the page's reports, and it suggests the repair on a card. |

## Next steps

<CardGrid>
  <LinkCard title="NQL reference" description="How a query is built, which sources there are and how to label values." href="/reference/nql/" />
  <LinkCard title="Build your dashboard" description="The same tiles on your start page." href="/use/dashboard/" />
  <LinkCard title="Working with the AI Assistant" description="How the AI Assistant works and what it may do for you." href="/use/assistant/" />
</CardGrid>