> ## Documentation Index
> Fetch the complete documentation index at: https://docs.begin.eu/llms.txt
> Use this file to discover all available pages before exploring further.

# Building a report

> Pick a data source, choose columns, and decide whether the report lists records or summarises them.

Begin does not ship your old reports. You build the one you need from a data source, a set of columns, and a date range. This page covers the four choices that decide what a report shows.

## Start a report

Go to **Reports** and open any report, or create a new one. Every report is a saved view: your choices are stored with it, and it opens the same way next time.

<Info>
  Creating reports needs permission. If the **New report** action is missing, your role does not
  grant it — ask an admin.
</Info>

## Choose a source

The **Source** decides which records the report reads. One report block reads one source.

| Source            | What it reads                              |
| ----------------- | ------------------------------------------ |
| Shifts            | Scheduled shifts                           |
| Time entries      | Clock-ins and clock-outs                   |
| People            | Members of the workspace                   |
| Time off requests | Individual requests and their status       |
| Time off balances | Entitled, used, pending and remaining days |

Two sources exclude records on purpose, and the report says so under the source picker:

* **Shifts** — cancelled and rejected shifts are not counted.
* **Time entries** — hour figures count approved entries only.

<Warning>
  The second one catches people out. An ungrouped time-entry report lists entries in **every**
  status, including pending ones. Group that same report by person and the totals count **approved**
  entries only, so a pending entry disappears from the figures while staying in the record list.
  Approve the entry, or read the record list, but do not compare the two and assume one is wrong.
</Warning>

## Choose a layout

**Layout** decides the shape of the report:

* **Report** — a dashboard of chart and table blocks.
* **Table** — one configurable table with filterable rows.

A **Report** layout holds several blocks, each with its own source. That is how one report can put a chart of scheduled shifts beside a table of reported hours.

## List records, or summarise them

This is the choice that changes a report the most, and it is made with **Group by**.

* **Leave Group by empty** and you get a **record list** — one row per shift, entry or request. Use it to check individual records.
* **Set Group by to a person, position, location or label** and you get a **summary** — one row per group, with the columns totalled. Use it for payroll and for month-end.

Calculated hour figures need a person to calculate for, so most of them only appear when the report groups by person. Group by position and the report says so rather than showing a blank:

> Calculated figures are unavailable unless the report groups by person. The calculator produces them for one person at a time, so a position, location or label group has nothing to sum.

Charts add **Aggregation** (count, sum or average) and **Granularity** (day, week or month) on top of the same idea.

## Choose columns and a range

Open the column picker to add columns. They are grouped by category — hours, breaks, dates and times, and counts. [The hour columns](/for-managers/reports/hour-columns) explains what each hour figure means.

**Range** sets the period. Presets cover the last 7, 30 or 90 days, this month and last month, and you can set a custom range.

<Warning>
  A new report opens on **Last 30 days**, which is a rolling window rather than a calendar month.
  For payroll, set the range to **This month** or **Last month** before you read the figures — norm
  hours, overtime and the period balances all reason in calendar months, so a rolling window will
  not match a payslip.
</Warning>

## Filter

**Filter** narrows the rows. Filters are offered only where the report can honour them, so the set of filters changes with the source and the grouping.

One filter has a consequence worth knowing:

> Norm and overtime are unavailable while a filter narrows the report. A norm covers the whole contract, so a subset of records cannot divide it.

If norm or overtime columns go unavailable after you add a filter, that is why. Remove the filter to get them back.

## Share it

You choose who can see a report when you create it, and you can change it later from **Share**. A report is **Private** to you, **Shared** with the whole workspace, or **Restricted** to named people and roles — each of whom gets **Can view** or **Can edit**.

Sharing a report shares its configuration, not a snapshot. Everyone opens it against current data, and each reader sees only the rows their own permissions allow.

## Next

<Columns cols={2}>
  <Card title="The hour columns" icon="clock" href="/for-managers/reports/hour-columns">
    What each hour figure means, and why a total may not match the rows above it.
  </Card>

  <Card title="Downloading a report" icon="download" href="/for-managers/reports/downloading-a-report">
    CSV, decimal hours, and what happens when a report is too large.
  </Card>
</Columns>

## Still need help?

<Columns cols={2}>
  <Card title="Contact support" icon="envelope" href="mailto:support@heybegin.eu">
    Email the Begin team and we'll get back to you.
  </Card>

  <Card title="Ask Begin AI" icon="comment-dots" href="?assistant=open">
    Open the AI assistant and get instant answers based on these docs.
  </Card>
</Columns>
