How much to order, without guessing
The reorder point — computed by a measure
"Order the same as last time" ends one of two ways: the hit runs out and sales stall, or the warehouse fills with dead stock and cash is frozen. Here's the method that computes replenishment from sell-through speed, lead time and on-hand stock — for every SKU.
"How much to order" is a measure: expected consumption over the lead time and target stock, minus what's already on hand and inbound. The ABC class sets where you can't afford to fall short. Below — the formula, the measures and a live recompute.
01 The problem: ordering "by eye"
A buyer keeps a dozen fast movers in their head and orders them "as usual". The rest of the catalog lives on a leftover basis. The result is predictable: a top item runs out right before the season, while cash sits in slow positions that were brought in "just in case".
It's not even a discipline problem, it's a volume one: computing the reorder point for every one of hundreds of SKUs by hand is impossible. So it's done from memory — and the mistakes happen exactly where nobody is looking.
02 The principle: reorder point from sell-through
For each item the method computes three things: how fast it sells (average daily sales), how many days the current stock will last, and how much to top up to reach the next delivery with a buffer. A traffic light shows what to grab today:
| SKU | Brand | ABC | Stock | Daily | Trend | Days left | Inbound | To order | Status |
|---|
* "Days left" = stock ÷ average daily sales. "To order" = consumption over (lead time + target) − stock − inbound.
03 ABC: where you can't fall short
Not all items matter equally. A is the positions that make the revenue: hold a higher buffer and react to them first. C is the slow tail, where stock is kept minimal so cash isn't frozen. Filter the table to A and status "Urgent" — that's your list for today.
04 What it changes
The buyer stops holding numbers in their head. Open the sheet — see what's "Urgent" among the A items, exactly how much to order, and that the C tail needs nothing. The purchasing decision takes minutes and covers the whole catalog, not just what came to mind.
01 What the order is computed from
The calculation rests on four quantities, all of them measures over the unified model — not manual columns:
- Average daily sales — sales over a window (e.g. 28 days) ÷ number of days; the window smooths spikes;
- Lead time — how many days a batch takes from order to warehouse;
- Target stock — a buffer beyond the lead time, so you don't hit zero when the batch arrives;
- Stock and inbound — what's already here and already on the way.
02 The reorder-point formula
How much you need on hand to survive the lead time plus a buffer — minus what you already have. If the difference is positive, that's what you order:
if the result is ≤ 0 — no order needed
"Days of cover" is the simple but most telling measure: current stock divided by sell-through speed. It's what colors the traffic light.
03 The DAX measures
Sell-through speed and "days of cover" are separate measures so they can be reused across reports:
// Average daily sales over a smoothing window (28 days) Avg Daily Sales = VAR _window = 28 RETURN DIVIDE( [Units sold over window], _window ) // How many days the current stock will last Days Of Cover = DIVIDE( [Stock units], [Avg Daily Sales] ) // Order recommendation including lead time, target and inbound To Order = VAR _need = [Avg Daily Sales] * ( [Lead days] + [Target days] ) - [Stock units] - [Inbound units] RETURN MAX( 0, ROUND( _need, 0 ) )
The status traffic light is a measure too: it compares "days of cover" to the lead time. Less than the lead time — "Urgent", on the edge — "Watch".
// Replenishment status by coverage horizon Replenishment Status = VAR _d = [Days Of Cover] RETURN SWITCH( TRUE(), _d < [Lead days], "Urgent", _d < [Lead days] + 15, "Watch", "OK" )
04 ABC classification
ABC isn't a manual label but a measure over cumulative revenue share (the Pareto rule): the first ~80% of revenue is class A, the next ~15% is B, the tail is C. The class recomputes itself when the period or the cut changes.
// ABC by cumulative revenue share in the current context ABC Class = VAR _cum = [Cumulative revenue share] // 0..1, descending RETURN SWITCH( TRUE(), _cum <= 0.80, "A", _cum <= 0.95, "B", "C" )
05 Why it's reliable
Lead time, the smoothing window and target stock are parameters in a reference table, not numbers buried in formulas. A supplier starts delivering faster — change "Lead days" in one row, and the whole replenishment recomputes.
Let's compute the reorder point on your catalog
In a free review we look at your sales and stock and show where you're at risk of stocking out on A items right now, and how much cash is frozen in slow positions. No obligation.
