Skip to main content
Every report reads exactly one data source. The source decides what one row means, which fields you can group and filter by, and which figures can be calculated.

What is a data source?

A data source is a kind of record. Pick Time entries and one row is one logged entry. Pick Invoices and one row is one invoice. You choose the source in the Data section of the builder. Everything downstream follows from it – the column catalog, the filter fields, the grouping options and the date field the period windows on.
A report cannot join two sources. There is no way to put invoice balances on a time-entries report. If a question needs both, build two reports.

Choosing the right source

Budget and estimate figures do not come from time entries. A time entry knows how long someone worked, not what the project was budgeted. Budget, actual cost, tracked value and profit live on the Projects source. Estimate and remaining hours live on the Tasks source. Choosing time entries for a budget question gives you a report that cannot be built.

The date basis

Most records carry more than one date. The date basis is the one the period windows on. Each source declares which dates are allowed and which is the default. An invoice, for example, can be windowed on its issue date or its due date – and an aging report only makes sense on the due date.

Shared fields

Two sets of fields appear on almost every source.

Date buckets

Every source offers five date buckets you can group by:

Roster fields

Sources that have a person on the record also offer roster fields: All four are gated on roster access, so a report can never become a side door onto roster data your role cannot already read. Only sources that can resolve a field offer it – Group is on time entries, expenses, tasks, timesheets, time off and timecard; Manager and Employment type are on time entries and timesheets.

Time entries

One row is one logged time entry. The workhorse source and the default for a new report. Answers: Where did the hours go? How much is billable? What is approved but not yet invoiced? How much revenue and margin did the work carry?

Group and filter by

Figures

Date basis: Entry date only. Who can report on it: anyone with report.view. Rows cover the people your supervision scope reaches.

Expenses

One row is one expense. Answers: What are we spending, on which project, and how much of it is billable to the client?

Group and filter by

Figures

Date basis: Expense date (default), Date recorded, Date submitted. Who can report on it: you need expense approval access (expense.approve). This is workspace-wide expense visibility, not the self-only submit right.

Invoices

One row is one invoice. Answers: Who owes us money? How much is overdue, and by how long? What have we billed this quarter?

Group and filter by

Figures

Date basis: Issue date (default) or Due date. An aging report belongs on the due date. Who can report on it: you need invoice access (invoice.manage) – the same gate that opens the Invoices page.

Projects

One row is one project. This is the budget and profitability source. Answers: Which projects are over budget? Which client is making us money? What have we invoiced against each project?

Group and filter by

Figures

Date basis: Created (default), Start date, Due date. Who can report on it: anyone with report.view. Individual figures are still gated.
This is the only source that can answer a budget question. See /budgets/profitability-and-margin.

Tasks

One row is one task. Answers: Which tasks have blown their estimate? How much work is left? What is sitting in each section?

Group and filter by

Figures

Date basis: Created (default), Due date, Start date. Who can report on it: anyone with report.view.
Estimate and remaining hours live here, not on time entries. See /concepts/budget-vs-estimate.

Timesheets

One row is one person for one period. Periods a person never submitted are included as rows with the status missing, which is what makes this the chase-up report. Answers: Who has not submitted? How much time is submitted but not yet approved? Which group is behind?

Group and filter by

Figures

Date basis: Period end only. A period grid keeps every period that overlaps the window, so no other date field would change the result. Who can report on it: anyone with report.view. Which people’s periods you see is decided per row by your scope – a plain member sees their own.

Time off

One row is one leave request. Answers: How much leave is booked next quarter? Who is off, under which policy? How much is still pending approval?

Group and filter by

Figures

Date basis: Start date (default) or End date. Who can report on it: anyone with report.view. Seeing other people’s leave needs leave.viewOthers; without it you see your own.
Days and hours are never mixed into one number. A policy measured in days contributes only to Days, and a policy measured in hours contributes only to Hours. Group by Unit if you need both on one report.

Timecard

One row is one person on one day. This compares what someone was scheduled to work against what they actually clocked. Answers: Who was late? Who was absent? Who worked on a day off? Where are we over the schedule?

Group and filter by

Figures

Date basis: Date only. Who can report on it: anyone with report.view. Which people’s days you see depends on timecard management or approval access; without it you see your own.
The Timecard source needs the Time Clock app switched on. It is off by default. See /time-clock/overview.

Which figures belong to which source

This is the table that stops a report from being unbuildable. If the builder tells you a figure “is not available yet”, you have asked a source for something it cannot work out. Switch source.

Example

Northwind Studio runs three reports over the same month, from three different sources. Three questions, three sources. None of them could be answered by another.

Permissions

Every source also needs report.view. A source with no extra gate still limits which rows you see, based on your supervision scope – see /concepts/supervision-scope.

Common questions

No. A report reads exactly one source, and there is no join. This is deliberate – a join would let a report pull another source’s cost figures past that source’s own permission check.
You can select them, but running the report needs expense approval or invoice access. Without it the report is refused.
Anything the new source also has is kept. Everything else is dropped, and TimeTracker shows you the exact list before it does anything.
That is the point. The Timesheets source builds a complete grid of every person against every period, so a missing submission is a visible row rather than an absent one.
Whichever date basis the report uses. Each source declares its allowed dates and its default – expenses default to the expense date, invoices to the issue date, projects and tasks to created.

Troubleshooting

Metrics reference

Every figure, its meaning and how it is worked out.

Build a report

Turn a source into a finished report.

Report filters

Narrow a source down to the rows you want.

Budget vs estimate

Why budgets sit on projects and estimates on tasks.

Profitability and margin

How cost, revenue and margin are calculated.

Report permissions

Source gates, the cost firewall and scope.