← Back to Metrics

Shipment Volume

Also known as: Shipments, Shipments Shipped, Shipped Volume, Outbound Shipment Count, Customer Shipment Count, Dispatch Volume, Fulfillment Shipment Volume

OperationsmetricE-commerce: Post-Purchase Logistics & FulfillmentLogistics & Supply ChainE-commerce

Shipment Volume is the number of unique customer-order shipments handed to a carrier or confirmed as dispatched in the reporting period, with each split shipment counted separately and duplicate status events removed. It shows how many fulfillment commitments entered the delivery journey, which lets teams size carrier capacity, compare shipments against orders placed and track on-time and split-shipment performance.

Business Use Case

1️⃣ The Fulfillment Operations lead compares daily Shipment Volume against the carrier capacity plan before a promotion and books extra pickups or shifts volume to a second carrier when forecast volume exceeds 90% of contracted capacity. 2️⃣ The E-commerce Merchandising manager reviews Shipment Volume per order by product category and fulfillment node; when split shipments push shipments per order above target, the team rebalances inventory across nodes to consolidate orders. 3️⃣ The Customer Experience team watches Shipment Volume by service level and destination region alongside On-Time Delivery Rate and sends proactive delay notifications when a volume spike coincides with late carrier scans.

Business Criticality

High

Journey / Navigation Area

Generic

Owning Function

Fulfillment Operations

Scope

Event

Formula

COUNT(DISTINCT shipment_id) WHERE MIN(status_timestamp WHERE canonical_status IN ('SHIPPED', 'CARRIER_ACCEPTED')) >= window_start AND < window_end AND is_test = FALSE AND fraud_status <> 'REJECTED' AND voided_before_dispatch = FALSE AND shipment_type IN ('CUSTOMER_ORDER', 'REPLACEMENT', 'RESHIP')

Calculation Notes

1️⃣ Count each shipment_id once, dated by its earliest shipped or carrier-accepted status ever recorded; a shipment that first shipped before the window is not counted again because of a later status event. 2️⃣ Multiple packages under one shipment_id count as one shipment; an order split into several shipments contributes one per shipment_id (this is what separates Shipment Volume from Orders Shipped). 3️⃣ Exclude test, fraud-rejected, voided-before-dispatch, internal transfer, supplier replenishment and other non-customer shipments. 4️⃣ Replacement and reshipment records count only when they carry a new shipment_id and a shipment_type of REPLACEMENT or RESHIP, so they can be reported separately. 5️⃣ Never subtract later cancellations, returns, delivery failures or refunds from historical volume. 6️⃣ Use half-open intervals [window_start, window_end) in the reporting time zone and restate the last 7 days to absorb late carrier scans. 7️⃣ Session timeout rules do not apply; acquisition channel and device attributes are inherited from the originating order.

Technical Details

Measure TypeCounter
Aggregation WindowDaily, Weekly, Monthly

Events

SQL Queries

Google Analytics 4 (BigQuery)
-- ==========================================
-- 1. GOOGLE BIGQUERY SQL
-- ==========================================
-- Shipment Volume from the backend OMS shipment tables (no web events involved).
DECLARE window_start TIMESTAMP DEFAULT TIMESTAMP('2026-09-01 00:00:00');
DECLARE window_end   TIMESTAMP DEFAULT TIMESTAMP('2026-10-01 00:00:00');

