Which technicians generate the most billable output, which ones fall below target, and how client coverage is distributed across the team. Generated by AI via Proxuma Power BI MCP server.
Which technicians generate the most billable output, which ones fall below target, and how client coverage is distributed across the team. 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
Which technicians generate the most billable output, which ones fall below target, and how client coverage is distributed across the team. Generated by AI via Proxuma Power BI MCP server.
EVALUATE
ROW(
"TotalHoursWorked", [Company - Hours Worked],
"TotalBillableHours", [Company - Billable Hours],
"BillablePct", DIVIDE([Company - Billable Hours], [Company - Hours Worked]),
"TotalResources", DISTINCTCOUNT(BI_Autotask_User_Details[resource_user_name])
)
All resources ranked by billable output. This is the direct answer: who is productive and who is not.
| # | Technician | Hours Worked | Billable Hrs | Bill % | Hours to Bill | Clients | Status | |
|---|---|---|---|---|---|---|---|---|
| 1 | Sarah Johnson | 2,473 | 2,261 | 91% | 2,744 | 29 | Excellent | |
| 2 | Mr. Robert Davis | 1,137 | 1,013 | 89% | 1,168 | 21 | Excellent | |
| 3 | James Wilson | 37,154 | 27,087 | 73% | 40,760 | 45 | Good | |
| 4 | Dr. Michael Chen | 2,368 | 1,721 | 73% | 2,467 | 14 | Good | |
| 5 | Emma Thomas | 1,738 | 1,116 | 64% | 1,745 | 10 | Below Target | |
| 6 | Gregory Horn | 1,362 | 821 | 60% | 1,392 | 25 | Below Target |
EVALUATE
ADDCOLUMNS(
SUMMARIZE(
BI_Autotask_Time_Entries,
BI_Autotask_User_Details[resource_user_name]
),
"HoursWorked", SUM(BI_Autotask_Time_Entries[hours_worked]),
"BillableHours", SUM(BI_Autotask_Time_Entries[Billable Hours]),
"BillablePct", DIVIDE(
SUM(BI_Autotask_Time_Entries[Billable Hours]),
SUM(BI_Autotask_Time_Entries[hours_worked])
),
"HoursToBill", SUM(BI_Autotask_Time_Entries[hours_to_bill]),
"ClientCount", DISTINCTCOUNT(BI_Autotask_Time_Entries[company_name])
)
ORDER BY [BillableHours] DESC
Detail on the technicians who consistently convert working time into billable output
The highest billable percentage in the team. Sarah logged 2,473 total hours and kept 91% of them billable. She serves 29 unique clients, which shows she is not padding hours on a single account. Her hours-to-bill figure of 2,744 means she is generating more billable output than her hours worked, likely through value-based billing or after-hours entries. This is the benchmark for the team.
Second-highest billable rate at 89% across 1,137 total hours. Robert covers 21 clients, giving him a solid breadth of experience. His hours-to-bill of 1,168 slightly exceeds total hours worked, which points to efficient time tracking and correct billing categorization.
James is the volume leader by a wide margin. At 37,154 total hours and 27,087 billable, he generates more raw billable output than the rest of the team combined. His 73% rate is above the 70% threshold, but the sheer scale of his non-billable hours (10,067) is worth examining. With 45 clients, he touches nearly every account. The hours-to-bill figure of 40,760 suggests significant billing value above hours worked.
Matches James Wilson's billable rate at 73% across 2,368 hours. Michael serves fewer clients (14), which could indicate a specialization focus or a smaller assigned client base. His efficiency is solid, with 647 non-billable hours that are worth reviewing for potential reclassification.
EVALUATE
FILTER(
ADDCOLUMNS(
SUMMARIZE(
BI_Autotask_Time_Entries,
BI_Autotask_User_Details[resource_user_name]
),
"HoursWorked", SUM(BI_Autotask_Time_Entries[hours_worked]),
"BillableHours", SUM(BI_Autotask_Time_Entries[Billable Hours]),
"BillablePct", DIVIDE(
SUM(BI_Autotask_Time_Entries[Billable Hours]),
SUM(BI_Autotask_Time_Entries[hours_worked])
),
"HoursToBill", SUM(BI_Autotask_Time_Entries[hours_to_bill]),
"ClientCount", DISTINCTCOUNT(BI_Autotask_Time_Entries[company_name])
),
[BillablePct] >= 0.70
)
ORDER BY [BillablePct] DESC
Resources whose billable percentage falls below the 70% target. These are coaching and process improvement opportunities.
| Resource | Billable Hrs | Total Hrs | Util % | Entries |
|---|---|---|---|---|
| Maxwell Reed | 1,838 | 2,050 | 89.6% | 4,513 |
| Dr. Amber Ayala DVM | 1,749 | 2,400 | 72.9% | 2,043 |
| Andrew Roberts | 1,527 | 1,888 | 80.9% | 3,705 |
| David Hunt | 1,416 | 1,862 | 76.0% | 672 |
| Daniel Daniels | 1,344 | 1,418 | 94.7% | 4,841 |
Emma Thomas is 6 percentage points below the 70% threshold. With 622 non-billable hours out of 1,738 total, over a third of her time is not generating revenue. She serves only 10 clients, the fewest of anyone in the team. This pattern could mean she is handling internal projects, spending time on admin tasks, or working on tickets that are incorrectly categorized as non-billable.
Gregory Horn has the lowest billable rate at 60%, which is 10 points below target. What stands out is that he serves 25 clients, the second highest count in the team. That many accounts with a low billable rate suggests he is spending significant time on small, non-billable tasks across many clients. Context switching between 25 accounts also carries a hidden productivity cost. Review whether some of those client relationships can be consolidated or reassigned.
EVALUATE TOPN(15, SUMMARIZECOLUMNS('BI_Autotask_Time_Entries'[resource_name], "TotalHours", SUM('BI_Autotask_Time_Entries'[hours_worked]), "BillableHours", SUM('BI_Autotask_Time_Entries'[Billable Hours]), "NonBillableHours", SUM('BI_Autotask_Time_Entries'[Non billable Hours]), "EntryCount", COUNTROWS('BI_Autotask_Time_Entries')), [BillableHours], DESC)
How many clients each technician serves, and whether client coverage is concentrated or distributed
| Technician | Clients Served | Hours/Client | Bill % | Spread |
|---|---|---|---|---|
| James Wilson | 45 | 826 | 73% | Wide |
| Sarah Johnson | 29 | 85 | 91% | Wide |
| Gregory Horn | 25 | 55 | 60% | Wide |
| Mr. Robert Davis | 21 | 54 | 89% | Moderate |
| Dr. Michael Chen | 14 | 169 | 73% | Moderate |
| Emma Thomas | 10 | 174 | 64% | Narrow |
There is a clear correlation between client count and role in this data. James Wilson touches 45 clients with an average of 826 hours per client. That volume indicates he is likely a shared resource or team lead who logs time across the entire portfolio. Gregory Horn serves 25 clients but only at 55 hours per client, which means he is doing quick, small tasks across many accounts. That is a recipe for context-switching overhead and could explain his low billable rate.
Emma Thomas with only 10 clients at 174 hours each is at the other end. She goes deep on fewer accounts. That focus should translate into higher billable rates, so her 64% suggests something else is absorbing her time. Worth investigating whether internal projects or non-client work is the cause.
EVALUATE
ADDCOLUMNS(
SUMMARIZE(
BI_Autotask_Time_Entries,
BI_Autotask_User_Details[resource_user_name]
),
"ClientCount", DISTINCTCOUNT(BI_Autotask_Time_Entries[company_name]),
"HoursPerClient", DIVIDE(
SUM(BI_Autotask_Time_Entries[hours_worked]),
DISTINCTCOUNT(BI_Autotask_Time_Entries[company_name])
),
"BillablePct", DIVIDE(
SUM(BI_Autotask_Time_Entries[Billable Hours]),
SUM(BI_Autotask_Time_Entries[hours_worked])
)
)
ORDER BY [ClientCount] DESC
The portfolio-wide billable rate of 75.6% is above the typical MSP benchmark of 65-70%, which is a solid starting point. But that number is heavily influenced by James Wilson, whose 37,154 hours represent 73% of all hours logged. Remove him, and the remaining five technicians average around 74% billable. The team is performing at or near target, with two clear exceptions.
Sarah Johnson is the standout. At 91% billable across 2,473 hours and 29 clients, she converts more of her working time into revenue than anyone else. Her pattern is worth studying. Is she better at categorizing time entries? Does she avoid internal meetings? Is her client mix naturally more billable? Whatever it is, the rest of the team should learn from it.
Gregory Horn is the most actionable concern. His 60% billable rate is the lowest in the team, but he serves 25 clients. That combination means he is doing small, fragmented work across many accounts. Each client switch carries a cognitive cost, and his non-billable hours (541) suggest a lot of time lost to admin, travel, or internal tasks. Reducing his client count from 25 to 15 and redistributing the rest could have a measurable impact on his output.
Emma Thomas at 64% is also below target. She has the fewest clients (10) but deep engagement per account (174 hours each). Her non-billable hours (622) are high for her volume. The most likely explanation is internal project work or time that should be billed but is not tagged correctly in Autotask. A time entry audit for her last 30 days would clarify this quickly.
The hours-to-bill figures are worth noting. James Wilson's hours to bill of 40,760 compared to 37,154 hours worked shows a 10% uplift, likely from fixed-fee contracts or value-based billing. Sarah Johnson shows a similar pattern at 2,744 vs. 2,473. If this uplift is intentional, it is working well. If not, it could indicate time entry errors that inflate billing projections.
5 priorities based on the findings above
At 60% billable with 541 non-billable hours spread across 25 clients, Gregory is losing too much time to context switching and non-revenue work. Pull his time entries for the last 60 days and categorize the non-billable hours by type. Then look at his 25 client accounts. Which ones generate fewer than 20 hours each? Those are candidates for reassignment. Getting him to 70% would recover roughly 136 additional billable hours from the same total time commitment.
Emma's 64% billable rate with only 10 clients does not fit the pattern of someone overloaded by account switching. Her 622 non-billable hours likely contain miscategorized entries, internal project time, or admin overhead. Check her last 30 days of time entries in Autotask and look for entries marked as non-billable that could be reclassified. Bringing her to 70% would recover roughly 104 billable hours.
Sarah at 91% billable is significantly above everyone else. Find out why. Is it her time entry discipline? Her client mix? The way her tickets are dispatched? Understanding her workflow gives you a playbook to share with the rest of the team. Even a 5% improvement across the other five resources would recover hundreds of billable hours per year.
James shows 40,760 hours to bill against 37,154 hours worked. That 10% premium is either intentional (fixed-fee contracts, value billing) or a data quality issue. If 3,600 hours of overbilling are incorrect, it would affect revenue forecasting. Check whether his billing rules in Autotask match the contract terms for his top 10 accounts.
The portfolio is at 75.6% already. Setting an explicit 75% target makes it measurable and accountable. Run this report monthly. Resources consistently below 70% get a one-on-one review. Resources consistently above 85% get recognition. The numbers are already here. You just need to make them visible to the team.
All data comes from Autotask PSA time entries (BI_Autotask_Time_Entries) and resource details (BI_Autotask_User_Details) through Proxuma Power BI. Hours worked, billable hours, and hours to bill are recorded per time entry. The AI groups them by resource name, calculates percentages, and counts distinct client companies.
Most MSP industry benchmarks target 65-75% billable for service desk and field technicians. Senior engineers or project resources often run 60-70% because of planning and documentation time. Anything below 60% for a front-line technician usually signals a process problem, not a workload problem.
Billable hours are the time entries marked as billable in Autotask. Hours to bill is the amount that will actually appear on the invoice, which can differ due to billing rules, fixed-fee contracts, minimum billing increments, or rounding. When hours to bill exceeds billable hours, it usually means the contract applies a markup or minimum charge.
In this demo data, James Wilson's 37,154 hours represent a resource with a very long history in the PSA or a team lead who logs time across many accounts. In production data, this could indicate a dispatching bottleneck (one person getting too many tickets), a naming consolidation issue, or a genuinely long-tenured resource. The key metric is billable percentage, not raw volume.
Yes. Add a date filter to the DAX query using the date column on BI_Autotask_Time_Entries. For example, filtering to the last quarter gives a more recent picture of each technician's current performance, rather than a cumulative lifetime view.
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