This calculator vs. averaging margins in a spreadsheet
A menu-engineering spreadsheet built by hand usually bars every dish against
=AVERAGE() of the contribution-margin column — one row per dish, not weighted by how many
of each actually sold. That single formula choice can flip a menu’s best seller into a dish flagged for
a price increase.
What the formula gets wrong
The matrix classifies a dish by comparing its contribution margin — menu price minus plate food
cost — against the menu’s own average. The bar is supposed to represent what the menu actually
earns per cover. An unweighted =AVERAGE() across the margin column does not measure that: it
measures the average dish, counting a special that sold ten times exactly as heavily as a dish
that sold three hundred times. A menu is rarely ordered evenly, so that difference is not a rounding error
— it can move a dish across the classification line entirely.
This calculator weights the bar by covers instead: total contribution margin across every dish, divided by total units sold. That is the average a plate leaving the kitchen actually clears, not the average a spreadsheet row happens to land on.
| Dish | Margin | Units sold |
|---|---|---|
| Chef’s Tasting Plate | $30.00 | 10 |
| House Burger | $10.00 | 300 |
| Fish Tacos | $5.00 | 90 |
A spreadsheet’s =AVERAGE(30, 10, 5) bar is $15.00. Against that bar the
House Burger’s $10.00 margin falls short, and popular plus below-average reads as a
plowhorse — a candidate for a price increase. Weighted by covers, the bar is total
margin ($3,750) divided by total units (400): $9.38. Against that bar the same $10.00
burger clears it, and popular plus above-average reads as a star — the dish carrying
three quarters of every cover the menu served, correctly read as the one already earning its keep. The
ten-cover special is what pulled the unweighted average above the burger’s own margin in the first
place; it barely moves the weighted one.
This tool needs no account and no sign-in: it is a static page, the arithmetic runs in your browser, and once it has loaded it keeps working with the connection off.
Common questions
What does a spreadsheet menu-engineering worksheet usually get wrong?
Its “menu average” bar is usually built as =AVERAGE() across the contribution-margin column — one row per dish, unweighted. That treats a dish sold ten times over the period the same as a dish sold three hundred times: each row counts once in the average regardless of how many actually went out the door. The bar is supposed to represent what the menu earns per cover, and an unweighted mean of the rows does not measure that — it measures the average dish, not the average plate served.
Can you show a real example of the misclassification?
A three-dish menu: a Chef's Tasting Plate at $30.00 margin, ten sold; a House Burger at $10.00 margin, three hundred sold; and Fish Tacos at $5.00 margin, ninety sold — four hundred covers total. A spreadsheet's =AVERAGE(30, 10, 5) bar is $15.00, so the $10.00 House Burger falls below it and reads as a plowhorse needing a price move. Weighted by covers — total margin divided by total covers, $3,750 over 400 — the bar is $9.38, so that same $10.00 burger, three quarters of every plate that left the kitchen, clears the bar and is a star. The ten-cover special is what pulled the unweighted average above the burger's margin in the first place.
Why does an unweighted average distort the bar so much?
Because a menu is rarely evenly ordered, and the distortion gets worse the more lopsided the covers are. A low-volume special with a high per-plate margin pulls an unweighted average up without contributing much to the menu's actual dollars, while the dish carrying most of the covers is judged against a number its own sales never produced. Weighting by covers — total contribution margin divided by total units sold — fixes that by construction: it is the bar the menu's real mix actually clears, not the bar a row-by-row average happens to land on.
Does this replace building a menu-engineering spreadsheet entirely?
For getting the weighted bar and the classification right, yes — that is the one job this calculator does, for free, with nothing uploaded. It keeps no history across periods and no year-over-year trend the way a spreadsheet an operator maintains themselves can. An operator who wants to track how a dish's classification moves month to month still has reasons to keep a sheet alongside it — as long as its average is weighted by covers, not by rows.
Nothing here says or implies that keeping a menu-engineering spreadsheet is a mistake — it is how most independent operators already do this, and the arithmetic only breaks down at the one formula choice described above. The Chef’s Tasting Plate / House Burger / Fish Tacos example is a worked illustration built for this page, not a claim about any specific restaurant’s real menu.