How long project phases actually take vs estimates, with duration distribution across all projects. Generated by AI via Proxuma Power BI MCP server.
How long project phases actually take vs estimates, with duration distribution across all projects. 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: Project managers, operations leads, and MSP owners tracking delivery
How often: Weekly for status updates, milestone dates for escalation, monthly for portfolio review
How long project phases actually take vs estimates, with duration distribution across all projects. Generated by AI via Proxuma Power BI MCP server.
EVALUATE ROW("TotalHours", SUM('BI_Autotask_Time_Entries'[hours_worked]), "Resources", DISTINCTCOUNT('BI_Autotask_Time_Entries'[resource_name]))
Top 10 phases ranked by actual hours worked, with comparison bars showing estimated (blue) vs. actual (teal) duration and the variance percentage
| Phase ID | Estimated | Actual | Estimated vs. Actual | Variance |
|---|---|---|---|---|
| 35475 | 1,587h | 1,205h | -24% | |
| 41160 | 485h | 729h | +50% | |
| 71189 | 628h | 608h | -3% | |
| 9727 | 51h | 527h | +943% | |
| 42633 | 732h | 476h | -35% | |
| 35471 | 25h | 305h | +1,120% | |
| 85073 | 339h | 269h | -21% | |
| 52654 | 536h | 238h | -56% | |
| 7941 | 147h | 220h | +50% | |
| 56538 | 417h | 219h | -48% |
EVALUATE
TOPN(50,
ADDCOLUMNS(
VALUES('BI_Autotask_Phases'[phase_id]),
"proxuma_phase_id", CALCULATE(MAX('BI_Autotask_Phases'[proxuma_phase_id])),
"start_date", CALCULATE(MAX('BI_Autotask_Phases'[start_date])),
"end_date", CALCULATE(MAX('BI_Autotask_Phases'[end_date])),
"est_minutes", CALCULATE(MAX('BI_Autotask_Phases'[proxuma_estimated_in_minutes])),
"act_minutes", CALCULATE(MAX('BI_Autotask_Phases'[proxuma_actual_in_minutes]))
),
[act_minutes], DESC
)
How the top 50 phases break down by actual hours worked, showing that most phases cluster under 200 hours while a handful consume 500+ hours
EVALUATE
TOPN(50,
ADDCOLUMNS(
VALUES('BI_Autotask_Phases'[phase_id]),
"proxuma_phase_id", CALCULATE(MAX('BI_Autotask_Phases'[proxuma_phase_id])),
"start_date", CALCULATE(MAX('BI_Autotask_Phases'[start_date])),
"end_date", CALCULATE(MAX('BI_Autotask_Phases'[end_date])),
"est_minutes", CALCULATE(MAX('BI_Autotask_Phases'[proxuma_estimated_in_minutes])),
"act_minutes", CALCULATE(MAX('BI_Autotask_Phases'[proxuma_actual_in_minutes]))
),
[act_minutes], DESC
)
How well do estimates predict actual duration? A breakdown of over-budget, under-budget, and accurate phases across the top 50
| Category | Count | % of Total | Accuracy |
|---|---|---|---|
| Under budget (actual < estimated) | 6 | 60% | On track |
| Within ±10% of estimate | 1 | 10% | Accurate |
| Over budget by 10–50% | 1 | 10% | Overrun |
| Over budget by 50%+ | 2 | 20% | Major overrun |
EVALUATE
TOPN(50,
ADDCOLUMNS(
VALUES('BI_Autotask_Phases'[phase_id]),
"proxuma_phase_id", CALCULATE(MAX('BI_Autotask_Phases'[proxuma_phase_id])),
"start_date", CALCULATE(MAX('BI_Autotask_Phases'[start_date])),
"end_date", CALCULATE(MAX('BI_Autotask_Phases'[end_date])),
"est_minutes", CALCULATE(MAX('BI_Autotask_Phases'[proxuma_estimated_in_minutes])),
"act_minutes", CALCULATE(MAX('BI_Autotask_Phases'[proxuma_actual_in_minutes]))
),
[act_minutes], DESC
)
Phase 9727 was estimated at 51 hours and consumed 527 hours. Phase 35471 was estimated at 25 hours and consumed 305 hours. These are not estimation errors in the normal sense. A 51-hour estimate that becomes 527 hours means the scope was either unknown at kickoff, or it changed repeatedly during execution. Both phases need a retrospective to identify the root cause: unclear requirements, uncontrolled change requests, or a project that should have been re-scoped but was not.
The average phase duration is 180 hours, but the median is 90 hours. That 2:1 ratio between average and median confirms a right-skewed distribution. Seven phases in the 500+ hour range are pulling the average up. For capacity planning, the median of 90 hours is a better predictor of what a “typical” phase will require. Use the average only when budgeting for total portfolio workload.
Phase 35475 was estimated at 1,587 hours and completed in 1,205 hours. For a phase of that size, finishing 382 hours under budget represents a meaningful win. It suggests that large, well-scoped phases with clear deliverables can be estimated with reasonable accuracy. The overruns tend to happen on phases that were underestimated by an order of magnitude at the start, where the problem is scope definition rather than execution speed.
4 actions based on the findings above
A phase estimated at 51 hours that takes 527 hours is a scope failure, not a time tracking issue. Pull the time entries for both phases, identify when the hours started accelerating beyond the estimate, and determine whether a change request or discovery event caused the blowout. Build a mandatory checkpoint into your process: if a phase hits 150% of its estimate, it triggers a scope review before more hours are logged.
When scoping new phases, reference the median of 90 hours as your baseline for “typical” effort. The average of 180 hours is inflated by a small number of outliers. If a new phase is estimated at 300+ hours, that puts it in the top 30% of all phases by size. Flag it for additional review and break it into smaller milestones where possible.
Phases 52654 (-56%) and 56538 (-48%) finished well under their original estimates. That may look like good news, but consistent over-estimation means you are under-pricing other work or losing competitive bids because your proposals quote too many hours. Review whether those estimates were padded intentionally or whether the work genuinely required less effort than expected.
Define a rule in your project management process: any phase that exceeds its estimate by more than 50% triggers an automatic notification to the project manager. Based on this data, that rule would have flagged 3 out of 10 top phases before they spiraled. Catching a 50% overrun early is far cheaper than discovering a 943% overrun at billing time.
Autotask PSA tracks estimated minutes and actual minutes per project phase. Proxuma Power BI pulls these values through the Autotask connector and stores them in the BI_Autotask_Phases table. The AI then converts minutes to hours, calculates variance percentages, and ranks phases by actual time worked.
The top 50 by actual hours captures the phases that consume the most resources and have the greatest impact on profitability. Small phases (under 10 hours) rarely cause budget issues on their own. You can adjust the TOPN value in the DAX query to include more or fewer phases as needed.
A negative variance means the phase finished under its estimated hours. For example, -24% means the phase used 24% fewer hours than estimated. This is generally positive, but large negative variances (-50% or more) may indicate over-estimation, which can lead to inflated project quotes.
Use the median duration (90 hours) as a baseline for typical phases. For phases similar to past overruns, add a buffer of 30-50% on top of your initial estimate. The key insight is that estimation accuracy depends on scope clarity at kickoff. Phases with clear deliverables tend to track within 25% of their estimate. Phases with vague scope blow past it.
Yes. Connect Proxuma Power BI to your Autotask PSA 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 project 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