Project Dashboard Template for Construction & Engineering Project Managers — Earned Value (CPI, SPI, EAC) in Power BI

Map your own schedule export onto 3 tables and refresh: 8 DAX measures compute CPI, SPI, Cost Variance, EAC and VAC across 3 report pages and 17 visuals. The file carries no data — yours goes in. Publishing the result to a team needs a Power BI Pro seat at Microsoft's list price of US$14 per user per month (US$168 per user per year), so the earned-value maths behind the numbers your board sees has to be right before you share it.

Measures included (DAX) (8)

Cost Performance Index (CPI) (Table: Tasks)

DAX: DIVIDE(SUM('Tasks'[BCWP Earned Value]), SUM('Tasks'[ACWP Actual Cost]))

Uses: 'Tasks'[BCWP Earned Value], 'Tasks'[ACWP Actual Cost]

Format: 0.00

Schedule Performance Index (SPI) (Table: Tasks)

DAX: DIVIDE(SUM('Tasks'[BCWP Earned Value]), SUM('Tasks'[BCWS Planned Value]))

Uses: 'Tasks'[BCWP Earned Value], 'Tasks'[BCWS Planned Value]

Format: 0.00

Cost Variance (Table: Tasks)

DAX: SUM('Tasks'[BCWP Earned Value]) - SUM('Tasks'[ACWP Actual Cost])

Uses: 'Tasks'[BCWP Earned Value], 'Tasks'[ACWP Actual Cost]

Format: #,##0

Estimate at Completion (Table: Tasks)

DAX: DIVIDE(SUM('Tasks'[Baseline Cost]) * SUM('Tasks'[ACWP Actual Cost]), SUM('Tasks'[BCWP Earned Value]))

Uses: 'Tasks'[Baseline Cost], 'Tasks'[ACWP Actual Cost], 'Tasks'[BCWP Earned Value]

Format: #,##0

Variance at Completion (Table: Tasks)

DAX: SUM('Tasks'[Baseline Cost]) - DIVIDE(SUM('Tasks'[Baseline Cost]) * SUM('Tasks'[ACWP Actual Cost]), SUM('Tasks'[BCWP Earned Value]))

Uses: 'Tasks'[Baseline Cost], 'Tasks'[ACWP Actual Cost], 'Tasks'[BCWP Earned Value]

Format: #,##0

Average Milestone Slip (Days) (Table: Milestones)

DAX: AVERAGE('Milestones'[Slip Days])

Uses: 'Milestones'[Slip Days]

Format: 0.0

Issue Count (Table: Issues)

DAX: COUNTROWS('Issues')

Format: 0

Average Days Open (Table: Issues)

DAX: AVERAGE('Issues'[Days Open])

Uses: 'Issues'[Days Open]

Format: 0.0

Columns your data must have (23)

Tasks

ColumnTypeSummarize by
Project Namestring
Task Namestring
Phasestring
Statusstring
FinishdateTime
Percent Completedouble
Baseline Costdecimal
BCWS Planned Valuedecimal
BCWP Earned Valuedecimal
ACWP Actual Costdecimal

Header row: Project Name,Task Name,Phase,Status,Finish,Percent Complete,Baseline Cost,BCWS Planned Value,BCWP Earned Value,ACWP Actual Cost

Milestones

ColumnTypeSummarize by
Project Namestring
Milestone Namestring
Ownerstring
Baseline DatedateTime
Forecast DatedateTime
Slip Daysint64

Header row: Project Name,Milestone Name,Owner,Baseline Date,Forecast Date,Slip Days

Issues

ColumnTypeSummarize by
Project Namestring
Issue Keystring
Summarystring
Prioritystring
Statusstring
CreateddateTime
Days Openint64

Header row: Project Name,Issue Key,Summary,Priority,Status,Created,Days Open

Report pages (3)

Get the complete version $69

This page is the working piece. The full pack has everything below.

Map your own schedule export onto 3 tables and refresh: 8 DAX measures compute CPI, SPI, Cost Variance, EAC and VAC across 3 report pages and 17 visuals. The file carries no data — yours goe

Public freelance marketplaces list Power BI developers at roughly US$30–US$150 per hour; a custom earned-value model is a multi-day build at those published rates. Separately, the Power BI Pro licence you need to share any report

Send it to me