How many hours did each technician log versus their available capacity? This report breaks down total hours, billable hours, and utilisation rates across 76 resources to identify who is stretched thin and who has room for more work.
How many hours did each technician log versus their available capacity? This report breaks down total hours, billable hours, and utilisation rates across 76 resources to identify who is stretched thin and who has room for more work.
The data covers the full scope of Autotask PSA records relevant to this analysis, broken down by the key dimensions your team needs for day-to-day decisions and client reporting.
Who should use this: Operations managers, service delivery leads, and MSP owners managing capacity
How often: Weekly for scheduling, monthly for utilization reviews, quarterly for staffing decisions
How many hours did each technician log versus their available capacity? This report breaks down total hours, billable hours, and utilisation rates across 76 resources to identify who is stretched thin and who has room for more work.
Total hours worked per resource, sorted highest to lowest. Resource A leads with 2,400 hours, while the bottom of the top 12 still logs over 1,400 hours.
EVALUATE ROW("TotalEntries", COUNTROWS('BI_Autotask_Time_Entries'), "TotalHours", SUM('BI_Autotask_Time_Entries'[hours_worked]), "BillableHours", SUM('BI_Autotask_Time_Entries'[Billable Hours]), "ResourceCount", DISTINCTCOUNT('BI_Autotask_Time_Entries'[resource_name]), "AvgHoursPerResource", DIVIDE(SUM('BI_Autotask_Time_Entries'[hours_worked]), DISTINCTCOUNT('BI_Autotask_Time_Entries'[resource_name])))
Stacked breakdown per resource. The teal segment is billable, the slate segment is non-billable. Resources with large grey segments need closer review.
EVALUATE
ROW(
"TotalHoursWorked", [Company - Hours Worked],
"TotalHoursBilled", [Company - Hours Billed],
"TotalRevenue", [Revenue - Total]
)
Overall billable utilisation at 75.6%. The donut shows the team-wide split. The table ranks all 12 resources by utilisation percentage, with entry counts for context.
| Resource | Hours Worked | Billable Hrs | Non-Billable | Utilisation | Entries |
|---|---|---|---|---|---|
| Resource L | 1,433 | 1,308 | 125 | 91.3% | 340 |
| Resource D | 2,050 | 1,838 | 213 | 89.6% | 4,513 |
| Resource E | 1,888 | 1,527 | 361 | 80.9% | 3,705 |
| Resource H | 1,585 | 1,228 | 357 | 77.5% | 1,278 |
| Resource F | 1,862 | 1,416 | 446 | 76.0% | 672 |
| Resource K | 1,492 | 1,094 | 399 | 73.3% | 1,634 |
| Resource A | 2,400 | 1,749 | 651 | 72.9% | 2,043 |
| Resource G | 1,780 | 1,157 | 623 | 65.0% | 733 |
| Resource J | 1,505 | 957 | 548 | 63.6% | 3,398 |
| Resource B | 2,136 | 1,303 | 833 | 61.0% | 2,236 |
| Resource C | 2,060 | 1,145 | 915 | 55.6% | 715 |
| Resource I | 1,554 | 819 | 735 | 52.7% | 850 |
EVALUATE
TOPN(12,
ADDCOLUMNS(
VALUES('BI_Autotask_Time_Entries'[resource_name]),
"HrsWorked", CALCULATE(SUM('BI_Autotask_Time_Entries'[hours_worked])),
"HrsBillable", CALCULATE(SUM('BI_Autotask_Time_Entries'[Billable Hours])),
"EntryCount", CALCULATE(COUNTROWS('BI_Autotask_Time_Entries')),
"Utilisation", DIVIDE(
CALCULATE(SUM('BI_Autotask_Time_Entries'[Billable Hours])),
CALCULATE(SUM('BI_Autotask_Time_Entries'[hours_worked]))
)
),
[HrsWorked], DESC
)
Number of time entries per resource shows how work volume is spread. Resources D, E, and J handle the bulk of ticket-based entries, while C, F, and L operate on fewer, longer entries typical of project work.
Resource C (55.6%, 2,060 hrs) and Resource I (52.7%, 1,554 hrs) together log 3,614 hours with 1,650 non-billable hours between them. If these two were brought to the team average of 75.6%, that would convert roughly 720 hours to billable work.
With only 1,433 total hours and 340 entries, Resource L converts nearly every hour to billable work. This is the benchmark for efficiency. The low entry count suggests focused, project-style work where tracking is tight.
Resource D (4,513 entries, 89.6%) and Resource E (3,705 entries, 80.9%) both process large ticket volumes and stay above the team average. Reactive ticket work naturally fills billable hours. Resources with fewer entries but similar total hours tend to drift lower.
At 2,136 hours with 833 non-billable, Resource B is one of the busiest people on the team yet converts barely three out of every five hours. That is 833 hours of capacity not generating revenue. The 2,236 entry count is respectable, so this is not a tracking problem.
The team is working plenty of hours. The issue is what those hours are spent on. At 50,752 total hours across 76 resources, the average comes out to 668 hours per person. That is well above a baseline capacity of 520 hours per quarter (40h/week x 13 weeks). The team is not underworked.
The 24.4% gap between actual billable rate (75.6%) and an 85% target represents roughly 4,770 hours. Those hours are logged but not billed. Some of that is legitimate internal work, training, and admin. But the spread between top performers (Resource L at 91.3%) and bottom performers (Resource I at 52.7%) is almost 39 percentage points. That variation is too wide for a team of this size.
Entry count reveals the nature of the work. Resources D, E, and J each process over 3,000 entries. They are handling high-volume reactive tickets, and their billable rates reflect that: 89.6%, 80.9%, and 63.6% respectively. Resource C logs 2,060 hours on just 715 entries, meaning an average of 2.9 hours per entry. That signals project work or long-running tasks, which is fine as long as the billing is correct.
Resource A is the top hour-logger at 2,400 hours but sits at only 72.9% billable. That means 651 non-billable hours. For the person putting in the most time, that volume of non-billable work needs a closer look. It could be team lead responsibilities, internal tooling, or simply tasks that should be recategorized.
Practical steps to close the utilisation gap and balance workload across the team.
Pull every non-billable time entry for these three resources over the last 90 days. Categorize them into internal projects, admin, training, or misclassified. Target: identify at least 40% of non-billable hours that should be reclassified or eliminated. Set individual billable targets of 70% for the next quarter.
Make each person's billable percentage visible on a weekly basis. Resources that can see their own numbers tend to self-correct. Set the team target at 80% and flag anyone below 65% for a manager conversation. The data is already in Power BI; it just needs a dedicated view.
At 2,400 total hours, Resource A is the hardest-working person on the team. If 651 non-billable hours include legitimate lead responsibilities (mentoring, escalations, process work), those should be tracked separately rather than dragging down the utilisation metric. Create a "team lead" work type if one does not exist.
Billable hours are time entries where the billable flag is set to true in Autotask. Non-billable includes internal meetings, training, admin tasks, and any entry explicitly marked as non-billable by the technician or contract billing rules.
Utilisation is billable hours divided by total hours worked, expressed as a percentage. A resource who logs 80 billable hours out of 100 total hours has 80% utilisation. It does not factor in capacity or available hours, only what was actually logged.
Most MSPs target between 75% and 85% billable utilisation. Below 70% usually signals either too much internal work or poor time tracking. Above 90% can mean a resource is stretched thin with no capacity for unplanned work or professional development.
That usually indicates project-based work. A single time entry might cover multiple hours on a migration, deployment, or infrastructure project. This is different from reactive ticket work where each entry is typically shorter. Both patterns are normal, but project-based resources need more attention to ensure billable tracking is accurate.
Yes. Copy any query from the toggles above and paste it into DAX Studio or the Power BI Desktop performance analyzer. The queries reference standard Proxuma data model tables and measures that exist in every Proxuma Power BI deployment.
Weekly for capacity tracking and monthly for the utilisation trends. The weekly view catches overworked or idle resources before it becomes a pattern. The monthly view reveals whether changes to workload distribution are actually sticking.
Connect Proxuma Power BI to your PSA, RMM, and M365 environment, use an MCP-compatible AI to ask questions, and generate custom reports - in minutes, not days.
See more reports Get started