BACKGROUNDWhat 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.
PROBLEMThe 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?
TASKWhat 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 QueryPrepare and structure the activity and reporting-period data.
PostgreSQL / SQLGroup activities into packages, calculate latest-state results and compare reporting periods.
DAX / Power BI logicCreate management KPIs and reporting measures.
Interactive chartsTurn the calculations into package, milestone, float and resource exceptions that can be explored.
NOW THE ANALYSIS STARTSWith the problem and data purpose clear, the next section shows the result first. The detailed steps below then show exactly how I got there.
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 LOGICRoads 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.