Plain-language questions
Ask for supplier on-time delivery 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
Supplier on-time delivery is the percentage of purchase orders that arrive on or before the agreed delivery date. It is one of the main measures for assessing suppliers. An unreliable supplier forces you to hold more safety stock.
Purchase orders received on or before the agreed date ÷ total purchase orders received × 100%
In the second quarter of 2026 Acme Groothandel received 640 purchase orders. Of these, 576 arrived on or before the agreed date. Supplier on-time delivery is 576 ÷ 640 × 100% = 90.0%.
Fictitious figures for Acme Groothandel, a sample wholesaler.
A higher percentage means you can plan better and manage with less buffer stock. Look at it per supplier, and alongside the percentage check how many days late the late deliveries were. Compare with the contract terms and with the same supplier in earlier periods.
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 s.name AS supplier,
COUNT(*) AS received_pos,
COUNT(*) FILTER (WHERE po.received_date <= po.expected_date) AS on_time,
ROUND(100.0 * COUNT(*) FILTER (WHERE po.received_date <= po.expected_date)
/ NULLIF(COUNT(*), 0), 1) AS on_time_pct
FROM purchase_orders po
JOIN suppliers s ON s.supplier_id = po.supplier_id
WHERE po.received_date IS NOT NULL
AND po.received_date >= current_date - interval '6 months'
GROUP BY s.name
ORDER BY on_time_pct;Received POs = CALCULATE(COUNTROWS(PurchaseOrders), NOT ISBLANK(PurchaseOrders[ReceivedDate]))
Supplier On-Time Delivery = DIVIDE(COUNTROWS(FILTER(PurchaseOrders, NOT ISBLANK(PurchaseOrders[ReceivedDate]) && PurchaseOrders[ReceivedDate] <= PurchaseOrders[ExpectedDate])), [Received POs])In ENABLE
Ask for supplier on-time delivery 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
Compare the receipt date of each purchase order with the agreed delivery date and count how many arrived on or before it. Divide by the total number of orders received. Freeze the agreed date when the order is confirmed so it cannot be changed later.
That depends on your own rules. Many companies use a delivery window, for example no more than two days before the agreed date, because early deliveries take up space and have to be paid sooner. Set the window and apply it to every supplier.
Share the figures with the supplier and look for the cause together, such as unrealistic lead times or late orders on your side. In the meantime, update the lead time and safety stock in your system to reflect reality. If it keeps going wrong, a second supplier is an option.
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.