Resource-level breakdown of billable and non-billable hours from Autotask PSA. Generated by AI via Proxuma Power BI MCP server.
Resource-level breakdown of billable and non-billable hours from Autotask PSA. 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: Account managers, MSP owners, and service delivery leads
How often: Monthly for client reviews, quarterly for QBRs, on-demand when client signals change
Resource-level breakdown of billable and non-billable hours from Autotask PSA. Generated by AI via Proxuma Power BI MCP server.
BI_Autotask_Time_Entries table using DAX, and calculated billable vs non-billable totals per resource. All numbers come directly from your Autotask time entries. The queries are shown in toggle blocks throughout this report so you can verify or re-run them yourself.
Across all 77 resources, 75.6% of logged hours went to client-facing work. The remaining 24.4% was non-billable: internal projects, admin, meetings, training, and other overhead. A 75/25 split is within the normal range for MSPs, but there is room to push that ratio closer to 80/20 with targeted changes.
EVALUATE ROW("BillableHours", SUM('BI_Autotask_Time_Entries'[Billable Hours]), "NonBillableHours", SUM('BI_Autotask_Time_Entries'[Non billable Hours]), "TotalHours", SUM('BI_Autotask_Time_Entries'[hours_worked]), "BillableRatio", DIVIDE(SUM('BI_Autotask_Time_Entries'[Billable Hours]), SUM('BI_Autotask_Time_Entries'[hours_worked])))
The table below shows the top 15 resources by total hours. The spread is wide: Resource D spends 89.6% of time on clients, while Resource C is at 55.6%. Both are high-volume resources, so even small percentage shifts have a real impact on capacity.
| Resource | Total Hrs | Billable | Internal | Client % | Internal % |
|---|---|---|---|---|---|
| Resource A | 2,400 | 1,749 | 651 | 72.9% | 27.1% |
| Resource B | 2,136 | 1,303 | 833 | 61.0% | 39.0% |
| Resource C | 2,060 | 1,145 | 915 | 55.6% | 44.4% |
| Resource D | 2,050 | 1,838 | 213 | 89.6% | 10.4% |
| Resource E | 1,888 | 1,527 | 361 | 80.9% | 19.1% |
| Resource F | 1,862 | 1,416 | 446 | 76.0% | 24.0% |
| Resource G | 1,780 | 1,157 | 623 | 65.0% | 35.0% |
| Resource H | 1,585 | 1,228 | 357 | 77.5% | 22.5% |
| Resource I | 1,554 | 819 | 735 | 52.7% | 47.3% |
| Resource J | 1,505 | 957 | 547 | 63.6% | 36.4% |
| Resource K | 1,492 | 1,094 | 399 | 73.3% | 26.7% |
| Resource L | 1,433 | 1,308 | 125 | 91.3% | 8.7% |
| Resource M | 1,418 | 1,344 | 75 | 94.7% | 5.3% |
| Resource N | 1,362 | 1,322 | 40 | 97.1% | 2.9% |
| Resource O | 1,344 | 1,087 | 257 | 80.9% | 19.1% |
Top 10 resources by client-facing %:
EVALUATE
ADDCOLUMNS(
SUMMARIZECOLUMNS(
'BI_Autotask_Time_Entries'[resource_name],
"TotalHours", SUM('BI_Autotask_Time_Entries'[hours_worked]),
"BillableHours", SUM('BI_Autotask_Time_Entries'[Billable Hours]),
"InternalHours", SUM('BI_Autotask_Time_Entries'[Non billable Hours])
),
"ClientPct", DIVIDE([BillableHours], [TotalHours]),
"InternalPct", DIVIDE([InternalHours], [TotalHours])
)
ORDER BY [TotalHours] DESC
Four resources spend more than 35% of their time on internal work: Resource C (44.4%), Resource B (39.0%), Resource I (47.3%), and Resource J (36.4%). Together, those four account for 3,030 non-billable hours, which is nearly a quarter of all internal time across the entire team.
The most striking outlier sits outside the top 15. One resource logged 992 hours with 89.2% classified as internal, only 107 hours were billable. This profile suggests a management role, an internal project lead, or a resource that was misclassified in Autotask. Either way, it is worth confirming whether the role is correct.
On the other end, several resources logged near 99% client time. These tend to be low-hour contractors or specialists deployed exclusively on client projects. They skew the average up, but they are not large enough to move the overall number.
Five resources sit above 80% client-facing time while also logging over 1,000 hours. These are your workhorses: high volume, high utilization, minimal internal overhead. Resource D stands out at 89.6% on 2,050 hours. Resource N is the overall leader at 97.1%, though on a smaller volume of 1,362 hours.
The interesting middle ground sits between 70% and 80%. Resources A, F, K, and H all fall here. They are productive but carry enough internal load to be worth a closer look. In many cases, a 5-point improvement in client % for a resource logging 1,500+ hours frees up 75 or more hours per year.
Almost exclusively client-facing. Only 40 internal hours on 1,362 total. This resource either has zero admin burden or logs internal time elsewhere.
2,050 hours total with only 213 internal. The best combination of volume and efficiency in the dataset.
1,433 hours with only 125 non-billable. Consistent performer with minimal overhead.
EVALUATE
SUMMARIZECOLUMNS(
'BI_Autotask_Time_Entries'[resource_name],
"BillablePct", [Billable % (Autotask Capacity)],
"UnwrittenPct", [Unwritten % (Autotask Capacity)],
"InternalPct", [Internal % (Autotask Capacity)]
)
ORDER BY [BillablePct] ASC
The numbers in the table above are based on logged hours only. They do not account for capacity, which means they miss the third category: unwritten time. A resource might show 75% client and 25% internal, but if they only logged 60% of their available capacity, the real picture is different.
The capacity-based DAX measures (Toggle 3 above) split each resource's available hours into three buckets: billable %, internal %, and unwritten %. Resources with high unwritten percentages are either not logging all their work or have genuine idle capacity. Both are worth investigating.
For context: if 77 resources each have 1,800 hours of annual capacity, the total pool is roughly 138,600 hours. Only 50,752 were logged. That leaves a significant gap, though not all of it is lost. Some resources are part-time, some joined mid-year, and some roles do not require full time entry logging.
Resources B, C, I, and J spend 36-47% of their time on internal work. Combined, that is 3,030 hours of non-billable time. If even half of that is reducible, it represents 1,500 hours of potential billable capacity per year.
A resource outside the top 15 logged 992 hours with only 107 billable. This is likely a manager, trainer, or internal project lead. If the role is correct, the classification should be updated. If the role has changed, the workload needs rebalancing.
Resources D, E, L, M, N, and O all maintain above 80% client time on meaningful volume. This is the benchmark to aim for. Their work patterns are worth studying for the rest of the team.
Pull the actual time entries for these four resources and categorize the internal work. Separate unavoidable overhead (team meetings, mandatory training) from reducible tasks (manual reporting, repeated troubleshooting on internal systems). Set a target to move each resource 5-10 percentage points toward client work within 90 days.
Confirm whether this person's role is intentionally internal-facing. If yes, update the Autotask role or department so they do not skew utilization reports. If no, investigate what is consuming their time and whether any of it can be delegated or automated.
Use the top performers as proof that 80%+ is achievable at scale. Share this report with team leads and set a quarterly goal. Track progress using the capacity measures (Toggle 3) which include unwritten time as well.
Any time entry in Autotask that is classified as non-billable. This includes internal projects, admin tasks, team meetings, training, and anything logged against an internal company or non-billable work type. The classification comes directly from your Autotask setup.
Most MSPs aim for 75-80% client-facing time across the team. Below 70% usually signals too much overhead or a logging problem. Above 85% for the whole team is unusual and may mean internal work is not being tracked.
These are typically contractors or part-time specialists who only log time against client tickets. They do not attend internal meetings or do admin work, or they log that time in a different system. Their ratios are accurate for what they log, but they do not reflect a full-time employee's reality.
The main table shows percentages based on logged hours only. The capacity measures (Toggle 3) add a third dimension: unwritten time. A resource logging 75% client and 25% internal might only be at 60% capacity utilization, meaning 40% of their available hours are not accounted for.
Yes. Add a date filter to the DAX queries using CALCULATETABLE with a filter on the date column. For example, filter to the last 90 days to see recent trends, or compare Q1 vs Q2 to spot seasonal patterns.
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