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

# Report metrics reference

> Every metric and grouping TimeTracker can report on, listed by source – time entries, expenses, invoices, projects, tasks, timesheets, time off and timecards.

Every number and every grouping a report can produce, by source. A report reads one
source, so the source you pick decides which columns exist.

## The eight report sources

| Source           | What it reports on                                                                          | Default date basis |
| ---------------- | ------------------------------------------------------------------------------------------- | ------------------ |
| **Time entries** | Hours logged by team members, showing billing status, costs and earnings.                   | Entry date         |
| **Expenses**     | Business expenses, including categories, client billing and approval status.                | Expense date       |
| **Invoices**     | Client invoices, payments received, balances owed and overdue bills.                        | Issue date         |
| **Projects**     | Project performance summaries, including budgets, costs, profit margins and health.         | Created            |
| **Tasks**        | Task-level progress showing estimated time, hours logged and time left to finish.           | Created            |
| **Timesheets**   | Weekly or monthly timesheet submissions, showing who submitted and who has missing entries. | Period end         |
| **Time off**     | Vacation, sick leave and other requests, including dates and approval status.               | Start date         |
| **Timecard**     | Daily timecard versus schedule: worked and scheduled time, lateness and absences.           | Date               |

<Warning>
  **Columns do not cross sources.** Budget and estimate numbers live on the Projects
  and Tasks sources. They are not available on Time entries – picking one there is
  refused. If you want budget against tracked time, build the report on **Projects**.
</Warning>

## Groupings every source shares

### Date buckets

| Grouping | Buckets by                                           |
| -------- | ---------------------------------------------------- |
| Day      | The calendar day in the workspace timezone           |
| Week     | The week starting on your workspace's week-start day |
| Month    | The calendar month                                   |
| Quarter  | The calendar quarter                                 |
| Year     | The calendar year                                    |

### Roster groupings

These group rows by a fact about the **person**. They need the `member.changeRole`
capability, because they expose roster data.

| Grouping        | Meaning                        |
| --------------- | ------------------------------ |
| Group           | The member's primary group     |
| Manager         | The member's manager           |
| Job title       | The member's job title         |
| Employment type | Employee, contractor and so on |

Roster groupings are offered where they make sense: all four on Time entries, Group
and Manager and Employment type on Timesheets, and Group on Expenses, Tasks, Time off
and Timecard.

## Time entries

The most-used source. Every hour, with its billing and approval context.

### Group by

| Grouping         | Meaning                                        |
| ---------------- | ---------------------------------------------- |
| Date             | Entry date, bucketed to the report granularity |
| Day of week      | Monday to Sunday, cyclic                       |
| Member           | The person who logged the time                 |
| Project          | The project the entry belongs to               |
| Task             | The task the entry belongs to                  |
| Client           | The client that owns the entry's project       |
| Billable         | Whether the entry is marked billable           |
| Approval status  | Unapproved, approved or locked                 |
| Timesheet status | Submission state of the entry's period         |
| Invoice status   | Invoiced or still uninvoiced                   |
| Source           | Timer or manual                                |

Plus the five date buckets and all four roster groupings.

### Metrics

| Metric            | Unit     | What it counts                                             | Needs                                      |
| ----------------- | -------- | ---------------------------------------------------------- | ------------------------------------------ |
| Reported time     | Duration | Total tracked duration                                     | –                                          |
| Billable time     | Duration | Duration flagged billable                                  | –                                          |
| Non-billable time | Duration | Duration flagged non-billable                              | –                                          |
| Approved time     | Duration | Duration in an approved or locked state                    | –                                          |
| Invoiced time     | Duration | Duration already attached to an invoice line               | –                                          |
| Uninvoiced time   | Duration | Billable, approved or locked duration with no invoice line | –                                          |
| Timer time        | Duration | Duration captured by a running timer                       | –                                          |
| Manual time       | Duration | Duration entered by hand                                   | –                                          |
| Timer %           | Percent  | Share of duration captured by timer                        | –                                          |
| Entries           | Count    | Number of time entries                                     | –                                          |
| Members           | Count    | Distinct members contributing time                         | –                                          |
| Billing rate      | Currency | Effective billing rate applied                             | `rate.viewBilling`                         |
| Revenue           | Currency | Billable value: billing rate × duration                    | `rate.viewBilling`                         |
| Labor cost        | Currency | Internal cost: cost rate × duration                        | `time.viewCost`                            |
| Profit            | Currency | Billable value minus labor cost and expenses               | `time.viewCost` **and** `rate.viewBilling` |
| Profit margin     | Percent  | Profit as a share of revenue                               | `time.viewCost` **and** `rate.viewBilling` |

<Note>
  **Profit and margin need both capabilities.** Holding only one is not enough. That
  stops someone reconstructing a hidden figure from the columns they can see.
</Note>

## Expenses

### Group by

Member · Category · Project · Client · Billable · Date · Approval status ·
Invoice status · Group · the five date buckets

### Metrics

| Metric         | Unit     | What it counts                                   | Needs           |
| -------------- | -------- | ------------------------------------------------ | --------------- |
| Expense cost   | Currency | Raw amount paid – the internal cost              | `time.viewCost` |
| Billable value | Currency | What the client is billed: amount × (1 + markup) | –               |
| Expenses       | Count    | Number of expenses                               | –               |

### Date basis options

Expense date · Date recorded · Date submitted

## Invoices

### Group by

Invoice · Client · Status · Date · AR aging · the five date buckets

**AR aging** buckets by due date: current, 1–30, 31–60, 61–90 and 90+ days past due.

### Metrics

