> ## 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 figure a TimeTracker report can calculate – hours, counts, money, cost, revenue, margin, budget and attendance – with its meaning and its source.

A metric is a number a report works out for a group of records. This page lists every one, what it means, how it is calculated, and which source it belongs to.

## How to read this page

| Column           | Meaning                                                                             |
| ---------------- | ----------------------------------------------------------------------------------- |
| **Metric**       | The label you see in the column catalog                                             |
| **Means**        | What the number tells you                                                           |
| **Rolled up by** | How the number is combined for a group                                              |
| **Needs**        | The capability required to see it. Blank means everyone with report access sees it. |

Four roll-up kinds appear:

* **Sum** – the values are added together
* **Count** – the number of records
* **Distinct** – the number of different values
* **Ratio** – one figure divided by another, shown as a percentage
* **Average** – the mean across the records

<Warning>
  A metric only exists on its own source. Asking a time-entries report for **Budget** returns *"can't be calculated on this report yet"*. Match the metric to the source before you build.
</Warning>

***

## Time entries

### Time totals

| Metric                | Means                                                      | Rolled up by | Needs |
| --------------------- | ---------------------------------------------------------- | ------------ | ----- |
| **Reported time**     | Total tracked duration in the group                        | Sum          | –     |
| **Billable time**     | Tracked duration flagged billable                          | Sum          | –     |
| **Non-billable time** | Tracked duration flagged non-billable                      | Sum          | –     |
| **Approved time**     | Duration in an approved or locked state                    | Sum          | –     |
| **Invoiced time**     | Duration already attached to an invoice line               | Sum          | –     |
| **Uninvoiced time**   | Billable, approved or locked duration with no invoice line | Sum          | –     |
| **Timer time**        | Duration captured with the running timer                   | Sum          | –     |
| **Manual time**       | Duration entered by hand after the fact                    | Sum          | –     |
| **Timer %**           | Timer time ÷ Reported time                                 | Ratio        | –     |

### Counts

| Metric      | Means                                                   | Rolled up by | Needs |
| ----------- | ------------------------------------------------------- | ------------ | ----- |
| **Entries** | Number of time entries in the group                     | Count        | –     |
| **Members** | Number of different people who logged time in the group | Distinct     | –     |

### Money

| Metric            | Means                                                       | Rolled up by | Needs                                      |
| ----------------- | ----------------------------------------------------------- | ------------ | ------------------------------------------ |
| **Labor cost**    | Internal cost of the tracked time: cost rate × duration     | Sum          | `time.viewCost`                            |
| **Billing rate**  | The effective billing rate applied to the entry             | Average      | `rate.viewBilling`                         |
| **Revenue**       | Billable value of the tracked time: billing rate × duration | Sum          | `rate.viewBilling`                         |
| **Profit**        | Billable value minus labor cost and expenses                | Sum          | `time.viewCost` **and** `rate.viewBilling` |
| **Profit margin** | Profit ÷ Revenue                                            | Ratio        | `time.viewCost` **and** `rate.viewBilling` |

<Note>
  **Profit** and **Profit margin** need both capabilities, not one. Profit is revenue minus cost, so seeing profit next to cost would let anyone work out the revenue figure they were not meant to see. See [/reports/report-permissions](/reports/report-permissions).
</Note>

***

## Expenses

| Metric             | Means                                            | Rolled up by | Needs           |
| ------------------ | ------------------------------------------------ | ------------ | --------------- |
| **Expense cost**   | The raw amount paid – your internal cost         | Sum          | `time.viewCost` |
| **Billable value** | What the client is billed: amount × (1 + markup) | Sum          | –               |
| **Expenses**       | Number of expenses in the group                  | Count        | –               |

***

## Invoices

### Money on the invoice

| Metric            | Means                                                                                | Rolled up by | Needs |
| ----------------- | ------------------------------------------------------------------------------------ | ------------ | ----- |
| **Invoice total** | The invoice grand total                                                              | Sum          | –     |
| **Subtotal**      | Line items before discount and tax                                                   | Sum          | –     |
| **Discount**      | Total discount applied                                                               | Sum          | –     |
| **Tax**           | Total tax across all named tax lines                                                 | Sum          | –     |
| **Paid**          | Payments received against the invoice                                                | Sum          | –     |
| **Outstanding**   | Total minus paid, credit notes and write-offs. Void and draft invoices are excluded. | Sum          | –     |
| **Invoices**      | Number of invoices in the group                                                      | Count        | –     |

### Receivables aging

Aging is measured from the **due date**.

| Metric         | Means                                  | Rolled up by | Needs |
| -------------- | -------------------------------------- | ------------ | ----- |
| **Current**    | Outstanding, not yet past due          | Sum          | –     |
| **1–30 days**  | Outstanding 1 to 30 days past due      | Sum          | –     |
| **31–60 days** | Outstanding 31 to 60 days past due     | Sum          | –     |
| **61–90 days** | Outstanding 61 to 90 days past due     | Sum          | –     |
| **90+ days**   | Outstanding more than 90 days past due | Sum          | –     |