WITH first_dispatch AS (
  -- earliest shipped / carrier-accepted status ever recorded per shipment
  SELECT
    e.shipment_id,
    MIN(e.status_timestamp) AS first_shipped_at
  FROM `project.oms.shipment_status_events` AS e
  WHERE e.canonical_status IN ('SHIPPED', 'CARRIER_ACCEPTED')
  GROUP BY e.shipment_id
),
customer_shipments AS (
  SELECT
    s.shipment_id,
    s.order_id,
    s.shipment_type,
    s.carrier,
    s.service_level,
    f.first_shipped_at
  FROM first_dispatch AS f
  JOIN `project.oms.shipments` AS s
    ON s.shipment_id = f.shipment_id
  WHERE COALESCE(s.is_test, FALSE) = FALSE
    AND COALESCE(s.fraud_status, '') <> 'REJECTED'
    AND COALESCE(s.voided_before_dispatch, FALSE) = FALSE
    AND s.shipment_type IN ('CUSTOMER_ORDER', 'REPLACEMENT', 'RESHIP')
)
SELECT
  DATE(first_shipped_at) AS shipment_date,
  carrier,
  service_level,
  COUNT(DISTINCT shipment_id) AS shipment_volume,
  COUNT(DISTINCT order_id) AS orders_shipped,
  SAFE_DIVIDE(COUNT(DISTINCT shipment_id), COUNT(DISTINCT order_id)) AS shipments_per_order
FROM customer_shipments
WHERE first_shipped_at >= window_start
  AND first_shipped_at < window_end
GROUP BY shipment_date, carrier, service_level
ORDER BY shipment_date, carrier, service_level;
Adobe Experience Platform (AEP Query Service)
-- ==========================================
-- 2. ADOBE AEP QUERY SERVICE SQL
-- ==========================================
-- Shipment Volume from the OMS shipment datasets ingested into AEP (backend records, not web events).
WITH first_dispatch AS (
  SELECT
    e.shipment_id,
    MIN(e.status_timestamp) AS first_shipped_at
  FROM oms_shipment_status_events e
  WHERE e.canonical_status IN ('SHIPPED', 'CARRIER_ACCEPTED')
  GROUP BY e.shipment_id
),
customer_shipments AS (
  SELECT
    s.shipment_id,
    s.order_id,
    s.shipment_type,
    s.carrier,
    s.service_level,
    f.first_shipped_at
  FROM first_dispatch f
  JOIN oms_shipments s
    ON s.shipment_id = f.shipment_id
  WHERE COALESCE(s.is_test, FALSE) = FALSE
    AND COALESCE(s.fraud_status, '') <> 'REJECTED'
    AND COALESCE(s.voided_before_dispatch, FALSE) = FALSE
    AND s.shipment_type IN ('CUSTOMER_ORDER', 'REPLACEMENT', 'RESHIP')
)
SELECT
  CAST(first_shipped_at AS DATE) AS shipment_date,
  carrier,
  service_level,
  COUNT(DISTINCT shipment_id) AS shipment_volume,
  COUNT(DISTINCT order_id) AS orders_shipped,
  CAST(COUNT(DISTINCT shipment_id) AS DOUBLE) / NULLIF(COUNT(DISTINCT order_id), 0) AS shipments_per_order
FROM customer_shipments
WHERE first_shipped_at >= TIMESTAMP '2026-09-01 00:00:00'
  AND first_shipped_at < TIMESTAMP '2026-10-01 00:00:00'
GROUP BY CAST(first_shipped_at AS DATE), carrier, service_level
ORDER BY shipment_date, carrier, service_level;

Source Data

Backend Order Management (OMS) shipment and carrier status tables, joined to order and CRM customer records

Dependencies

Prerequisite: List the dependencies required for this Metric

Dimensions:

shipment-statusnumber-of-shipmentscarrierfulfillment-methodshipping-tierdelivery-regionorder-status

Report Attributes

Shipment Date Order Date Shipping Carrier Shipping Method / Service Level Shipment Type Fulfillment Method Warehouse / Fulfillment Node Origin Region Delivery Region Delivery Promise Band Product Category Order Channel Acquisition Channel Customer Type

Recommended Reporting Views

Views
Order-to-Delivery JourneyShipping Demand and Service-Level PerformancePost-Purchase Customer ExperienceOmnichannel Conversion and FulfillmentCampaign Demand-to-Delivery

Segment Eligibility

true

Governance

Data SensitivityInternal

Derived KPIs

Governance

Created bydevyendarm
Created on9/10/2026
Last modified bydevyendarm
Last modified on9/19/2026
Version1.0.0
Validation stateqa passed
StatusPUBLISHED

GitHub

View File on GitHubcatalog/metrics/shipment-volume.yml

Community Discussion