| Metric      | Unit     | What it counts                         |
| ----------- | -------- | -------------------------------------- |
| Total       | Currency | Invoice total                          |
| Subtotal    | Currency | Before discount and tax                |
| Discount    | Currency | Total discount applied                 |
| Tax         | Currency | Total tax across named tax lines       |
| Paid        | Currency | Payments received                      |
| Outstanding | Currency | Still owed                             |
| Invoices    | Count    | Number of invoices                     |
| Current     | Currency | Outstanding not yet past due           |
| 1–30 days   | Currency | Outstanding 1–30 days past due         |
| 31–60 days  | Currency | Outstanding 31–60 days past due        |
| 61–90 days  | Currency | Outstanding 61–90 days past due        |
| 90+ days    | Currency | Outstanding more than 90 days past due |

### Date basis options

Issue date · Due date

## Projects

The source for budget, margin and profitability.

### Group by

Project · Client · Status · Health · the five date buckets

### Metrics

| Metric          | Unit     | What it counts                               | Needs                                      |
| --------------- | -------- | -------------------------------------------- | ------------------------------------------ |
| Budget          | Currency | Project budget amount                        | –                                          |
| Projects        | Count    | Number of projects                           | –                                          |
| Tracked value   | Currency | Client-facing billable value of tracked time | `rate.viewBilling`                         |
| Actual cost     | Currency | Tracked internal cost                        | `time.viewCost`                            |
| Forecast margin | Currency | Forecast margin                              | `time.viewCost`                            |
| Profit          | Currency | Tracked value minus actual cost              | `time.viewCost` **and** `rate.viewBilling` |
| Invoiced        | Currency | Invoice totals attributed to the project     | `invoice.manage`                           |

### Date basis options

Created · Start date · Due date

## Tasks

### Group by

Task · Assignee · Section · Status · Priority · Group · the five date buckets

### Metrics

| Metric        | Unit     | What it counts                          |
| ------------- | -------- | --------------------------------------- |
| Estimate (h)  | Hours    | Estimated hours, summed                 |
| Tracked       | Duration | Tracked time in the report period       |
| Remaining (h) | Hours    | Estimate minus tracked, floored at zero |
| Tasks         | Count    | Number of tasks                         |

### Date basis options

Created · Due date · Start date

## Timesheets

Built for the "who has not submitted yet" question. Missing periods are counted, not
skipped.

### Group by

Status · Member · Period · Group · Manager · Employment type · the five date buckets

The status grouping covers `submitted`, `approved`, `changes_requested` and
`withdrawn`, **plus** periods with no submission at all.

### Metrics

| Metric    | Unit     | What it counts                              |
| --------- | -------- | ------------------------------------------- |
| Submitted | Duration | The period's total once submitted           |
| Approved  | Duration | The period's total once approved            |
| Periods   | Count    | Member-period cells, including missing ones |

## Time off

### Group by

Policy · Member · Status · Unit · Group · the five date buckets

### Metrics

| Metric   | Unit  | What it counts                      |
| -------- | ----- | ----------------------------------- |
| Days     | Count | Leave amount for day-unit requests  |
| Hours    | Count | Leave amount for hour-unit requests |
| Requests | Count | Number of leave requests            |

### Date basis options

Start date · End date

## Timecard

Attendance against the schedule.

### Group by

Member · Status · Group · the five date buckets

### Metrics

| Metric                 | Unit     | What it counts                                   |
| ---------------------- | -------- | ------------------------------------------------ |
| Scheduled              | Duration | Expected time for the day                        |
| Worked                 | Duration | Actual worked time from closed sessions          |
| Late                   | Duration | Time late past the scheduled start, beyond grace |
| Left early             | Duration | Time left before the scheduled end, beyond grace |
| Over scheduled         | Duration | Time worked beyond the expectation, beyond grace |
| Days absent            | Count    | Scheduled days with no work recorded             |
| Days worked on day off | Count    | Days worked when not scheduled                   |
| Days unscheduled       | Count    | Worked days with no schedule assignment          |
| Days incomplete        | Count    | Days with a session that was never clocked out   |
| Days                   | Count    | Timecard day records in the group                |

## Money columns are capability-gated

A column that needs a capability you do not hold is **not offered at all**, and it is
dropped from the result if it was saved earlier by someone else.

| Column family                                          | Capability          |
| ------------------------------------------------------ | ------------------- |
| Billing rate, revenue, tracked value                   | `rate.viewBilling`  |
| Labor cost, actual cost, expense cost, forecast margin | `time.viewCost`     |
| Profit, profit margin                                  | Both of the above   |
| Invoiced (Projects source)                             | `invoice.manage`    |
| Roster groupings                                       | `member.changeRole` |

This is why two people can open the same shared report and see a different number of
columns. See [report permissions](/reports/report-permissions).

## Rows are scoped too

Columns are gated by capability. **Rows** are filtered by your
[supervision scope](/concepts/supervision-scope). Two people running the same report
can get different totals, and both are correct.

## Related guides

<CardGroup cols={2}>
  <Card title="Report sources" icon="database" href="/reports/report-sources">
    Choosing the right source for your question.
  </Card>

  <Card title="Metrics reference" icon="calculator" href="/reports/metrics-reference">
    The metrics in context, with worked examples.
  </Card>

  <Card title="Grouping and pivots" icon="table-columns" href="/reports/grouping-and-pivots">
    Multi-level grouping and pivot tables.
  </Card>

  <Card title="Build a report" icon="hammer" href="/reports/build-a-report">
    Start to finish.
  </Card>

  <Card title="Export a report" icon="file-arrow-down" href="/reports/export-a-report">
    CSV, Excel and PDF.
  </Card>

  <Card title="Report problems" icon="wrench" href="/troubleshooting/report-problems">
    Wrong totals, missing columns, empty results.
  </Card>
</CardGroup>
