← Back to Metrics
Average Delivery Time
Also known as: Delivery Duration, Shipping Time
Measures the average time taken from order dispatch to delivery at the customer's location. It provides insights into the efficiency of the delivery process.
Business Use Case
Executives use this metric to identify bottlenecks in the delivery process and implement strategies to improve delivery speed.
Business Criticality
High
Journey / Navigation Area
Generic
Owning Function
Data Architecture Team
Scope
Item
Formula
SUM(delivery_time) / COUNT(deliveries)Calculation Notes
Exclude deliveries with incomplete data or those canceled. Consider time zones and public holidays.
Technical Details
Measure Typeaverage
Aggregation WindowTime based - Daily
Events
| Platform | Event |
|---|---|
| Google Analytics 4 | purchase |
| Adobe | purchase |
Data Mappings
W3 Data Layer
{
"transaction": {
"averageDeliveryTime": 3.5
}
}GA4 Data Layer
{
"event": "purchase",
"ecommerce": {
"average_delivery_time": 3.5
}
}Adobe Client Data Layer
{
"event": "purchase",
"ecommerce": {
"averageDeliveryTime": 3.5
}
}XDM Mapping
{
"_experience": {
"analytics": {
"customDimensions": {
"averageDeliveryTime": 3.5
}
}
}
}SQL Queries
Google Analytics 4 (BigQuery)
-- ==========================================
-- 1. GOOGLE BIGQUERY SQL (GA4 Export)
-- ==========================================
SELECT AVG(TIMESTAMP_DIFF(delivery_time, order_time, MINUTE)) AS average_delivery_time
FROM (
SELECT
TIMESTAMP_MICROS(MAX(CASE WHEN event_name = 'purchase' THEN event_timestamp END)) AS order_time,
TIMESTAMP_MICROS(MAX(CASE WHEN event_name = 'delivery' THEN event_timestamp END)) AS delivery_time
FROM `your-project.analytics_123456789.events_*`, UNNEST(event_params) AS params
WHERE event_name IN ('purchase', 'delivery')
GROUP BY user_pseudo_id
)
WHERE delivery_time IS NOT NULL AND order_time IS NOT NULL;Adobe Experience Platform (AEP Query Service)
-- ==========================================
-- 2. ADOBE AEP QUERY SERVICE SQL (XDM Dataset)
-- ==========================================
SELECT AVG(DATEDIFF(delivery_time, order_time, 'minute')) AS average_delivery_time
FROM (
SELECT
MAX(CASE WHEN xdm:eventType = 'commerce.purchases' THEN xdm:timestamp END) AS order_time,
MAX(CASE WHEN xdm:eventType = 'commerce.deliveries' THEN xdm:timestamp END) AS delivery_time
FROM your_dataset.your_table
WHERE xdm:eventType IN ('commerce.purchases', 'commerce.deliveries')
GROUP BY xdm:identityMap.ecid.id
)
WHERE delivery_time IS NOT NULL AND order_time IS NOT NULL;Source Data
ERP
Dependencies
[ "Order Dispatch Time", "Delivery Completion Time" ]
Report Attributes
Region Delivery Method Product Category
Recommended Reporting Views
Views
Logistics Performance DashboardOperational Efficiency Dashboard
Segment Eligibility
true
Governance
Data Sensitivityinternal
Governance
Created bydevyendarm
Created on8/19/2026
Last modified bydevyendarm
StatusPUBLISHED
GitHub
View File on GitHub
catalog/metrics/average-delivery-time.yml