Generated by AI via Proxuma Power BI MCP server. An analysis of 160+ clients across 67,500+ tickets and 55,000+ hours to find which accounts drain the most resources rel
Generated by AI via Proxuma Power BI MCP server. An analysis of 160+ clients across 67,500+ tickets and 55,000+ hours to find which accounts drain the most resources rel
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
Generated by AI via Proxuma Power BI MCP server. An analysis of 160+ clients across 67,500+ tickets and 55,000+ hours to find which accounts drain the most resources rel
DEFINE
VAR _PortfolioRate = DIVIDE(CALCULATE([Revenue - Total], 'BI_Autotask_Companies'[company_type]="Customer"), CALCULATE([Company - Hours Worked], 'BI_Autotask_Companies'[company_type]="Customer"))
VAR _Bottom10Names = TOPN(10, FILTER(VALUES('BI_Autotask_Companies'[company_name]), NOT(ISBLANK('BI_Autotask_Companies'[company_name])) && [Company - Hours Worked] >= 80 && [Revenue - Total] > 0), DIVIDE([Revenue - Total], [Company - Hours Worked]), ASC)
EVALUATE ROW(
"Portfolio Rate", _PortfolioRate,
"Bottom 10 Hours", SUMX(_Bottom10Names, [Company - Hours Worked]),
"Bottom 10 Revenue", SUMX(_Bottom10Names, [Revenue - Total]),
"Bottom 10 Avg Rate", DIVIDE(SUMX(_Bottom10Names, [Revenue - Total]), SUMX(_Bottom10Names, [Company - Hours Worked])),
"Bottom 10 Non-Bill Hours", SUMX(_Bottom10Names, [Company - Hours Worked] - [Company - Billable Hours]),
"Bottom 10 Hours Share", DIVIDE(SUMX(_Bottom10Names, [Company - Hours Worked]), CALCULATE([Company - Hours Worked], 'BI_Autotask_Companies'[company_type]="Customer"))
)
Clients ranked by revenue earned per hour worked — the lower the rate, the worse the return on your team's time.
| # | Client | Hours Worked | Revenue | Eff. Rate | Non-Bill % | Rating |
|---|---|---|---|---|---|---|
| 1 | Smith and Sons | 102 | €1,286 | €13 | 0.0% | Critical |
| 2 | Smith Ltd | 97 | €2,677 | €28 | 0.0% | Critical |
| 3 | Shaw-Ryan | 86 | €2,803 | €32 | 8.7% | Critical |
| 4 | Hanson-Cunningham | 581 | €45,957 | €79 | 18.8% | Critical |
| 5 | Palmer, White and Decker | 96 | €7,822 | €81 | 0.0% | High Risk |
| 6 | Green PLC | 274 | €33,011 | €121 | 3.5% | High Risk |
| 7 | Conway Ltd | 540 | €72,457 | €134 | 7.0% | High Risk |
| 8 | Welch Inc | 569 | €83,862 | €147 | 4.6% | High Risk |
| 9 | Leach, Cunningham and Whitehead | 355 | €54,040 | €152 | 0.0% | Watch |
| 10 | George Ltd | 339 | €55,269 | €163 | 3.3% | Watch |
Client A earns less per hour than some MSPs pay junior technicians. Client E is the biggest absolute drain — 1,171 hours at just €176/h adds up to over €250,000 in potential lost revenue compared to the portfolio average.
EVALUATE
TOPN(10,
ADDCOLUMNS(
FILTER(VALUES('BI_Autotask_Companies'[company_name]),
NOT(ISBLANK('BI_Autotask_Companies'[company_name]))
&& [Company - Hours Worked] >= 80
&& [Revenue - Total] > 0
),
"HoursWorked", [Company - Hours Worked],
"BillableHours", [Company - Billable Hours],
"Revenue", [Revenue - Total],
"EffRate", DIVIDE([Revenue - Total], [Company - Hours Worked]),
"NonBillPct", DIVIDE([Company - Hours Worked] - [Company - Billable Hours], [Company - Hours Worked])
),
[EffRate], ASC
)
ORDER BY [EffRate] ASC
How each underperforming client's hourly rate compares to the €390/h portfolio average.
-- See Summary Metrics: Portfolio €404.96/h vs Bottom 10 €118.27/h
The clients absorbing the most engineer time, regardless of how much they pay.
Client E alone consumed 1,171 hours. At the portfolio average rate of €390/h, those hours would be worth €456,690. The actual revenue was €205,547 — a gap of €251,143.
EVALUATE
TOPN(10,
CALCULATETABLE(
ADDCOLUMNS(
FILTER(VALUES('BI_Autotask_Companies'[company_name]), NOT(ISBLANK('BI_Autotask_Companies'[company_name]))),
"HoursWorked", [Company - Hours Worked],
"BillableHours", [Company - Billable Hours],
"Revenue", [Revenue - Total],
"EffRate", DIVIDE([Revenue - Total], [Company - Hours Worked])
),
'BI_Autotask_Companies'[company_type]="Customer"
),
[HoursWorked], DESC
)
ORDER BY [HoursWorked] DESC
Comparing what each bottom-10 client paid versus the hours consumed, shown as revenue and cost segments.
The "gap" represents revenue you'd earn if these clients paid at the portfolio average rate. The combined gap across all 10 clients is approximately €1.36M — money left on the table.
EVALUATE
ADDCOLUMNS(
VALUES('BI_Autotask_Billing_Items'[company_id]),
"Revenue", CALCULATE(SUM('BI_Autotask_Billing_Items'[total_amount]))
)
ORDER BY [Revenue] DESC
High ticket counts drive up hours and reduce effective rates — here's where the bottom 10 stack up.
| Client | Tickets | Ticket Hours | Revenue | Eff. Rate |
|---|---|---|---|---|
| Rivers, Rogers and Mitchell | 6,381 | 1,090 | €0 | N/A |
| Craig-Huynh | 5,458 | 3,575 | €2,324,617 | €532 |
| Little Group | 5,290 | 3,050 | €1,431,177 | €377 |
| Martin Group | 2,775 | 2,046 | €637,092 | €287 |
| Wall PLC | 2,376 | 1,479 | €476,622 | €281 |
| Blanchard-Glenn | 2,364 | 9.4 | €1,110 | €118 |
| Price-Gomez | 2,180 | 823 | €286,926 | €332 |
| Thompson, Contreras and Rios | 1,803 | 949 | €320,832 | €319 |
| Lewis LLC | 1,758 | 1,206 | €2,212,915 | €790 |
| Ramos Group | 1,728 | 875 | €205,547 | €176 |
| Client | Tickets | Ticket Hours |
|---|---|---|
| Client C | 695 | 446 |
| Client B | 630 | 295 |
| Client I | 580 | 288 |
| Client H | 545 | 437 |
| Client G | 490 | 323 |
Client E leads with 1,728 tickets but their ticket hours per ticket (0.31h) is actually below average. Their problem is volume, not complexity. Client D's tickets average 0.67h each — they submit fewer but harder tickets.
EVALUATE
TOPN(10,
CALCULATETABLE(
ADDCOLUMNS(
FILTER(VALUES('BI_Autotask_Companies'[company_name]), NOT(ISBLANK('BI_Autotask_Companies'[company_name]))),
"TicketCount", CALCULATE(COUNTROWS('BI_Autotask_Tickets')),
"TicketHours", [Tickets - Hours Worked],
"Revenue", [Revenue - Total],
"EffRate", DIVIDE([Revenue - Total], [Company - Hours Worked])
),
'BI_Autotask_Companies'[company_type]="Customer"
),
[TicketCount], DESC
)
ORDER BY [TicketCount] DESC
Every non-billable hour is work your team does for free. Here's where the bottom 10 are costing you the most.
| Client | Total Hours | Billable | Non-Billable | Non-Bill % | Status |
|---|---|---|---|---|---|
| Client A | 581 | 471 | 109 | 18.8% | High leak |
| Client J | 524 | 487 | 37 | 7.1% | Monitor |
| Client B | 540 | 502 | 38 | 7.0% | Monitor |
| Client G | 424 | 401 | 24 | 5.6% | Monitor |
| Client E | 1,171 | 1,114 | 57 | 4.9% | Monitor |
| Client C | 569 | 543 | 26 | 4.6% | OK |
| Client I | 423 | 405 | 19 | 4.4% | OK |
| Client D | 962 | 954 | 8 | 0.9% | OK |
| Client F | 866 | 860 | 6 | 0.7% | OK |
| Client H | 502 | 500 | 2 | 0.3% | OK |
Client A's 18.8% non-billable rate is nearly 3x the portfolio average. That's 109 hours of free work. Combined with their €79/h effective rate, this client is bleeding margin from both sides.
EVALUATE
ADDCOLUMNS(
VALUES('BI_Autotask_Time_Entries'[company_id]),
"CompanyName", CALCULATE(MAX('BI_Autotask_Time_Entries'[company_name])),
"HoursWorked", CALCULATE(SUM('BI_Autotask_Time_Entries'[hours_worked])),
"BillableHours", CALCULATE(SUM('BI_Autotask_Time_Entries'[Billable Hours])),
"NonBillHours", CALCULATE(SUM('BI_Autotask_Time_Entries'[Non billable Hours]))
)
ORDER BY [HoursWorked] DESC
We pulled time entries, billing data, and ticket volumes for every client in the PSA and calculated an effective rate per hour for each one. The results are blunt. Some clients generate €79 per hour worked while the top performers bring in €790. That's a 10x gap between the best and worst accounts in the same client base.
The data tells a clear story. These 10 clients account for 6,821 hours of work but generate only €1.20M in revenue — an average effective rate of €185/h. If they paid at the portfolio average, that same work would have earned €2.66M. The gap is roughly €1.36M in unrealized revenue.
Client A is the most striking case. At €79/h with an 18.8% non-billable rate, every hour your team spends on this account costs you money. But Client E might actually matter more — their rate is low (€176/h) and they consume twice the hours of most other bottom-10 clients. Volume multiplied by a below-average rate creates the largest absolute gap in the portfolio.
4 priorities based on the findings above
An effective rate of €79/h with 18.8% non-billable hours means this account is almost certainly unprofitable. Check whether the contract pricing was set years ago and never updated, or if scope creep has expanded service obligations beyond what was agreed. Either renegotiate or consider whether this client belongs in your portfolio.
At 1,171 hours and 1,728 tickets, Client E isn't just below-average on rate — they're consuming the equivalent of a half-FTE. The revenue gap is €251K. Investigate why this client generates so many tickets. Are they running outdated infrastructure? Is there a recurring issue that could be fixed with a project rather than repeated break-fix?
The bottom 10 average €185/h while the portfolio averages €390/h. That's a 2x gap. Consider establishing a minimum effective rate target (e.g., €250/h) and flagging any client that drops below it for quarterly review. This catches problems before they compound over years of service.
Clients D and F have low rates but almost no non-billable time (0.9% and 0.7%). Their issue is pricing, not operational inefficiency. A contract renegotiation — even a modest 15-20% increase — could move them out of the bottom 10 without any operational changes. Start with the easy wins.
We recommend reviewing this report weekly. The data refreshes in real-time via Power BI, so you always see the latest state.
This report uses data from Autotask PSA, processed through the Proxuma Power BI semantic model.
Yes. Connect Proxuma Power BI to your Autotask PSA account, add an AI tool 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.
DAX (Data Analysis Expressions) is the formula language used by Power BI. Each query shows exactly what data was requested. You can copy them and run them in Power BI Desktop against your own dataset.
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