Decision software for grocery chains

GMROI, stock turn and margin: which one misleads, and when

One of the most common sentences in a category meeting: this product has a high margin, keep it on the list. The second most common: this product turns fast, let us raise the stock. Both rest on incomplete information. Margin and turnover are two measures that balance each other, and looked at alone they systematically pull in the wrong direction. In this article I work through what each of the three measures actually measures, when each misleads, and what GMROI does and does not solve — with numbers.

Defining the three measures

Gross margin rate is found by deducting cost from sales and dividing by sales. It tells you how much profit is left from one unit of sale. It has no concept of time; it does not know whether the product sat on the shelf for a week or a year.

Inventory turnover is found by dividing the cost of goods sold in a period by average stock at cost. It tells you how many times stock was replaced in the period. It has no concept of profit; it does not notice that a product is being sold at a loss.

GMROI is found by dividing gross profit by average stock at cost. It tells you how much gross profit each lira tied up in stock produced in the period. It folds margin and turnover into one number, which is why it is the most useful measure for category decisions.

All three must use the same period definition, the same cost definition and the same average stock calculation. Putting three measures from different sources side by side makes the comparison meaningless.

Three products, three different conclusions

Compare three product groups in a grocery chain using annual figures. Amounts exclude VAT and costs are on weighted average.

Someone looking at margin picks C and A and drops B from the list. Someone looking at turnover picks B and cuts stock on A and C. Someone looking at GMROI finds all three close and leaves the decision to other criteria.

The third is right. Product B has a low margin but ties up little capital and turns twelve times a year. Per lira tied up in stock it does better work than A. Dropping B because its margin is 23 per cent means losing one of the highest capital-return products you have.

The reverse is also true. Tripling B's stock because its turnover is high cuts turnover to a third and takes GMROI from 3.6 down to 1.2. Turnover is not a target; it is a result.

  • A — filter coffee: sales 1,000,000, cost 700,000, average stock 100,000; margin 30%, turn 7.0, GMROI 3.00
  • B — liquid detergent: sales 390,000, cost 300,000, average stock 25,000; margin 23%, turn 12.0, GMROI 3.60
  • C — ice cream: sales 2,000,000, cost 1,300,000, average stock 200,000; margin 35%, turn 6.5, GMROI 3.50

What margin hides on its own

The margin rate hides how much capital the product consumes. If a product with a 60 per cent margin turns once a year, each lira tied up in stock produces 0.6 lira of gross profit a year. A product with a 20 per cent margin turning eight times produces 2.0.

The second thing it hides is discounting. The gap between the margin on the shelf ticket and the realised margin is the size of campaigns, staff discounts and markdowns on products nearing their expiry date. If the measure is not calculated from the realised sales amount, it misleads. For that, the sales fact table needs list price and net sales amount as separate fields.

The third is shrinkage. In a high-margin product that is fragile or perishable, the shrinkage rate eats the margin. A margin calculation that does not include shrinkage in cost shows the category manager a permanently optimistic picture. Shrinkage movements should be included in the measure as their own movement type.

What turnover hides on its own

Turnover hides profit. A product sold below cost turns extraordinarily fast and looks like a success in the table. That is exactly what happens when products nearing their expiry date are cleared at a discount: turnover jumps, gross profit erodes.

The second thing it hides is being out of stock. Because turnover divides by average stock, when stock runs out the denominator shrinks and the measure rises. A product that is constantly out of stock shows excellent turnover and the lost sale appears nowhere. That is why stock availability must always be reported next to turnover.

The third is how the denominator is calculated. If average stock is taken as the mean of period start and period end, it comes out entirely wrong for a seasonal product. Ice cream stock is low in early January and late December and high through the summer. The average of the two endpoints understates the real capital tied up by half and doubles GMROI.

The right method is to take the average of all days in the period from a daily stock snapshot fact table. That calculation is cheap when a daily cost snapshot table exists, and it happens in one procedure.

GMROI is not always enough either

Because it combines margin and turnover, GMROI is the most balanced of the three — but it needs careful reading in three situations.

The first is a new product. The annual GMROI of something launched two months ago is meaningless; as the period shortens the measure becomes volatile. If the product's time on the list is shorter than the period, the measure should be annualised and that fact flagged on screen.

The second is consignment and extended payment terms. GMROI measures capital tied up in stock. On consignment stock no capital is tied up and the measure goes to infinity. With long payment terms the actual capital tied up is lower than the measure suggests. Supply terms should be held as an attribute in the dimension and comparisons made between products on the same terms.

The third is role. Some products are kept on the list to generate footfall, not profit. Bread has a low GMROI in a supermarket and that is not a problem. Unless product role is defined in the dimension, a GMROI ranking will propose dropping those products every month.

Which field the denominator comes from should also be written down. Whether average stock at cost or average stock at retail is used produces two different GMROIs, and both go by the same name.

What the data model needs

For these three measures to come out consistently, a few things are mandatory on the warehouse side.

The measures are calculated in a single procedure that takes period, breakdown and the stock-averaging method as parameters. The reporting tool does not perform its own division.

For the comparison to be meaningful, the product dimension needs role, supply terms, seasonality and date-added-to-range fields. Without them, ranking is adding apples from one category to pears from another.

  • FactSalesLine — net sales amount and cost of goods sold as separate fields
  • FactStockDaily — grain: branch x product x date, daily stock at cost
  • Shrinkage and waste included in cost as their own movement type
  • DimProduct — product role, supply terms, seasonality, date added to range
  • Stock availability rate alongside every turnover report

What to do

Show all three measures together on one screen. A category screen showing margin alone will keep producing wrong decisions.

Calculate average stock from daily snapshots, not from the average of period start and end. In seasonal categories the difference reaches a factor of two.

Always read turnover alongside stock availability. High turnover can be being out of stock in disguise.

Define product role and supply terms in the dimension; compare only products with the same role and the same terms.

In Mindpera, the Mind Stock and Mind Cost modules produce these measures from the same fact tables and the same stored procedures; the average stock calculation rests on daily snapshots and the method used is written next to the measure. The interpretation layer explains the ranking, it does not produce it.

See it with your own data.