EnableYourData.com

KPI · Inventory, purchasing and production

Supplier on-time delivery: formula and example.

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.

Supplier on-time delivery formula

Purchase orders received on or before the agreed date ÷ total purchase orders received × 100%

Worked example

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.

How to read this KPI

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.

Pitfalls with supplier on-time delivery

  • Changing the expected date after the event to match the actual delivery, so everything looks on time.
  • Counting early deliveries as good when they cause space or payment problems.
  • Counting partial deliveries as on time without checking the quantity received.

SQL & DAX

Calculating supplier on-time delivery in SQL and 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.

SQL · PostgreSQL
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;
DAX · Power BI
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

Tracking this KPI in ENABLE

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.

Read more →

In your Power BI dashboard

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.

Read more →

Custom dashboards (pilot)

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.

Read more →

Monthly targets

With the built-in Targets app you set a target for the KPI per month, so you see actuals and target side by side.

Read more →

FAQ

Frequently asked questions

How do you measure supplier on-time delivery?

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.

Do early deliveries count as on time?

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.

What should you do about a supplier that is often late?

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.

Use AI on your own data. Securely, and without the headache.

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.