Skip to main content

Report Grouping

Understand how to use and control grouping functionality

Written by Adam

Grouping lets you collapse many rows of detail into a smaller summary table. Use it when you want to answer questions like "how many hours did each staff member work last month?" or "how many shifts ran at each site this week?" — instead of seeing every individual shift.

This article walks through how grouping works, the controls you'll see in the Reports page, and a few common recipes.

When should I group?

Group a report when you want totals or counts per category, rather than a row-by-row breakdown.

You want to know...

Group by

Result

Total hours each staff member worked this month

Staff

One row per staff member with their total hours

How many shifts happened at each site

Site

One row per site with a shift count

Daily total hours per role

Date, Shift Role

One row per day per role with summed hours

Cost of NDIS interactions per participant

Participant

One row per participant with total billed

If you just want the underlying detail (every shift listed individually), don't group — leave Group By empty and you'll get one row per record.

How to use grouping

  1. Build your report normally — pick a Data Source, choose Columns, add any Filters.

  2. Open the Options step.

  3. Under Group by, click the columns you want to group on. They'll turn dark to show they're selected.

  4. Click Run Report.

That's it. The results table at the bottom will collapse rows that share the same combination of grouped values into a single row.

Reading the grouping bar

When you run a grouped report, a strip appears above the results table:

Grouped by [Date ✕] [Staff ✕] 12 groups from 84 source rows · 7.0× aggregation Clear grouping

This combines rows that have the same "Date" and "Staff" into a single row. "Duration (Hours)" will be totalled for each group.

Here's what each part means:

  • The chips (Date, Staff) are the columns you grouped on. Click the on any chip to remove that column from grouping and immediately re-run the report.

  • "12 groups from 84 source rows" — your filtered query found 84 underlying records, and grouping collapsed them into 12 unique combinations.

  • "7.0× aggregation" — on average, each group contains 7 source rows. Higher numbers mean grouping is doing more for you. Numbers near 1 mean grouping is barely reducing the table.

  • The italic sentence below describes in plain English what the current grouping will do, including which numeric columns will be totalled. It updates live as you change the chips.

  • Clear grouping removes all grouping and re-runs the report.

The "Rows" column

When grouping is active, an extra column called Rows appears at the end of the table. It tells you how many original records were collapsed into each row.

For example, if a row reads:

Date

Staff

Duration (Hours)

Rows

15 Apr 2026

Joe Doe

17.5

3

That means Adamus Prime worked 3 separate shifts on 15 April 2026, and the total of those three shifts was 17.5 hours.

You can sort by the Rows column to see your largest groups first.

What gets totalled?

When you group, every numeric column you've selected that isn't in the Group By list gets summed automatically. For example:

  • Duration (Hours) → totalled per group

  • Break (minutes) → totalled per group

  • Total Cost (in NDIS Invoicing) → totalled per group

Non-numeric columns (text fields like Status, Notes, Site Name, etc.) must either be in the Group By list or be removed from the Columns selection — there's no sensible way to "sum" text. If you select a non-numeric column without grouping it, the report builder will warn you on the Options step and the Run Report button will be disabled until you fix it.

The auto-fix buttons next to each warning will either Add to Group By (so it becomes part of the grouping key) or Remove column (so it disappears from the report) in one click.

Recipe book

Common groupings that produce useful reports:

Hours per staff member per month

  • Source: Shifts

  • Columns: Staff, Duration (Hours)

  • Filters: Date between 1 Apr 2026 and 30 Apr 2026

  • Group by: Staff

  • Sort: Duration (Hours) descending

Result: one row per staff member with their total hours for April, biggest at the top.

Daily total hours per site

  • Source: Shifts

  • Columns: Date, Site, Duration (Hours)

  • Group by: Date, Site

Result: one row per Date/Site combination with summed hours. Easy to spot a quiet day or a busy weekend.

Compliance certificates expiring soon, by branch

  • Source: Compliance

  • Columns: Branch, Days Until Expiry

  • Filters: Days Until Expiry <= 30

  • Group by: Branch

Result: one row per branch showing how many staff have certificates expiring within 30 days (the Rows column tells you the count).

NDIS billing per participant

  • Source: NDIS Invoicing

  • Columns: Participant, Units, Total Cost

  • Filters: Interaction Start between start of month and end of month

  • Group by: Participant

  • Sort: Total Cost descending

Result: one row per participant with their billable units and total cost for the period.

Why isn't my grouping working?

If your grouped report has nearly as many rows as your unfiltered data, your grouping is probably too granular.

The most common cause is including time-based columns like Start Time or End Time in Group By. Because every shift has a slightly different start and end time, two rows almost never share an exact combination — so almost every shift becomes its own group, and the table doesn't shrink.

The grouping bar will warn you when this happens:

⚠ Each group is averaging 1.3× source rows — grouping is barely reducing the table. Try removing "Start Time" or "End Time" from Group By.

Click the suggested Remove "Start Time" / Remove "End Time" links and the report will re-run with much more meaningful aggregation.

A good rule of thumb: group on coarse columns (Date, Staff, Site, Role, Branch, Participant) and avoid grouping on fine-grained ones (exact times, IDs, durations). If you want to see results bucketed by week or month rather than by exact date, that's coming in a future update — for now, group by Date and use a filter to narrow the range.

Grouping and search

Search is disabled when grouping is active. Search filters individual records before they're grouped, which would silently drop matched records into seemingly unrelated groups — confusing more often than it helps.

If you switch from an ungrouped to a grouped report and you had a search query active, you'll see a notice that the search was cleared. To search within grouped results, clear the grouping first.

Grouping and exports

CSV and PDF exports include exactly what you see on screen — including the Rows column and the totals for each group. The header row of the CSV will read Date, Staff, Duration (Hours), Rows and the row totals will be the sums you see in the table.

If you want the underlying detail rows in your export, clear grouping before exporting. With no Group By, every record is exported individually.

Grouping and pagination

Pagination works on groups, not source rows. If your report shows "101 groups · 1/5", that means 101 unique groupings split across 5 pages of 25 each. Sort and pagination apply to the grouped output.

Sorting a grouped report

You can only sort by columns that are either:

  • in the Group By list, or

  • numeric columns we've totalled.

Trying to sort by an ungrouped, non-numeric column (e.g. Notes when you've grouped by Staff) will be blocked with a clear message. To enable that sort, either add the column to Group By, remove it from your selection, or pick a different sort column.

A note on timezones

When you group by Date on a column that's actually a date-and-time (like a shift's Start Time), the date is calculated using your computer's timezone. So a Sydney user grouping by date will see a shift that started at 11:30 PM AEST on 14 April under "14 Apr", while the same shift might appear under "13 Apr" in UTC.

This matches what you see in the table itself — the Date and Start Time columns are always shown in your local timezone, and grouping bins them the same way.

Quick reference

Control

What it does

Group by chip in Options step

Adds a column to the grouping key

on a chip in the grouping bar

Removes that column from grouping

Clear grouping

Removes all grouping

Rows column

Shows how many source records are in each group

"X groups from Y source rows"

Shows how much grouping has compressed the dataset

"× aggregation" number

Higher = more aggregation. Numbers near 1 mean grouping isn't doing much

Plain-English description

Human-readable summary of what the current grouping will do

Low-yield warning

Suggests specific columns to remove when grouping isn't reducing rows

If you have a reporting question this article didn't answer, or you'd like to see a new grouping recipe added, contact support.


Did this answer your question?