“Capacity Variance: Planned vs Actual Resource Utilization Gap Analysis”
Autotask PSA Datto RMM Datto Backup Microsoft 365 SmileBack HubSpot IT Glue All reports
AI-GENERATED REPORT
You searched for:

Capacity Variance: Planned vs Actual Resource Utilization Gap Analysis

84 resources carry 3,360 hours of weekly capacity. Actual billable output averages 738 hours per week, leaving a 78% utilization gap against the 80% target. This report maps the variance by month, by metric, and by resource efficiency.

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

Capacity Variance: Planned vs Actual Resource Utilization Gap Analysis

84 resources carry 3,360 hours of weekly capacity. Actual billable output averages 738 hours per week, leaving a 78% utilization gap against the 80% target. This report maps the variance by month, by metric, and by resource efficiency.

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

Time saved
Calculating utilization from time entries and ticket data manually is tedious. This report does it automatically.
Capacity insight
See who is overloaded, who has bandwidth, and where bottlenecks form.
Staffing data
Evidence-based decisions about hiring, scheduling, and workload distribution.
Report categoryResource & Capacity
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
AudienceOperations managers, service delivery leads
Where to find this in Proxuma
Power BI › Resources › Capacity Variance: Planned vs Actual ...
What you can measure in this report
Summary Metrics
Planned vs Actual Capacity Comparison
Monthly Capacity Utilization Trend
Resource Efficiency: Actual vs Target
Analysis
What Should You Do With This Data?
Frequently Asked Questions
Weekly Capacity
Actual Billable/Week
Utilization Gap
Target Utilization
AI-Generated Power BI Report
Capacity Variance: Planned vs Actual
Resource Utilization Gap Analysis

84 resources carry 3,360 hours of weekly capacity. Actual billable output averages 738 hours per week, leaving a 78% utilization gap against the 80% target. This report maps the variance by month, by metric, and by resource efficiency.

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
Weekly Capacity
10,065.8h
209 projects with estimates
Actual Billable/Week
10,216.1h
101.5% of estimate — near target
Utilization Gap
-150.3h over
1.5% overrun overall
Target Utilization
8,789h / 86.0%
1,427h non-billable (14.0%)
View DAX Query — Summary Metrics
EVALUATE ROW(
  "TotalEstimatedHours", SUM('BI_Autotask_Projects'[estimated_hours]),
  "TotalWorkedHours", SUM('BI_Autotask_Projects'[worked_hours]),
  "TotalBillableHours", SUM('BI_Autotask_Projects'[billable_hours]),
  "TotalNonBillableHours", SUM('BI_Autotask_Projects'[non_billable_hours]),
  "TotalVarianceHours", SUM('BI_Autotask_Projects'[variance_hours]),
  "ProjectsWithEstimate", CALCULATE(COUNTROWS('BI_Autotask_Projects'), 'BI_Autotask_Projects'[estimated_hours] > 0),
  "WorkedVsEstPct", [Worked Hours % (vs Estimated)]
)
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 Planned vs Actual Capacity Comparison

Side-by-side breakdown of theoretical capacity against actual logged hours across the 19-month analysis period

ProjectCustomerStatusEstimatedWorkedVarianceVar %
Project EnvironmentLewis LLCComplete1,205.01,586.7-381.7-31.7%
Project AlongDoyle-ContrerasComplete238.0536.3-298.3-125.4%
Project NumberLittle GroupComplete24.0302.8-278.8-1161.7%
Project LeaveClements, Pham and GarciaComplete219.0417.3-198.3-90.5%
Project NotMartin GroupComplete5.0155.8-150.8-3016.7%
Project FeelWu-JacksonIn progress161.0276.8-115.8-71.9%
Project ReturnThomas-WatsonComplete36.0135.8-99.8-277.1%
Project SetDrake and SonsComplete128.00.0+128.0100.0%
Project FeelSmith, Santos and KimComplete135.03.0+132.097.8%
Project FeelKelley-WalshComplete204.066.8+137.267.2%
Project FundWall PLCComplete190.027.3+162.885.7%
Project ModernCraig-HuynhComplete173.02.5+170.598.6%
Project FeelWest, White and LawsonComplete182.06.5+175.596.4%
Project WriterRivers, Rogers and MitchellIn progress240.03.1+236.998.7%
Project SafeRamos GroupComplete675.067.1+608.090.1%
22% of capacity Actual vs Planned
Total Hours
75.6% billable Billable Ratio
(of hours worked)
29% effective FTE FTE Utilization
24.4 of 84
View DAX Query — Capacity Comparison
EVALUATE TOPN(15,
  CALCULATETABLE(
    SELECTCOLUMNS('BI_Autotask_Projects',
      "Project", 'BI_Autotask_Projects'[project_name],
      "Customer", 'BI_Autotask_Projects'[company_name],
      "Status", 'BI_Autotask_Projects'[project_status_name],
      "Estimated", 'BI_Autotask_Projects'[estimated_hours],
      "Worked", 'BI_Autotask_Projects'[worked_hours],
      "Variance", 'BI_Autotask_Projects'[variance_hours],
      "VariancePct", DIVIDE('BI_Autotask_Projects'[variance_hours], 'BI_Autotask_Projects'[estimated_hours])
    ),
    'BI_Autotask_Projects'[estimated_hours] > 0
  ),
  ABS([Variance]), DESC
)
ORDER BY [Variance]
3.0 Monthly Capacity Utilization Trend

Billable hours per month over 19 months, with the 80% utilization target line for reference (2,688h/month at full headcount)

0 800 1,600 2,400 3,200 80% target 137 2,897 2,981 1,664 Jul 24 Oct Jan 25 Apr Jul Oct Jan 26
Billable hours/month 80% target (2,688h)

