Skip to content

Repository files navigation

Supply Chain Performance: Delivery & Profitability Analysis

Where is a global retailer losing time and money — and what would actually fix it?

An end-to-end analysis of 180,519 order-items from a global supply chain operation, built to turn a vague sense of "things are going wrong" into specific, quantified findings and business recommendations. Data was loaded and modeled in MySQL, analyzed with SQL, and visualized in an interactive Power BI dashboard.


The business question

A global retailer ships products to customers across five world markets. Management suspected two problems but couldn't quantify them: deliveries were often late, and some orders seemed to lose money. This project set out to answer three operational questions:

  1. What drives late deliveries? Which shipping methods, regions, or products are the real problem?
  2. Which orders actually lose money — and why?
  3. Where is the single highest-leverage fix?

Key findings

1. Delays are a promise problem, not an execution problem

54.8% of all deliveries are late — but the cause isn't a bad region or a bad product. Late rates are nearly flat across all 23 regions (49%–58%) and all 50 categories (55%–58%). The entire story lives in shipping method:

Shipping mode Late rate
First Class 95.3%
Second Class 76.6%
Same Day 45.7%
Standard Class 38.1%

The mechanism: the warehouse ships at a roughly constant real pace (~4 days), but the premium tiers promise faster than the operation can deliver. First Class promises 1 day and takes 2 — so it's late 95% of the time. This is a service-level-agreement (SLA) calibration problem, not a logistics breakdown.

Recommendation: Recalibrate delivery promises for First and Second Class to realistic windows. This alone converts most "late" deliveries into "on-time" — with zero change to operations.

2. Losses have no structural driver — they hide in a concentrated tail

18.7% of order-items lose money, totaling ~$3.88M — nearly wiping out the ~$3.97M in net profit. The intuitive suspects don't explain it:

  • By department: loss rate 17.7%–23.5% (flat)
  • By discount level: 18.4%–19.0% (flat) — discounts do not drive losses
  • Deep-loss orders are statistically identical to profitable ones on discount, price, and quantity

Instead, the loss is concentrated in magnitude: a small "deep-loss" tail of ~8.7% of orders accounts for 85.3% of all losses.

Recommendation: Since no product or segment is the culprit, the fix isn't cutting a category — it's a transaction-level margin guardrail that flags any order falling below a margin threshold before it ships. The fact that losses aren't explained by any available field also signals a data gap: transaction-level cost data should be connected for deeper root-cause analysis.


The dashboard

A two-page interactive Power BI dashboard, one story per page:

Page 1 — Delivery Performance

KPI cards, late rate by shipping mode, promised-vs-actual days, and a market slicer for interactivity.

Delivery Performance page

Page 2 — Profitability

KPI cards, the flat loss-rate-by-discount chart (proving no structural driver), and the concentration of losses in the deep-loss tail.

Profitability page


Tools & method

  • MySQL — loaded and structured the raw 180K-row dataset (LOAD DATA INFILE), with a typed schema.
  • SQL — delay and profitability analysis: aggregation, CASE segmentation, GROUP BY/HAVING, ratio and concentration analysis.
  • Power BI + DAX — data model and measures (AVERAGE, DIVIDE, FILTER, SUMX, SWITCH), conditional formatting, interactive slicers.
  • Data cleaning — removed PII columns (passwords, emails, names), resolved a latin-1/UTF-8 encoding mismatch, and handled null markers.

Repository structure

supply-chain-analysis/
├── README.md
├── sql/
│   ├── load_dataco.sql           # schema + data load
│   ├── 01_delay_analysis.sql     # what drives late delivery
│   └── 02_profit_analysis.sql    # where losses hide
├── powerbi/
│   └── dataco_powerbiDashBoard.pbix
└── images/
    ├── page1_delivery.png
    └── page2_profitability.png

Dataset

DataCo Smart Supply Chain dataset (Constante, Silva & Pereira, 2019), published on Kaggle. 180,519 order-items across 65,752 orders and 20,652 customers, spanning five global markets.


About this project

I came to data analytics from the business side: I co-founded Freshuk, an online fresh-produce business, and helped run and scale it from its early stages through to its sale. At its peak, Freshuk handled around 5,000 orders a month across roughly 400 products, with a team of about 35. Running it meant looking at every issue from several angles at once — what's happening operationally, how it affects the customer, and what it ultimately means for profitability.

That's exactly how I approach data. I don't stop at a pattern or a KPI; I ask what's driving it, which decision or process sits behind it, and what action should follow. In this analysis, the delays turned out to be a promise-setting problem rather than an execution one, and the losses were concentrated in a small tail of extreme cases rather than a whole failing category. Those distinctions matter because they lead to very different business decisions — and my operational background is what helps me connect the numbers to how a business actually works.

About

SQL + Power BI analysis of a global supply chain - delivery SLAs and profitability.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors