Plain-language questions
Ask for perfect order rate 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 · Logistics
Perfect order rate is the percentage of orders that reach the customer without any problem: on time, complete, with the right items, undamaged and not returned. An order that fails on any one point does not count as perfect. It is the strictest measure of end-to-end order fulfilment.
Orders with no error at all (on time, complete, picked correctly, undamaged, not returned) ÷ total orders delivered × 100%
In May 2026 Acme Groothandel delivered 2,000 orders, of which 1,880 were on time and complete. Of those 1,880, 30 were damaged, 25 had a picking error and 15 were returned, with no overlap. That leaves 1,880 − 30 − 25 − 15 = 1,810 perfect orders, so the perfect order rate is 1,810 ÷ 2,000 × 100% = 90.5%.
Fictitious figures for Acme Groothandel, a sample wholesaler.
A higher perfect order rate means less rework, fewer complaints and lower cost per order. Because every type of failure feeds into it, the figure only becomes useful when you also see which failure is most common. Compare with your own trend and by customer group; record which failures count so periods stay comparable.
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 per_order AS (
SELECT order_id,
BOOL_AND(delivered_at::date <= promised_date) AS on_time,
BOOL_OR(complete) AS in_full,
BOOL_OR(damaged) AS damaged
FROM shipments
WHERE delivered_at IS NOT NULL
GROUP BY order_id
),
pick_errors AS (SELECT DISTINCT order_id FROM picks WHERE errors > 0),
returned AS (SELECT DISTINCT order_id FROM returns)
SELECT ROUND(100.0 * COUNT(*) FILTER (
WHERE po.on_time AND po.in_full AND NOT po.damaged
AND pe.order_id IS NULL AND r.order_id IS NULL)
/ NULLIF(COUNT(*), 0), 1) AS perfect_order_pct
FROM per_order po
LEFT JOIN pick_errors pe ON pe.order_id = po.order_id
LEFT JOIN returned r ON r.order_id = po.order_id;Perfect Order % = DIVIDE(CALCULATE(DISTINCTCOUNT(OrderDelivery[OrderID]), OrderDelivery[OnTime] = TRUE(), OrderDelivery[InFull] = TRUE(), OrderDelivery[Damaged] = FALSE(), OrderDelivery[HasPickError] = FALSE(), OrderDelivery[Returned] = FALSE()), DISTINCTCOUNT(OrderDelivery[OrderID]))In ENABLE
Ask for perfect order rate 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
Count the orders where nothing went wrong: on time, complete, picked correctly, undamaged and with no return or complaint. Divide by the total number of orders delivered. Decide upfront which types of failure you include.
It works as an approximation, but it is only accurate if the failures are independent. In practice they often go together, for example an order that is both late and incomplete. Counting per order gives a more reliable figure.
OTIF only looks at on time and in full. Perfect order rate adds conditions such as correct items, no damage and no return. Perfect order rate is therefore equal to or lower than OTIF.
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.