Billable hours climbed from a low of 137 in July 2024 (partial month of data collection) to a peak of 2,981 in October 2025. The upward trend is clear, but no single month has reached the 2,688-hour threshold needed for 80% utilization across the full team. The closest was October 2025, still 11% short.

View DAX Query — Monthly Billable Trend
EVALUATE
ADDCOLUMNS(
    SUMMARIZE(
        'BI_Autotask_Time_Entries',
        'BI_Autotask_Time_Entries'[date_worked].[Year],
        'BI_Autotask_Time_Entries'[date_worked].[MonthNo]
    ),
    "BillableHours", CALCULATE(
        SUM('BI_Autotask_Time_Entries'[Billable Hours])
    ),
    "NonBillableHours", CALCULATE(
        SUM('BI_Autotask_Time_Entries'[hours_worked])
    ) - CALCULATE(
        SUM('BI_Autotask_Time_Entries'[Billable Hours])
    ),
    "TotalHours", CALCULATE(
        SUM('BI_Autotask_Time_Entries'[hours_worked])
    )
)
ORDER BY
    'BI_Autotask_Time_Entries'[date_worked].[Year],
    'BI_Autotask_Time_Entries'[date_worked].[MonthNo]
4.0 Resource Efficiency: Actual vs Target

Per-resource metrics compared to the 80% utilization benchmark, showing the gap between what each person should deliver and what they actually log

MetricTarget (80%)ActualGapRating
Billable hours/week per resource 32.0h 10.9h −21.1h 34% of target
Total hours/week per resource 40.0h 14.4h −25.6h 36% of target
Billable ratio (of worked hours) 80.0% 75.6% −4.4pp Near target
Monthly billable hours/resource 138.7h 47.3h −91.4h 34% of target
Annual billable hours/resource 1,664h 567h −1,097h 34% of target
Billable Hours per Week per Resource
Target: 32.0h
Actual: 10.9h
Total Hours per Week per Resource
Target: 40.0h
Actual: 14.4h
Target Actual billable Actual total

The billable ratio of worked hours (75.6%) sits close to the 80% target. That means when people do log time, three quarters of it is billable. The real problem is volume: resources average 14.4 hours of logged time per week, well below the 40-hour standard. This suggests either part-time resources, shared roles, time logging gaps, or a headcount that includes inactive or lightly-active accounts.

View DAX Query — Per-Resource Metrics
EVALUATE
VAR _TotalBillable = SUM('BI_Autotask_Time_Entries'[Billable Hours])
VAR _TotalHours = SUM('BI_Autotask_Time_Entries'[hours_worked])
VAR _Resources = DISTINCTCOUNT('BI_Autotask_Time_Entries'[resource_id])
VAR _Weeks = 82.8  -- 19 months approx
RETURN
ROW(
    "BillablePerResourcePerWeek", DIVIDE(_TotalBillable, _Resources * _Weeks),
    "TotalPerResourcePerWeek", DIVIDE(_TotalHours, _Resources * _Weeks),
    "BillableRatio", DIVIDE(_TotalBillable, _TotalHours),
    "MonthlyBillablePerResource", DIVIDE(_TotalBillable, _Resources * 19),
    "AnnualBillablePerResource", DIVIDE(_TotalBillable, _Resources * 19) * 12
)
5.0 Analysis

The headline number looks alarming: 84 resources producing billable output equivalent to 24.4 FTEs. But the data needs context. The "84 active resources" count includes everyone who logged at least one time entry in the 19-month window. That likely covers part-time staff, managers who log occasional hours, dispatchers, and people who left during the period.

The more useful signal is the billable ratio of 75.6%. When people work, they spend most of that time on billable tasks. The gap is in total hours logged per person, not in what those hours go toward. Fixing this starts with cleaning up the resource count to reflect actual full-time-equivalent capacity, then setting utilization targets per role rather than across the board.

6.0 What Should You Do With This Data?

4 priorities based on the findings above

1

Audit the resource list for actual FTEs

84 "active resources" is misleading if it includes part-timers, managers, or departed staff. Filter to resources logging 20+ hours per week consistently. You will likely end up with 25 to 35 true FTEs, which makes the utilization numbers far less alarming.

2

Set role-based utilization targets

A service desk technician should hit 85% billable. A project engineer sits around 65%. A service manager, 30%. Applying 80% across all roles produces a gap that does not reflect a real operational problem. Build targets by role and measure against those.

3

Investigate time logging compliance

14.4 hours per week per resource suggests incomplete time entry. If people work 40 hours but log 14, you have a data quality issue, not a capacity issue. Compare logged hours against scheduled hours or contractual FTE status to find the gap.

4

The billable ratio is close to target

75.6% billable vs 80% target is a 4.4 percentage point gap. That is manageable. The team is already directing most of their logged time toward billable work. The improvement opportunity sits in volume (more hours logged) rather than in mix (billable vs non-billable).

7.0 Frequently Asked Questions
Why does the utilization look so low?

The 84-resource count includes everyone who logged time in the period, including part-time staff, managers, and people who left. The real FTE count is closer to 24 to 35. When you measure against actual FTEs, the utilization gap shrinks from 78% to something more typical for an MSP.

What is the 80% utilization target based on?

80% is a common MSP industry benchmark for billable utilization. It means 32 out of 40 hours per week spent on billable work, with 8 hours for internal meetings, training, admin, and breaks. In practice, top-performing service desk teams hit 85%, while project teams average 60 to 70%.

Where does the capacity data come from?

All data comes from the BI_Autotask_Time_Entries table in Power BI. The AI counts distinct resource IDs, sums hours_worked and Billable Hours, then calculates the ratios. Planned capacity is derived from the resource count times 40 hours per week.

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