← All Kits · Excel Kit

Actual vs Last Year vs Budget: Three Comparisons in One Table

Michael Nocito · Updated August 2026 · Every number on this page was worked before it was published

One actual number, three reference points. Compared to last year it is growth. Compared to budget it is delivery. Compared to forecast it is whether anyone can predict anything. The same 88,250 can be a good month and a bad month at the same time, and the table has to let both be visible.

What you do: fix the column order, group each reference with its own variance, and phase the annual plan into months before anything is summed. Below is the layout and the one arithmetic mistake that makes a report wrong without making it look wrong.

The short version. Budget answers "did we do what we said". Last year answers "are we growing". Put both on the page and let the reader see when they disagree.

The layout

RegionActualLast yearvs LYvs LY %Budgetvs Budvs Bud %
North131,400118,000+13,400+11.4%120,000+11,400+9.5%
South88,25081,000+7,250+9.0%95,000-6,750-7.1%
East139,100146,500-7,400-5.1%140,000-900-0.6%
West74,80052,300+22,500+43.0%60,000+14,800+24.7%

South is the row that earns the table. It grew 9.0 percent on last year and missed its plan by 7.1 percent. Both are true. A report that carries only the budget column says South had a bad month. A report that carries only the prior year column says South had a good one. The two-reference table says the honest thing: South grew, and somebody planned for more growth than that.

East is the same shape in reverse. Practically on plan, and down 5.1 percent on last year. If your review only ever looks at budget variance, East is the row you will keep not discussing, for as long as the plan keeps being set at last year minus a bit.

Keep each variance next to its own reference. Actual, prior year, prior year variance, then budget, budget variance. When all the variances are bunched at the right of the table, readers pair them with the wrong column, and they do it silently.

The phasing mistake

This is the one that produces confidently wrong reports. The plan is annual, 400,000. Eight months have closed and the actual to date is 268,000. Someone writes 268,000 / 400,000 and reports 67 percent of plan, which reads as a serious miss.

It is a miss against nothing. Eight of twelve months is 66.7 percent of the year, so 268,000 against a straight-line phasing of 266,667 is a hair ahead.

ComparisonWorkingResultTrue?
YTD against annual plan268,000 / 400,00067% of planMeaningless
YTD against straight-line 8 months268,000 / 266,667+0.5%Only if the business is flat
YTD against phased 8 months268,000 / phased planThe real answerYes

Straight line is itself an assumption, and a bad one for anything seasonal. A retailer with a December makes eight months look wonderful on a straight-line phasing every single year. Phase the plan the way the business actually earns, store the phased months as their own row in the model, and sum those.

Getting the prior year column in

Two ways, and the choice matters more than it looks.

ApproachFormulaWhen it is right
Lookup from a prior year sheet=XLOOKUP(A2,LY!A:A,LY!C:C,"not in LY")Two separate files that will not be reloaded
One long table, filtered=SUMIFS(Amount,Region,A2,Year,$C$1-1)Anything that gets refreshed. Prefer this.

The fourth argument of XLOOKUP is not optional here. A region that exists this year and not last year must say so, not return #N/A that gets swept into a zero, which would make a brand new region look like a 100 percent gain. The full comparison of the two lookup functions is in VLOOKUP against XLOOKUP.

Which comparison belongs in which report

AudienceLead withBecause
Board or ownersLast yearThey are asking whether the business is growing
Budget holdersBudgetThey committed to a number and own the gap
Operations weeklyForecastOnly the latest view can still be acted on
Anyone new to the numbersBoth, with a sentenceThe disagreement is the finding

How to apply this to your own work

  1. Open your monthly pack and count the reference points. If there is only one, add the other and see how many rows change their story.
  2. Check any year to date percentage in the pack. Find out whether the denominator is the annual plan or the phased plan for the closed months.
  3. If the plan is straight lined, plot last year by month. If that line is not flat, the phasing is fiction and the early-year rows are flattering.
  4. Move every variance column so it sits beside the reference it belongs to, and put the reference name in the header, not just "Var %".
  5. Add a not-in-last-year label rather than a zero for anything new. New lines and dead lines are the two rows that break growth percentages.

The one habit to keep

Say the comparison out loud with its reference attached: "up nine percent on last year, seven percent behind plan". A percentage with no reference is not a fact, it is half of one, and the missing half is where the argument in the meeting comes from.

In your last pack, was there a row that beat budget and shrank on last year? Did anyone notice?

Every number here was worked before it was published. 268,000 against a straight-line eight-twelfths of 400,000 is 266,667, a difference of 1,333 or 0.5 percent.
The number is not in dispute. Which number it should sit next to is.

Excel for Analysts is 378 pages that read every formula and dialog one at a time, so the workbook stops being a place where numbers appear and becomes one you can check.

Excel for Analysts, $19 →
Build the table rather than reading about it.

The Excel Kit covers the lookups and the layout, and month over month growth handles the time arithmetic. For the percentage rules, see the variance percentage traps.

Open the Excel Kit →