
Slide four of the monthly pack. Cost performance index: 0.94.
Someone asks whether that is bad. The honest answer is that nobody in the room can tell, because 0.94 on its own is not enough information to be bad or good. It is a single reading, and a single reading of anything — a temperature, a share price, a cost index — is a fact without a shape.
The interesting question is not what the CPI is. It is what the CPI has been doing.
The index answers a question nobody asked
Earned value gives you a clean way to say where a project stands. CPI compares what you earned against what you spent, SPI compares what you earned against what you planned to earn, and both are honest arithmetic on real figures.
But both answer where are we. The decision in front of you almost always needs where are we going, and the two are not the same question. On the schedule side the same gap has a formal answer, limits included: what Earned Schedule measures, and what it cannot see.
Consider three packages that all report a CPI of 0.94 this month.
The first has been at 0.94 for five months. It is not deteriorating; it has a stable inefficiency baked into it — a rate that was underestimated, a productivity assumption that was optimistic from the start. The overspend is predictable, and it will scale exactly with whatever remains.
The second was at 1.02 three months ago, then 0.99, then 0.96, now 0.94. Nothing broke. Something is eroding, steadily, and it has been doing so since before anyone noticed. If the slope holds, the next reading is 0.92.
The third was at 0.81 in the spring. Then 0.86, then 0.90, now 0.94. It was in serious trouble and it is climbing out. Left alone, it will cross 1.00.
Same number, three situations, three different correct decisions: accept and re-baseline, investigate now, do nothing.

Anyone who has read our piece on delay direction will recognise the shape of this argument. It is the same one, moved from time to money — and it lands harder on cost, because cost is where the forecast comes from.
The forecast has an assumption buried in it
Here is where the single reading stops being merely incomplete and starts being misleading.
The most common way to forecast the final cost of a project is:
EAC = BAC ÷ CPI
Budget at completion, divided by the cost performance index. It is quick, it is standard, and it is on a lot of slides.
It also contains an assumption that is rarely said out loud: that the CPI you are dividing by will hold for the rest of the project. The formula takes today’s efficiency and projects it forward, unchanged, to the last day.
For the first package above, that assumption is reasonable — the index has been flat for five months, so extrapolating it is defensible.
For the second, it is optimistic. The index is falling. Assuming it stops falling exactly today, because today is when you happened to run the number, has nothing to recommend it.
For the third, it is pessimistic, and expensively so. You would be booking a contingency against an inefficiency that is already closing on its own.
The formula is not wrong. It is conditional — and you cannot check the condition from a single reading. You can only check it from the series.
Why the series usually is not there
Almost every reporting cycle produces earned value from scratch and then throws the working away.
The status date is set, the cumulative figures are read, the indices are computed, the slide is made. Next month the same thing happens with a new status date. What survives is a sequence of slides in different files — not a series anyone can plot.
There is a second reason, more technical. Earned value computed only at the status date is a cumulative figure: it tells you the total position, and totals are slow to move. A month where performance collapsed and a month where it improved can produce almost the same cumulative index, because both are diluted by everything that came before. The signal is there, but it is buried under its own history.
The way out of both problems is the same: compute earned value time-phased — as a daily series per task, carried through the project — rather than as one figure at one date. Then the index has a history because the history was never discarded, and the period behaviour is visible next to the cumulative one.
What that looks like in practice
OneClickExporter reads the plan and extracts the time-phased series behind it: planned value, earned value and actual cost, day by day, for every task, plus the consolidated earned value across a master plan and its subprojects. Nothing is retyped and nothing is recomputed by hand.
OneClickReport draws the consequences. Its earned value pages show the cost performance index trend: CPI and SPI by date rather than as a pair of numbers, CV and SV by date alongside them, and BAC against EAC as the two move — so the gap between what you budgeted and what you are now forecasting is a line you watch, not a figure you recalculate.
The portfolio page does the same one level up: a single earned value curve for everything you imported, over a period you choose.
What you get back
Not more precision. The arithmetic was already correct.
What you get is the ability to answer the question that follows every index on every slide — and is it getting better or worse? — without promising to look into it and coming back next month.
And you get a check on your own forecast. When someone asks how confident you are in the estimate at completion, the useful answer is not a number. It is: here is the index over the last twelve periods; it has been flat, so extrapolating it is reasonable. Or: it has been falling for a quarter, so the standard formula is flattering us and here is what it looks like if the trend continues.
That is a different conversation from reading 0.94 off a slide. It is also the one your steering committee thought they were having.
OneClickReport turns Microsoft Project plans into Power BI dashboards, including time-phased earned value with CPI, SPI, CV, SV and EAC over time. The extraction runs on your machine and reads your plans without changing them.
#EarnedValue #MicrosoftProject #ProjectControls #PowerBI