“Unique Clients per Technician: Client Spread and Workload Distribution”
Autotask PSA Datto RMM Datto Backup Microsoft 365 SmileBack HubSpot IT Glue All reports
AI-GENERATED REPORT
You searched for:

Unique Clients per Technician: Client Spread and Workload Distribution

Which technicians touch the most clients, how their hours are distributed, and where context-switching is highest. Generated by AI via Proxuma Power BI MCP server.

Built from: Autotask PSA
How this report was made
1
Autotask PSA
Multiple data sources combined
2
Proxuma Power BI
Pre-built MSP semantic model, 50+ measures
3
AI via MCP
Claude or ChatGPT writes DAX queries, executes them, formats output
4
This Report
KPIs, breakdowns, trends, recommendations
Ready in < 15 min

Unique Clients per Technician: Client Spread and Workload Distribution

Which technicians touch the most clients, how their hours are distributed, and where context-switching is highest. 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

Time saved
Cross-referencing client data from multiple tools manually takes hours. This report brings it together.
Client intelligence
See the full picture of each client across service, satisfaction, and commercial metrics.
Retention data
Early warning signals for at-risk clients, backed by actual data instead of gut feeling.
Report categoryClient Management
Data sourceAutotask PSA · Datto RMM · Datto Backup · Microsoft 365 · SmileBack · HubSpot · IT Glue
RefreshReal-time via Power BI
Generation timeUnder 15 minutes
AI requiredClaude, ChatGPT or Copilot
AudienceAccount managers, MSP owners
Where to find this in Proxuma
Power BI › Client Management › Unique Clients per Technician: Client...
What you can measure in this report
Summary Metrics
Unique Clients per Technician — Top 15
Client Spread Analysis — Hours per Client Ratio
High-Volume Outliers — Time Entry Density
Analysis
What Should You Do With This Data?
Frequently Asked Questions
MOST CLIENTS (SINGLE TECH)
AVG CLIENTS PER TECH
ACTIVE RESOURCES
TOTAL HOURS LOGGED
AI-Generated Power BI Report
Unique Clients per Technician:
Client Spread and Workload Distribution

Which technicians touch the most clients, how their hours are distributed, and where context-switching is highest. Generated by AI via Proxuma Power BI MCP server.

Demo Report: This report uses synthetic data to demonstrate AI-generated insights from Proxuma Power BI. The structure, DAX queries, and analysis reflect real MSP data patterns.
1.0 Summary Metrics
MOST CLIENTS (SINGLE TECH)
77
AVG CLIENTS PER TECH
232
ACTIVE RESOURCES
58
TOTAL HOURS LOGGED
50,752
75.6% billable (38,364h)
View DAX Query — Summary Metrics
EVALUATE
ROW(
  "TotalResources", CALCULATE(DISTINCTCOUNT('BI_Autotask_Time_Entries'[resource_name]), 'BI_Autotask_Time_Entries'[hours_worked] > 0),
  "TotalClients", CALCULATE(DISTINCTCOUNT('BI_Autotask_Time_Entries'[company_id]), 'BI_Autotask_Time_Entries'[company_id] <> BLANK()),
  "AvgClientsPerTech", DIVIDE(
    SUMX(VALUES('BI_Autotask_Time_Entries'[resource_name]), CALCULATE(DISTINCTCOUNT('BI_Autotask_Time_Entries'[company_id]))),
    CALCULATE(DISTINCTCOUNT('BI_Autotask_Time_Entries'[resource_name]), 'BI_Autotask_Time_Entries'[hours_worked] > 0)
  )
)
What are these DAX queries? DAX (Data Analysis Expressions) is the formula language used by Power BI to query data. Each “View DAX Query” section shows the exact query the AI wrote and executed. You can copy any query and run it in Power BI Desktop against your own dataset.
2.0 Unique Clients per Technician — Top 15

Resources ranked by the number of distinct companies they have logged time against, with total hours and time entry count for context

