Plain-language questions
Ask for OEE 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
OEE (overall equipment effectiveness) measures how much of the planned production time actually produces good products at the ideal speed. It is the product of three factors: availability, performance and quality. It shows whether losses come from downtime, running too slowly or rejects.
Availability × performance × quality, where availability = run time ÷ planned time, performance = (ideal cycle time × units produced) ÷ run time and quality = good units ÷ units produced
Acme Groothandel's packing line was planned for 500 minutes one day and ran for 450: availability is 450 ÷ 500 = 90%. At an ideal cycle time of 6 seconds, the 4,050 units produced took 24,300 seconds, or 405 minutes: performance is 405 ÷ 450 = 90%. Of those, 3,888 were good: quality is 3,888 ÷ 4,050 = 96%. OEE is 0.90 × 0.90 × 0.96 = 77.8%.
Fictitious figures for Acme Groothandel, a sample wholesaler.
A higher OEE means you get more good output from the same planned time. The headline figure says little without its three factors: a drop caused by downtime needs a different fix than a drop caused by rejects. Compare a line with itself over time; lines making different products with different cycle times are hard to compare with each other.
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.
SELECT date_trunc('week', started_at) AS week,
ROUND(SUM(run_minutes)::numeric / NULLIF(SUM(planned_minutes), 0), 3) AS availability,
ROUND((SUM(ideal_cycle_seconds * (good_qty + scrap_qty)) / 60.0)::numeric
/ NULLIF(SUM(run_minutes), 0), 3) AS performance,
ROUND(SUM(good_qty)::numeric / NULLIF(SUM(good_qty + scrap_qty), 0), 3) AS quality,
ROUND((SUM(ideal_cycle_seconds * good_qty) / 60.0)::numeric
/ NULLIF(SUM(planned_minutes), 0), 3) AS oee
FROM production_orders
WHERE finished_at IS NOT NULL
GROUP BY 1
ORDER BY 1;Availability = DIVIDE(SUM(Production[RunMinutes]), SUM(Production[PlannedMinutes]))
OEE = DIVIDE(SUMX(Production, Production[IdealCycleSeconds] * Production[GoodQty]) / 60, SUM(Production[PlannedMinutes]))In ENABLE
Ask for OEE 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
Multiply availability, performance and quality. Availability is run time divided by planned time, performance is the ideal time for the units made divided by run time, and quality is good units divided by all units made. You get the same result by multiplying good units by the ideal cycle time and dividing by planned time.
Capacity utilisation measures how much of the available time you have scheduled and used. OEE looks at how effective that scheduled time was. A line can be fully booked and still have a low OEE.
The six big losses are breakdowns, changeovers, minor stops, reduced speed, start-up rejects and production rejects. The first two reduce availability, the middle two performance and the last two quality. Logging losses this way shows where the biggest gains are.
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.