Plain-language questions
Ask for order cycle time 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
Order cycle time is the time between a customer placing an order and the order being delivered in full. It covers order processing, picking and packing, waiting for dispatch and transport. It is the lead time as the customer experiences it.
Sum of (delivery date − order date) across fully delivered orders ÷ number of fully delivered orders
An order Acme Groothandel received on 6 April 2026 was shipped on 7 April and delivered on 8 April: a cycle time of 2 days. Across all 3,000 orders delivered in April that added up to 6,900 order-days. The average order cycle time is 6,900 ÷ 3,000 = 2.3 days.
Fictitious figures for Acme Groothandel, a sample wholesaler.
A shorter order cycle time means customers get their goods sooner. Split it into time to dispatch, which you control, and transit time, which mostly depends on the carrier. Compare with the delivery time you promise customers and by channel or customer segment.
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 delivered AS (
SELECT order_id,
MIN(shipped_at) AS first_shipped_at,
MAX(delivered_at) AS last_delivered_at
FROM shipments
GROUP BY order_id
HAVING COUNT(*) = COUNT(delivered_at)
)
SELECT date_trunc('month', o.order_date) AS month,
COUNT(*) AS delivered_orders,
ROUND(AVG(d.first_shipped_at::date - o.order_date::date), 2) AS avg_days_to_ship,
ROUND(AVG(d.last_delivered_at::date - o.order_date::date), 2) AS avg_order_cycle_days
FROM orders o
JOIN delivered d ON d.order_id = o.order_id
GROUP BY 1
ORDER BY 1;Delivered Orders = CALCULATE(COUNTROWS(Orders), NOT ISBLANK(Orders[DeliveredDate]))
Order Cycle Time (days) = DIVIDE(SUMX(FILTER(Orders, NOT ISBLANK(Orders[DeliveredDate])), DATEDIFF(Orders[OrderDate], Orders[DeliveredDate], DAY)), [Delivered Orders])In ENABLE
Ask for order cycle time 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
For each fully delivered order, subtract the order date from the date the last shipment was delivered. Take the average across all orders in the period. State whether you count calendar days or working days.
Order cycle time runs from order to delivery and is what the customer experiences. Average delivery time, or transit time, only runs from dispatch to delivery. The difference between the two is the time the order spends inside your own organisation.
Start with time to dispatch, because that is in your own hands. A later same-day cut-off, faster order processing and enough stock in the right location usually make the biggest difference. After that, compare carriers on transit time.
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.