Resource A
146
1,418h
Resource B
143
1,290h
Resource C
143
1,505h
Resource D
137
1,285h
Resource E
137
1,362h
Resource F
127
880h
Resource G
122
818h
Resource H
118
1,294h
Resource I
117
768h
Resource J
117
2,136h
Resource K
115
2,050h
Resource L
115
369h
Resource M
115
1,232h
Resource N
109
443h
Resource O
104
1,888h
#ResourceUnique ClientsTotal HoursTime EntriesHours / Client
Daniel Daniels1,4181469.7
Tracy Fitzpatrick1,2901439.0
Gregory Horn1,50514310.5
Brandon Bishop1,3621379.9
Jonathon Burton1,2851379.4
John Mahoney8801276.9
Ronald Smith8181226.7
Paula Lewis MD1,29411811.0
Rose Russell7681176.6
David Collins6031175.2
James Li2,13611718.3
Mr. Craig Peck1,23211510.7
Todd Sloan3691153.2
Maxwell Reed2,05011517.8
David Brown4431094.1
View DAX Query — Unique Clients per Technician (Top 15)
EVALUATE
TOPN(
  15,
  FILTER(
    ADDCOLUMNS(
      SUMMARIZECOLUMNS(
        'BI_Autotask_Time_Entries'[resource_name],
        "LoggedHours", [Total],
        "UniqueClients", CALCULATE(DISTINCTCOUNT('BI_Autotask_Time_Entries'[company_id]))
      ),
      "HoursPerClient", DIVIDE([LoggedHours], [UniqueClients])
    ),
    [LoggedHours] >= 50
  ),
  [UniqueClients], DESC
)
ORDER BY [UniqueClients] DESC
3.0 Client Spread Analysis — Hours per Client Ratio

Hours per client shows depth of engagement. A low ratio (under 7h/client) suggests the technician is touching many clients briefly. A high ratio (over 15h/client) indicates deeper, more sustained involvement.

ResourceClientsHoursHours / ClientPattern
Resource J1172,13618.3Deep + Wide
Resource O1041,88818.2Deep + Wide
Resource K1152,05017.8Deep + Wide
Resource H1181,29411.0Balanced
Resource C1431,50510.5Balanced
Resource M1151,23210.7Balanced
Resource A1461,4189.7Balanced
Resource E1371,3629.9Balanced
Resource D1371,2859.4Balanced
Resource B1431,2909.0Balanced
Resource F1278806.9Shallow + Wide
Resource G1228186.7Shallow + Wide
Resource I1177686.6Shallow + Wide
Resource N1094434.1Spread Thin
Resource L1153693.2Spread Thin
View DAX Query — Client Spread Analysis
EVALUATE
ADDCOLUMNS(
    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])
    ),
    "HoursPerClient", DIVIDE([TotalHours], [UniqueCompanies])
)
ORDER BY [UniqueCompanies] DESC
4.0 High-Volume Outliers — Time Entry Density

Resources with the highest time entry counts relative to their client count. A high entry-to-client ratio suggests frequent, short interactions across many accounts: a proxy for context-switching overhead.

ResourceClientsEntriesEntries / ClientSignal
Resource B1436,97848.8Very High Switching
Resource F1274,62236.4High Switching
Resource K1154,51339.2High Switching
Resource O1043,70535.6High Switching
Resource A1464,84133.2High Switching
Resource E1374,48832.8High Switching
Resource D1373,73927.3Moderate
Resource C1433,39823.8Moderate
Resource J1172,23619.1Focused
Resource H1182,16118.3Focused
View DAX Query — Time Entry Density
EVALUATE
ADDCOLUMNS(
    SUMMARIZE(
        BI_Autotask_Time_Entries,
        BI_Autotask_Time_Entries[resource_name],
        "UniqueCompanies", DISTINCTCOUNT(BI_Autotask_Time_Entries[company_name]),
        "TotalEntries", COUNT(BI_Autotask_Time_Entries[time_entry_id])
    ),
    "EntriesPerClient", DIVIDE([TotalEntries], [UniqueCompanies])
)
ORDER BY [EntriesPerClient] DESC
5.0 Analysis

The top 7 technicians each work with 120 or more different clients. That is a wide spread. At 146 unique companies, Resource A averages less than 10 hours per client across the entire reporting period. The work is shallow by definition: quick fixes, password resets, one-off escalations. This is not a performance issue. It is a structural one.

Resource B stands out for a different reason. With 143 clients and 6,978 time entries, they average 48.8 entries per client. That is the highest context-switching density on the team. Even at 1,290 total hours, the sheer volume of individual interactions means they are jumping between accounts constantly. This pattern correlates with burnout and with clients feeling like they always get a different person.

