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.
KPI · Inventory, purchasing and production
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.
Cost of goods sold ÷ average inventory value (at cost)
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.
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.
SQL & 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.
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;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
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.
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.
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.
With the built-in Targets app you set a target for the KPI per month, so you see actuals and target side by side.
FAQ
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.
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.
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.
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.