<Tip>
  Set the report's date basis to **Due date** for an aging report. On the issue date the buckets still calculate, but the period window will not line up with what you are reading.
</Tip>

***

## Projects

This is where budget and profitability live.

| Metric              | Means                                        | Rolled up by | Needs                                      |
| ------------------- | -------------------------------------------- | ------------ | ------------------------------------------ |
| **Budget**          | The project's budget amount                  | Sum          | –                                          |
| **Actual cost**     | Tracked internal cost on the project         | Sum          | `time.viewCost`                            |
| **Tracked value**   | Client-facing billable value of tracked time | Sum          | `rate.viewBilling`                         |
| **Forecast margin** | Forecast margin on the project               | Sum          | `time.viewCost`                            |
| **Profit**          | Tracked value minus actual cost              | Sum          | `time.viewCost` **and** `rate.viewBilling` |
| **Invoiced**        | Sum of invoices attributed to the project    | Sum          | `invoice.manage`                           |
| **Projects**        | Number of projects in the group              | Count        | –                                          |

Money figures fold per currency, so a workspace billing in more than one currency never adds unlike amounts together.

***

## Tasks

| Metric            | Means                                                 | Rolled up by | Needs |
| ----------------- | ----------------------------------------------------- | ------------ | ----- |
| **Estimate (h)**  | Estimated hours on the task                           | Sum          | –     |
| **Tracked**       | Time logged against the task inside the report period | Sum          | –     |
| **Remaining (h)** | Estimate minus tracked, floored at zero               | Sum          | –     |
| **Tasks**         | Number of tasks in the group                          | Count        | –     |

<Note>
  **Remaining** never goes negative. A task that has run 4 hours past a 10-hour estimate shows 0 remaining, not −4. To find overruns, compare **Tracked** against **Estimate (h)** directly.
</Note>

***

## Timesheets

| Metric        | Means                                                                                                              | Rolled up by | Needs |
| ------------- | ------------------------------------------------------------------------------------------------------------------ | ------------ | ----- |
| **Submitted** | The period's total once it has been submitted. A period never submitted counts 0.                                  | Sum          | –     |
| **Approved**  | The period's total once it has been approved. Submitted, changes-requested, withdrawn and missing periods count 0. | Sum          | –     |
| **Periods**   | Number of person-and-period cells, missing ones included                                                           | Count        | –     |

***

## Time off

| Metric       | Means                                                                    | Rolled up by | Needs |
| ------------ | ------------------------------------------------------------------------ | ------------ | ----- |
| **Days**     | Leave amount for requests measured in days. Hour-based requests count 0. | Sum          | –     |
| **Hours**    | Leave amount for requests measured in hours. Day-based requests count 0. | Sum          | –     |
| **Requests** | Number of leave requests in the group                                    | Count        | –     |

<Warning>
  Days and hours are kept apart on purpose. Adding a 2-day request to a 4-hour request would produce a number that means nothing. Group by **Unit** to see both side by side.
</Warning>

***

## Timecard

Durations first, then day counts.

| Metric                     | Means                                                       | Rolled up by | Needs |
| -------------------------- | ----------------------------------------------------------- | ------------ | ----- |
| **Scheduled**              | Expected time for the day                                   | Sum          | –     |
| **Worked**                 | Actual worked time, from closed sessions                    | Sum          | –     |
| **Late**                   | Time late past the scheduled start, beyond the grace period | Sum          | –     |
| **Left early**             | Time left before the scheduled end, beyond the grace period | Sum          | –     |
| **Over scheduled**         | Time worked beyond the expectation, beyond the grace period | Sum          | –     |
| **Days absent**            | Scheduled days with no work recorded                        | Sum          | –     |
| **Days worked on day off** | Days worked when not scheduled                              | Sum          | –     |
| **Days unscheduled**       | Worked days with no schedule assigned                       | Sum          | –     |
| **Days incomplete**        | Days with a session that was never clocked out              | Sum          | –     |
| **Days**                   | Number of person-days in the group                          | Count        | –     |

***

## Where each family lives

The single most useful table on this page.

| You want                         | Use this source | Metrics                                                               |
| -------------------------------- | --------------- | --------------------------------------------------------------------- |
| Hours and the billable split     | Time entries    | Reported, Billable, Non-billable, Approved, Invoiced, Uninvoiced      |
| Cost, revenue and margin on time | Time entries    | Labor cost, Revenue, Profit, Profit margin, Billing rate              |
| **Budget against actual**        | **Projects**    | Budget, Actual cost, Tracked value, Forecast margin, Profit, Invoiced |
| **Estimate against tracked**     | **Tasks**       | Estimate (h), Tracked, Remaining (h)                                  |
| Spend and markup                 | Expenses        | Expense cost, Billable value                                          |
| Receivables and aging            | Invoices        | Outstanding, Paid, Current, 1–30, 31–60, 61–90, 90+                   |
| Submission compliance            | Timesheets      | Submitted, Approved, Periods                                          |
| Leave booked                     | Time off        | Days, Hours, Requests                                                 |
| Attendance against schedule      | Timecard        | Scheduled, Worked, Late, Left early, Days absent                      |

