Short answer: OEE (overall equipment effectiveness) is Availability × Performance × Quality. Availability is run time divided by planned production time. Performance is how fast the machine ran compared with its ideal speed. Quality is good parts divided by all parts. A line that ran 85% of the planned time, at 90% of ideal speed, with 95% good parts, has an OEE of 0.85 × 0.90 × 0.95 = 72.7%.
What are the three parts of OEE?
| Part | Formula | The loss it shows |
|---|---|---|
| Availability | Run time ÷ Planned production time | Breakdowns, changeovers, waiting for material |
| Performance | (Ideal cycle time × Total count) ÷ Run time | Running slower than it should, small stops |
| Quality | Good count ÷ Total count | Scrap and rework |
Each part is a share between 0 and 100%. Multiplying them gives the share of planned time that was truly productive: running, at full speed, making good parts.
What does a worked example look like?
One shift on a packing line:
| Data | Value |
|---|---|
| Shift length | 480 minutes |
| Planned break | 30 minutes |
| Planned production time | 450 minutes |
| Unplanned stops (a jam, a late pallet) | 45 minutes |
| Run time | 405 minutes |
| Ideal cycle time | 0.5 minutes per unit |
| Total count | 730 units |
| Good count | 700 units |
- Availability = 405 ÷ 450 = 90.0%
- Performance = (0.5 × 730) ÷ 405 = 365 ÷ 405 = 90.1%
- Quality = 700 ÷ 730 = 95.9%
- OEE = 0.900 × 0.901 × 0.959 = 77.8%
A quick check that needs no parts at all: good count × ideal cycle time ÷ planned production time. Here that is 700 × 0.5 ÷ 450 = 77.8%, the same number. If your two results differ, one of the inputs is wrong.
What is a good OEE?
Around 85% is often called world class. Many plants run at 55 to 65%, and a first honest measurement below 50% is common. The number itself matters less than its direction and its split: a line at 70% that loses most of it in availability needs maintenance and faster changeovers; one that loses it in quality needs a look at the process.
Compare a line with itself over time, and with lines that make similar products. Comparing a high-mix line with a line that runs one product all year says little.
Which mistakes inflate OEE?
- A slow ideal cycle time. If the "ideal" is the speed you usually run, performance sits near 100% and the speed loss disappears. Use the design speed of the machine, or the best speed ever sustained.
- Planned stops counted differently. One line takes cleaning out of planned time, another leaves it in. Their OEE can no longer be compared. Write down what counts as planned and use it everywhere.
- Averaging the OEE of lines. The OEE of a plant is not the average of its lines' OEE. Add up the minutes and the counts of all lines first, then calculate once. A small line with a high OEE otherwise pulls the average up.
How do you calculate it in SQL, DAX or Excel?
From totals per line, in SQL:
SELECT line,
SUM(run_min) / NULLIF(SUM(planned_min), 0)
* SUM(ideal_cycle_min * total_count) / NULLIF(SUM(run_min), 0)
* SUM(good_count)::numeric / NULLIF(SUM(total_count), 0) * 100 AS oee
FROM production GROUP BY line;In Power BI, build the three parts as measures and multiply them:
OEE % = [Availability %] * [Performance %] * [Quality %]Because each measure sums its inputs before it divides, the total row of a table is calculated from the totals, not averaged.
Where can you check this?
Which chart shows it best?
A single OEE number hides where the time went. A waterfall from planned time to good output, with one step each for the availability, performance and quality losses, shows it at once. Next to it, a line of OEE per day or shift with the target, and a sorted bar of OEE by line.
KPI Atlas has OEE and its three parts, each with the definition, the formula, DAX, SQL and Excel to copy, the benchmark, the common mistakes and the charts that show it best, along with the rest of the manufacturing KPIs: unplanned downtime, first pass yield, scrap rate, changeover time and more.

