EnableYourData.com

KPI · Inventory, purchasing and production

Inventory turnover: formula and example.

Inventory turnover shows how many times your average stock is sold and replaced during a period. It is calculated from cost of goods sold and average inventory value, both at cost. The higher the turnover, the less cash is tied up in stock.

Inventory turnover formula

Cost of goods sold ÷ average inventory value (at cost)

Worked example

In 2025 Acme Groothandel had cost of goods sold of €4,800,000. Stock was worth €1,100,000 on 1 January and €1,300,000 on 31 December, an average of €1,200,000. Inventory turnover is €4,800,000 ÷ €1,200,000 = 4.0 times a year.

Fictitious figures for Acme Groothandel, a sample wholesaler.

How to read this KPI

A higher figure means stock moves faster and ties up less working capital. Very high turnover can also mean stock is too thin and sales are being missed, so read it alongside fill rate. Compare by product group and against your own previous years, because turnover varies widely between fast and slow movers.

Pitfalls with inventory turnover

  • Dividing revenue at selling price by stock at cost, which inflates the result.
  • Averaging only opening and closing stock when levels swing a lot during the year.
  • Using a single figure for the whole range, so slow-moving items disappear from view.

SQL & DAX

Calculating inventory turnover in SQL and DAX

Two examples on a fictitious data warehouse for Acme Groothandel: a PostgreSQL query and a measure for a Power BI model. Adjust table and column names to your own model.

SQL · PostgreSQL
WITH cogs AS (
  SELECT SUM(ol.quantity * ol.unit_cost) AS cogs
  FROM order_lines ol
  JOIN orders o ON o.order_id = ol.order_id
  WHERE o.order_date >= date '2025-01-01' AND o.order_date < date '2026-01-01'
),
stock AS (
  SELECT AVG(day_value) AS avg_value
  FROM (
    SELECT snapshot_date, SUM(value) AS day_value
    FROM stock_levels
    WHERE snapshot_date >= date '2025-01-01' AND snapshot_date < date '2026-01-01'
    GROUP BY snapshot_date
  ) s
)
SELECT ROUND(cogs / NULLIF(avg_value, 0), 2) AS inventory_turnover
FROM cogs, stock;
DAX · Power BI
Average Inventory Value = AVERAGEX(VALUES(Stock[SnapshotDate]), CALCULATE(SUM(Stock[Value])))
Inventory Turnover = DIVIDE(SUMX(Sales, Sales[Quantity] * Sales[UnitCost]), [Average Inventory Value])

In ENABLE

Tracking this KPI in ENABLE

Plain-language questions

Ask for inventory turnover per month, customer or product in the SQL Explorer with AI. The AI writes the SQL, you see the query and run it yourself; the AI only receives metadata.

Read more →

In your Power BI dashboard

Define the KPI as a measure in your Power BI model and show it in the portal, with "Last refreshed" next to it. Access profiles and optional row-level security decide who sees which figures.

Read more →

Custom dashboards (pilot)

Add the KPI as a tile to a custom dashboard, compared with last year. The Dashboard Builder is a pilot and can be switched on per client.

Read more →

Monthly targets

With the built-in Targets app you set a target for the KPI per month, so you see actuals and target side by side.

Read more →

FAQ

Frequently asked questions

How do you calculate inventory turnover?

Divide cost of goods sold for a period by the average inventory value over the same period. Value both at cost so you are comparing like with like. Month-end stock levels give a better average than opening and closing stock alone.

What is the difference between inventory turnover and days inventory outstanding?

Days inventory outstanding looks at the same thing from the other side: the number of days in the period divided by turnover. Turnover of 4 times a year equals roughly 91 days of inventory. Turnover tells you how often stock cycles, DIO how long an item sits on the shelf on average.

Is a high inventory turnover always good?

No, not always. High turnover ties up less capital, but it can also mean stock is too lean and customers are being turned away. Judge it together with fill rate and stockout rate.

Use AI on your own data. Securely, and without the headache.

In an online demo we show how ENABLE makes your data securely available and how you build on it: describing an app in the AI Builder, plain-language questions, dashboards and APIs. And how we set it up and manage it for you.