<Warning>
  **The budget family cannot be worked out from time entries.** A time entry records one person's duration – it has no idea what the project was budgeted. Build budget reports on the **Projects** source. This is the most common report-building mistake, and the starter **Budget vs actual** report is on the Projects source for exactly this reason.
</Warning>

## Rounding and money

* Durations are stored to the millisecond and shown in your workspace's time format.
* Money is exact-decimal, folded per currency, and never re-rounded on screen.
* The figure in a CSV, in an Excel file, in a PDF, in a scheduled email and on your screen are the same number to the cent. They come from one calculation, not four.

## Example

Sarah Lin tracks 3 hours on "Homepage wireframes" for Bluebird Coffee – Website Redesign.

| Metric        | Value | Why                     |
| ------------- | ----- | ----------------------- |
| Reported time | 3h    | The duration she logged |
| Billable time | 3h    | The entry is billable   |
| Revenue       | \$300 | \$100/hour × 3 hours    |
| Labor cost    | \$135 | \$45/hour × 3 hours     |
| Profit        | \$165 | $300 − $135             |
| Profit margin | 55%   | $165 ÷ $300             |
| Entries       | 1     | One time entry          |

Priya Raman opens the report and sees Reported time, Billable time and Revenue, because her role can see billing rates. She does not see Labor cost, Profit or Profit margin – those need cost access. Maya Ellis sees all six.

## Permissions

| Metric family                                               | Capability                                 |
| ----------------------------------------------------------- | ------------------------------------------ |
| All time totals, counts, tasks, timesheets, leave, timecard | None beyond `report.view`                  |
| Labor cost, Expense cost, Actual cost, Forecast margin      | `time.viewCost`                            |
| Revenue, Billing rate, Tracked value                        | `rate.viewBilling`                         |
| Profit, Profit margin, project Profit                       | `time.viewCost` **and** `rate.viewBilling` |
| Invoiced                                                    | `invoice.manage`                           |

A metric you may not see is never offered in the column catalog, and never appears in a file you export. If a saved report asks for one, the cell shows a lock and reads **Restricted**.

## What happens next

Once you know which metric answers your question, pick its source and build the report – see [/reports/build-a-report](/reports/build-a-report). The same metric list drives the column catalog, the filter fields and the pivot value.

## Common questions

<AccordionGroup>
  <Accordion title="Why is a metric missing from my column list?">
    Either the source cannot calculate it, or your role may not see it. The catalog only offers metrics that pass both tests.
  </Accordion>

  <Accordion title="Why does Profit need two permissions?">
    Profit is revenue minus cost. Someone who can see cost and profit can subtract one from the other and get revenue. Requiring both closes that gap.
  </Accordion>

  <Accordion title="Does Uninvoiced time include non-billable hours?">
    No. It counts billable, approved or locked time that has no invoice line. Non-billable time was never going on an invoice.
  </Accordion>

  <Accordion title="Why is Approved time different from Submitted time?">
    Approved means a reviewer accepted the week and the time is locked. Submitted only means the person finished and sent it. See [/timesheets/timesheet-statuses](/timesheets/timesheet-statuses).
  </Accordion>

  <Accordion title="Do the totals cover the whole report or just this page?">
    The whole filtered set. A page banner may say only one page of rows is shown, but the totals never come from the visible page.
  </Accordion>
</AccordionGroup>

## Troubleshooting

| Message or symptom                                                | Fix                                                        |
| ----------------------------------------------------------------- | ---------------------------------------------------------- |
| *"X can't be calculated on this report yet. Remove that column."* | The metric belongs to a different source. Switch source.   |
| *"X can't be sorted on this report yet."*                         | You are sorting on a metric this source cannot produce     |
| A money column reads **Restricted**                               | Your role lacks `time.viewCost` or `rate.viewBilling`      |
| Leave **Hours** shows 0 everywhere                                | Your policies are measured in days. Read **Days** instead. |
| Timecard metrics are all empty                                    | The Time Clock app may be off, or nobody clocked in        |

## Related guides

<CardGroup cols={2}>
  <Card title="Report sources" icon="database" href="/reports/report-sources">
    Which source owns which metric family.
  </Card>

  <Card title="Report permissions" icon="lock" href="/reports/report-permissions">
    The cost and rate firewall in detail.
  </Card>

  <Card title="Cost rates" icon="dollar-sign" href="/rates/cost-rates">
    What a person costs you per hour.
  </Card>

  <Card title="Profitability and margin" icon="chart-line" href="/budgets/profitability-and-margin">
    How margin is worked out on a project.
  </Card>

  <Card title="Build a report" icon="wrench" href="/reports/build-a-report">
    Put these metrics into a report.
  </Card>

  <Card title="Glossary" icon="book" href="/concepts/glossary">
    Every term used here, defined once.
  </Card>
</CardGroup>
