How each technician splits their time between tickets, projects, and internal work. Which resources handle the most clients. Generated by AI via Proxuma Power BI MCP server.
How each technician splits their time between tickets, projects, and internal work. Which resources handle the most clients. Generated by AI via Proxuma Power BI MCP server.
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 each technician splits their time between tickets, projects, and internal work. Which resources handle the most clients. Generated by AI via Proxuma Power BI MCP server.
EVALUATE TOPN(10, SUMMARIZECOLUMNS('BI_Autotask_Time_Entries'[resource_name], "TotalHours", SUM('BI_Autotask_Time_Entries'[hours_worked]), "BillableHours", SUM('BI_Autotask_Time_Entries'[Billable Hours]), "NonBillable", SUM('BI_Autotask_Time_Entries'[Non billable Hours]), "EntryCount", COUNTROWS('BI_Autotask_Time_Entries')), [TotalHours], DESC)
Segmented bars showing each resource's ticket hours, project hours, and internal hours as a proportion of their total
EVALUATE
TOPN(15,
SUMMARIZE(
BI_Autotask_Time_Entries,
BI_Autotask_Time_Entries[resource_name],
"TotalHours", SUM(BI_Autotask_Time_Entries[hours_worked]),
"TicketHours", CALCULATE(SUM(BI_Autotask_Time_Entries[hours_worked]),
BI_Autotask_Time_Entries[time_entry_type] = 2),
"ProjectHours", CALCULATE(SUM(BI_Autotask_Time_Entries[hours_worked]),
BI_Autotask_Time_Entries[time_entry_type] = 6),
"InternalHours", CALCULATE(SUM(BI_Autotask_Time_Entries[hours_worked]),
BI_Autotask_Time_Entries[time_entry_type] = 10)
),
[TotalHours], DESC
)
ORDER BY [TotalHours] DESC
The exact numbers behind the bars, including time entry count and work type classification per resource
| Resource | Total Hours | Ticket | Project | Internal | Entries | Profile |
|---|---|---|---|---|---|---|
| Resource A | 2,400 | 1,762 | 330 | 119 | 2,043 | Ticket-focused |
| Resource B | 2,136 | 691 | 693 | 586 | 2,236 | Balanced |
| Resource C | 2,060 | 213 | 1,104 | 395 | 715 | Project-heavy |
| Resource D | 2,050 | 1,839 | 7 | 205 | 4,513 | Ticket-focused |
| Resource E | 1,888 | 1,742 | 21 | 99 | 3,705 | Ticket-focused |
| Resource F | 1,862 | 227 | 1,235 | 152 | 672 | Project-heavy |
| Resource G | 1,780 | 616 | 601 | 435 | 733 | Balanced |
| Resource H | 1,585 | 1,421 | 84 | 75 | 1,278 | Ticket-focused |
| Resource I | 1,554 | 1,244 | 37 | 272 | 850 | Ticket-focused |
| Resource J | 1,505 | 968 | 0 | 537 | 3,398 | High internal |
EVALUATE
TOPN(15,
SUMMARIZE(
BI_Autotask_Time_Entries,
BI_Autotask_Time_Entries[resource_name],
"TotalHours", SUM(BI_Autotask_Time_Entries[hours_worked]),
"TicketHours", CALCULATE(SUM(BI_Autotask_Time_Entries[hours_worked]),
BI_Autotask_Time_Entries[time_entry_type] = 2),
"ProjectHours", CALCULATE(SUM(BI_Autotask_Time_Entries[hours_worked]),
BI_Autotask_Time_Entries[time_entry_type] = 6),
"InternalHours", CALCULATE(SUM(BI_Autotask_Time_Entries[hours_worked]),
BI_Autotask_Time_Entries[time_entry_type] = 10),
"EntryCount", COUNT(BI_Autotask_Time_Entries[time_entry_id])
),
[TotalHours], DESC
)
ORDER BY [TotalHours] DESC
Resources ranked by the number of unique companies they have logged time against. A high count signals a generalist or a dispatcher role. A low count may indicate specialization or a dedicated account model.
| Resource | Unique Clients | Total Hours | Time Entries | Spread |
|---|---|---|---|---|
| Resource A | 146 | 1,418 | 4,841 | Very Wide |
| Resource B | 143 | 1,290 | 6,978 | Very Wide |
| Resource C | 143 | 1,505 | 3,398 | Very Wide |
| Resource D | 137 | 1,285 | 3,739 | Wide |
| Resource E | 137 | 1,362 | 4,488 | Wide |
EVALUATE
TOPN(15,
SUMMARIZE(
BI_Autotask_Time_Entries,
BI_Autotask_Time_Entries[resource_name],
"UniqueCompanies", DISTINCTCOUNT(BI_Autotask_Time_Entries[company_name]),
"TotalHours", SUM(BI_Autotask_Time_Entries[hours_worked]),
"TotalEntries", COUNT(BI_Autotask_Time_Entries[time_entry_id])
),
[UniqueCompanies], DESC
)
ORDER BY [UniqueCompanies] DESC
The top 10 resources account for a combined 18,820 hours, which is 37% of the total 50,752 hours logged across all 84 active resources. That concentration is worth watching. If any of these technicians leave or take extended leave, the service capacity hit will be felt immediately.
Resource D and Resource E are almost entirely ticket-focused. Between them, they logged 3,581 ticket hours out of 3,938 total hours. Resource D filed 4,513 time entries. That is roughly 18 entries per working day, which points to either short-burst triage work or an unusually high ticket volume assignment. They handle very few projects (7 and 21 hours respectively), which makes them your front-line reactive capacity.
Resource C and Resource F sit at the opposite end: project-heavy resources. Resource C logged 1,104 project hours (53.6% of their total), and Resource F logged 1,235 (66.3%). These are your delivery team members. The question is whether their project allocation is intentional or whether they are being pulled off ticket queues because projects run over. Check whether their ticket hours are low by choice or because they are unavailable for dispatch.
Resource J stands out for internal hours. Of 1,505 total hours, 537 (35.7%) are classified as internal. That is the highest internal ratio in the top 10. Internal time covers training, meetings, and administrative work, but at 35.7% it is worth confirming whether the classification is correct. Miscategorized internal time inflates the non-billable ratio.
On client spread, the top five resources each serve 137 to 146 unique clients. Resource B is notable: 143 clients with 6,978 time entries, but only 1,290 hours. That is an average of 0.18 hours per entry, roughly 11 minutes. This pattern suggests quick check-ins, password resets, or monitoring follow-ups rather than deep technical work.
The billable percentage of 75.6% is solid for an MSP. Industry benchmarks from Service Leadership sit between 65% and 80%. The remaining 24.4% covers internal tasks, training, and unassigned time. If you want to push utilization higher, look at Resource B's internal hours (586) and Resource G's internal hours (435) first.
5 priorities based on the findings above
With 35.7% of total hours logged as internal, Resource J has the highest non-billable internal ratio in the top 10. Pull their time entries for the last quarter and check whether internal hours are genuinely administrative or misclassified ticket/project work. 537 hours of internal time at a standard billing rate represents meaningful lost revenue if the categorization is wrong.
These two handle 3,581 ticket hours between them, with 8,218 time entries combined. That is a large share of your reactive capacity in two people. If either is unavailable for more than a week, the backlog will grow fast. Cross-train at least one other resource on the ticket types these two handle most frequently.
Both are heavily project-allocated: 53.6% and 66.3% project time respectively. If projects are on schedule and intentionally staffed this way, that is fine. But if your ticket queues are under pressure while these resources sit in projects, consider adjusting the split. Even 10% ticket allocation from each would add approximately 400 ticket hours per year.
Resource B logged 6,978 entries across 143 clients, but only 1,290 hours. That is an average of 11 minutes per entry. If these are monitoring follow-ups or password resets, consider whether they can be automated or batched. If they are underreported time, the actual billable hours may be higher than what is captured.
Run this same DAX query set each quarter to track how the work type split shifts over time. A healthy MSP sees ticket hours grow proportionally with clients, project hours rise during onboarding cycles, and internal hours stay below 20%. 75.6% billable is a strong starting position to build from.
All data comes from Autotask PSA time entries. Every time a technician logs work on a ticket, project, or internal task, it creates a time entry with the hours worked, work type, and associated company. Proxuma Power BI pulls this data through the Autotask connector and the AI queries it using DAX.
Ticket hours (type 2) are reactive work: break-fix, service requests, and incident resolution. Project hours (type 6) are planned delivery work: onboarding, migrations, infrastructure builds. Internal hours (type 10) cover training, meetings, admin, and other non-client-facing time. The classification comes from Autotask's time entry type field.
Industry benchmarks from Service Leadership place the target between 65% and 80% for service desk technicians. Higher is better, but pushing above 85% usually means training and professional development time is being cut. A healthy range sits between 72% and 80%.
A technician who serves 140+ clients is a generalist, likely handling quick tasks and first-response tickets. A technician who serves 10 clients is a specialist or a dedicated resource. Neither is wrong, but the distinction matters for scheduling, escalation paths, and hiring decisions. Wide spread means versatile. Narrow spread means deep knowledge of specific environments.
Yes. Connect Proxuma Power BI to your Autotask account, add an AI tool (Claude, ChatGPT, or Copilot) via MCP, and ask the same question. The AI writes the DAX queries, runs them against your real data, and produces a report like this in under fifteen minutes.
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