Resource J and Resource K show a different profile. Both handle 115+ clients but log over 2,000 hours each, producing hours-per-client ratios of 18.3 and 17.8 respectively. These technicians are doing real, sustained work across their portfolio. They are generalists who go deep. That combination is valuable and hard to replace.

Resource L is the most concerning outlier. They touch 115 different clients but have logged only 369 hours total, a ratio of 3.2 hours per client. With 840 time entries, that works out to about 26 minutes per entry. This pattern suggests dispatch-level triage: opening tickets, routing them, logging quick notes. If that is their role, fine. If not, they are spread so thin that no client is getting meaningful attention.

Resource N follows a similar pattern at 109 clients and 443 hours (4.1h/client). Two resources in the bottom tier by engagement depth is worth investigating. Are these part-time staff? Are they tier-1 dispatchers who should not be counted as technicians? The answer changes how you interpret the rest of the data.

6.0 What Should You Do With This Data?

5 priorities based on the findings above

1

Investigate Resource B's context-switching load

At 48.8 time entries per client across 143 accounts, Resource B is the most heavily context-switched person on the team. Pull their last 30 days of entries and check: are they being auto-assigned to everything? Is there a dispatch rule sending tickets to them by default? 6,978 entries is roughly 2x the team average and that kind of volume usually means the routing is broken, not that the person is twice as productive.

2

Clarify the role of Resource L and Resource N

Both show high client counts (115 and 109) with very low hours (369 and 443). If they are dispatchers or tier-1 triage roles, their numbers make sense and they should be categorized separately. If they are supposed to be delivering billable work, 3.2 and 4.1 hours per client across the entire period means no client is getting real attention. Either redefine their role or redistribute their accounts.

3

Consider dedicated client assignments for the top 5 resources

Resources A through E each handle 137+ clients. That works for reactive ticket flow, but it means no single technician owns the relationship with any client. If your service model includes named contacts for top-tier clients, the current distribution does not support it. Pick your 10 largest clients and assign a primary technician who handles at least 60% of their tickets.

4

Protect Resource J and Resource K from over-allocation

These two are your best generalists: high client count (115+), high hours (2,000+), and low context-switching density (under 20 entries per client). They are doing sustained, meaningful work across a wide client base. Do not add more clients to their plate. They are operating near peak capacity and losing one of them would create a gap that two or three replacements could not fill immediately.

5

Use this data to set team capacity benchmarks

The average across your 84 active resources is roughly 80 clients each. But that average hides a wide range. Set benchmarks by role: dispatchers can handle 100+ clients at low depth. Senior technicians should cap at 60–80 with higher hours per client. Tracking hours-per-client as a KPI gives you a clearer picture of capacity than client count alone.

7.0 Frequently Asked Questions
Where does the unique client data come from?

The data comes from the BI_Autotask_Time_Entries table in Proxuma Power BI. Every time entry in Autotask is logged against a resource (technician) and a company (client). The AI counts distinct company names per resource to produce the unique client figure. This includes all time entry types: ticket work, projects, internal, and administrative.

Does this include internal time or only billable work?

The report counts all time entries regardless of billable status. Internal companies and internal project time are included. If you want to filter to billable work only, add a filter on the is_billable column in the DAX query. The total of 50,752 hours includes 38,364 billable hours (75.6%).

What does "hours per client" actually tell me?

Hours per client is total hours divided by unique client count. It measures engagement depth. A technician with 10 hours per client is doing roughly one to two meaningful interactions per client per month. Below 5 hours per client usually means quick-touch, triage-level work. Above 15 suggests real project or escalation involvement. It is a proxy for whether the client would recognize the technician by name.

Why are there 118 total resources but only 84 active?

Autotask retains resource records for former employees and inactive accounts. The 84 active figure reflects resources who have logged at least one time entry in the reporting period. The 34 inactive resources still appear in historical data but are not counted in the ranking or averages in this report.

Can I filter this report by time period?

Yes. The DAX queries can be filtered by adding a date condition on the time entry date column. For quarterly planning, filter to the last 90 days to see current client spread rather than historical accumulation. The results will look different: a technician touching 146 clients over two years may only touch 40 in a given quarter.

Can I run this report against my own data?

Yes. Connect Proxuma Power BI to your Autotask PSA, 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.

Generate this report from your own data

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