← Portfolio

Project Controls Performance Analysis

A project-controls reporting model covering 800 activities across 24 monthly reporting snapshots, with WBS/packages, planned vs actual progress, forecast finish, float, milestones and resource-hour variance.

PORTFOLIO BUILD
Decision
Identify package slippage, float erosion, milestone risk and resource variance early enough for a project team to investigate and recover the programme.
Source
Yatify project-controls reporting model.
Period
24 monthly snapshots · Jan 2025 to Dec 2026
Created by
Nyashadzashe Munyati
BACKGROUND

What normally happens on a construction project

Every month a project team may report one overall progress percentage. That number is useful, but it can hide a problem. One work package can already be falling behind while stronger packages make the overall project still look acceptable. At the same time, activities can lose float, milestone dates can move and extra labour hours can be used without producing the expected improvement.

PROBLEM

The problem I wanted to solve

I wanted to see whether I could identify the part of a programme that was beginning to deteriorate before the final completion date visibly moved. Instead of only asking “How complete is the project?”, I wanted to answer: Which package is behind? How far behind? Is float being lost? Which milestones are moving? Are extra resource hours actually helping?

TASK

What I built to investigate it

I built a project-controls reporting model with 800 programme activities observed across 24 monthly reporting cut-offs. Each activity carries its WBS/package, planned and actual progress, baseline and forecast dates, float, milestone information and resource hours. This lets me reproduce the type of monthly exception reporting a project manager or project-controls team would need.

TOOLS I USED

What each tool was doing

Excel / Power Query

Prepare and structure the activity and reporting-period data.

PostgreSQL / SQL

Group activities into packages, calculate latest-state results and compare reporting periods.

DAX / Power BI logic

Create management KPIs and reporting measures.

Interactive charts

Turn the calculations into package, milestone, float and resource exceptions that can be explored.

NOW THE ANALYSIS STARTS

With the problem and data purpose clear, the next section shows the result first. The detailed steps below then show exactly how I got there.

HEADLINE FINDING

Roads South is 3.8 percentage points behind plan at the December reporting cut-off.

The project-wide gap hides where recovery attention should start. The largest project-level gap across the 24 snapshots is 2.9 pp at 2025-08-31.

Yatify project-controls reporting model · 800 activities · 24 snapshots
3.8 pplargest package progress gap

What I did in this project

01

Defined the WBS/package reporting structure and monthly schedule-snapshot model.

02

Built progress, float, milestone and resource exception calculations.

03

Created trend and latest-state reporting without destroying reporting history.

04

Validated row counts, keys, progress ranges, dates and reporting periods.

Identify package slippage, float erosion, milestone risk and resource variance early enough for a project team to investigate and recover the programme.

Project teams need to detect slippage before the final completion date visibly moves. The analytical problem is connecting schedule snapshots, progress, float, milestones and resource effort so management can see which packages are deteriorating and why.

02 · DATA

What one row represents

The reporting model contains 19,200 activity-snapshot rows: 800 programme activities observed at 24 monthly reporting dates. One row is not “one project”. It is the state of one activity at one reporting cut-off.

IDENTITYactivity_idpackageWBS
TIMEsnapshot_datebaseline_finishforecast_finish
PROGRESSplanned_progress_pctactual_progress_pct
RISK / RESOURCEtotal_float_daysplanned_hours_to_dateactual_hours_to_date
EXAMPLE RECORD LOGIC

Roads South at the 31 Dec 2025 reporting cut-off contributes to the package result using its activities’ planned progress, actual progress, float, milestones and resource hours. The package is not judged from one activity or one percentage.

03 · TRANSFORMATION

What I changed before calculating anything

1Keep the 800-activity master table separate from monthly status records.
2Convert schedule dates, progress and resource fields to controlled types.
3Join activity attributes such as WBS/package onto each monthly snapshot.
4Retain every reporting month so trend is not destroyed when the “latest state” is calculated.
5Create package-level weighted progress and exception fields for float, milestones and resources.
800 activity master rows×24 reporting cut-offs=19,200 fact rows
04 · CALCULATION

Worked calculations — not black-box KPIs

PACKAGE PROGRESS VARIANCEActual progress − Planned progress

Roads South: 64.9% − 68.7% = −3.8 percentage points.

Meaning: this package is further behind its plan than any other package in the 31 Dec 2025 snapshot.
RESOURCE VARIANCEActual hours − Planned hours

513,031.5 h − 494,713.3 h = +18,318.2 h (+3.7%).

Meaning: resource consumption is above plan while progress is below plan, so I would investigate productivity and where the extra hours are being consumed.
MILESTONE SLIPPAGEForecast finish − Baseline finish

: → = + days.

Meaning: the activity requires a logic/constraint/recovery review; it cannot be hidden inside the project-wide percentage.
FLOAT RISKAt risk = Total float ≤ 5 days

activities are at 5 days float or less, including with negative float.

Meaning: I would rank the negative-float activities by package and milestone impact rather than reviewing all 800 activities equally.
05 · MORE ANALYSIS

What the drill-down adds

The headline chart gives the decision signal. These additional views show whether the same conclusion survives when the data is sliced another way.

06 · INTERPRETATION

What I would say in the management meeting

Overall progress62.8% planned vs 60.8% actual

The project is below plan, but the project-wide gap alone is not enough to explain the problem.

Package exceptionRoads South −3.8 pp

This is the first package I would open in the drill-down because it has the largest progress variance at the reference snapshot.

Schedule exception late milestones · negative-float activities

The issue is distributed across activity logic and milestones, so I would not describe it as a single late activity.

Important nuanceForecast project finish still equals baseline finish at the reference snapshot

I would not claim the whole project completion date is late. The evidence supports internal package/milestone risk that needs recovery before it reaches the final completion date.

07 · RECOMMENDATION

What I would do next

TRIGGER / EVIDENCEACTIONWHY
Roads South −3.8 ppReview constraints, look-ahead and recoverability for the package.Largest package progress gap at the snapshot.
+ daysTrace predecessor logic, outstanding constraints and recovery options.Largest milestone slip in the current exception list.
Traffic resource hours +0.0%Review productivity and where additional hours are being consumed.Higher hours with below-plan progress may signal inefficient resource use.
negative-float activitiesRank by package and milestone impact; review the top exceptions weekly.Management cannot practically investigate 800 activities at equal priority.

All schedule and resource records are synthetic. No cost, tender rate or confidential project value is included.

Audit trail behind the case study

Every interactive chart above already has a CSV button for its exact plotted numbers. These files are the deeper audit trail: source extract, model, SQL/DAX and validation.