Service levels and stock you can actually act on.
Most distribution reporting describes last month instead of changing next month — a single on-time-in-full (OTIF) average, a stock variance nobody explains. I handle the part that turns that around: reconciling sell-in against sell-out, splitting an average into the routes actually causing it, and building reports operations can use, not just board packs.
Logistics data analysis, in your terms.
Reconciling two record sets
Sell-in vs sell-out, delivery notes vs invoices vs proof of delivery
Consolidating scattered records
Distributor secondary-sales returns merged from a dozen formats into one
Recurring reporting
Weekly and monthly OTIF, fill rate and service-level reporting by depot and route
Data cleaning
Outlet universe reconciliation, telematics export cleanup
Disaggregating an average
Splitting one service-level number into depot, route and customer-tier detail
Root-cause analysis
Delay and rejection coding by carrier, route and depot
Stock reconciliation
Physical counts checked against system stock, shrinkage and ageing exposure
Claims & margin
Distributor claim and trade-spend reconciliation, cost-to-serve by route
What it runs on.
SQL & PostgreSQL
Joining ERP, distributor and telematics data at volume
Excel & Google Sheets
Where most distributor returns still arrive
Python (pandas)
Repeatable cleaning across formats that change every month
Power BI, Tableau & Looker Studio
Service-level dashboards split by depot and route
Telematics & ERP exports
Delivery, fleet and stock movement data
Service level reported as one number?
If OTIF is an average nobody can act on, sell-out is invisible, or stock variance keeps getting written off — describe it and I’ll tell you honestly whether I’m the right person for it.
This page describes what I can do — not a list of programmes I’ve worked on.