SKU Performance & Return Analysis
This project demonstrates how I approached a real-world retail dataset, transforming raw sales and return records into meaningful insights that inform product and business strategy. The journey spanned three key stages: data cleaning in Python, data modeling in Power BI, and visual storytelling through dashboards.
Data Cleaning and Preparation
The dataset, while rich, was not analysis-ready. My first step was to take it into Python, where I carried out comprehensive cleaning and feature engineering. I started by addressing missing values: invoices with missing identifiers were removed entirely since they could not be traced, while missing customer IDs were retained but flagged as “Unknown” so as not to lose potentially useful transaction data. Duplicate rows were checked and dropped to prevent skewed results.
I then filtered out invalid records — transactions with zero or negative unit prices, as well as quantities that reflected errors rather than actual sales. However, I retained negative quantities in cases where they signaled returns, since they were critical to the analysis. From there, I created new columns such as Total Revenue (Quantity × Unit Price), Return Flag (marking returned items), Net Revenue (adjusting for returns), and temporal features like year, month, and day of week from the invoice date. To make time-based analysis seamless in Power BI, I also generated a dedicated date table that ensured every day within the dataset’s timeline was represented.
Modeling in Power BI
Once the data was clean and structured, I imported it into Power BI for further modeling. Here, I enriched the dataset with calculated measures and relationships that powered deeper insights.
The date table I created earlier was mapped to the invoice date, forming a many-to-one relationship. This ensured time intelligence functions worked correctly and enabled analyses such as monthly trends and return seasonality. I added calculated measures for Gross Revenue, Return Revenue, Net Revenue, and Return Rate, which became the foundation of the dashboard KPIs.
To better segment products, I designed a logic that grouped SKUs into categories: bestsellers, average performers, weak performers, and those recommended for discontinuation. This classification fed into the SKU Action Matrix, giving decision-makers a direct view of what to protect, promote, or phase out. Finally, I built slicers for country, and SKU segment, ensuring the dashboard was not just static but interactive, allowing users to explore results from different angles.
Phase 1 — Initial Dashboard Insights
The first phase of the dashboard focused on foundational performance metrics. It answered questions such as: What is the overall return rate? Which products contribute most to returns? Which SKUs are worth protecting or discontinuing?
Through cards, line charts, and the SKU matrix, I was able to highlight the dynamics between revenue, returns, and SKU contribution. This phase laid the groundwork for the more detailed SKU-level insights that followed.
Phase 2 — Deep Dive into SKU Returns and Sales
In the second phase, I expanded the analysis to drill down into product-level performance, specifically focusing on return behaviors and sales distribution.
In the top left section, the dashboard highlights the bottom 5 products by return rate. For example, the White Hanging Heart T-Light Holder showed return rates below 0.001 — a red flag suggesting quality or expectation mismatch. Addressing these products could significantly improve customer satisfaction and reduce avoidable costs.
Get Favour Ogundipe’s stories in your inbox
Join Medium for free to get updates from this writer.
On the top right, the dashboard shifts focus to products with high return volumes. The Rotating Silver Angel T-Lite Holder and Blue Charlie Lola Person, for instance, stood out as items that consistently generated large volumes of returns. Such products may require supplier reviews, packaging improvements, or even customer education.
The bottom left section moves away from returns and instead looks at sold quantities. Here, one SKU dominates the landscape — the Medium Ceramic Top. While its success is clear, the imbalance reveals a dependency risk. If demand for this product falls, overall sales could be severely impacted.
Finally, in the bottom right, the dashboard compares unit price contributions across SKU segments. Once again, bestsellers dominate, while weak SKUs contribute little. This underscores the importance of protecting bestsellers while carefully evaluating whether underperformers should be improved through marketing and bundling, or phased out altogether.
Recommendations
The combined insights from both phases point to several strategic actions:
- Review high-return products: Investigate items with frequent returns to address possible quality issues, supplier concerns, or gaps in meeting customer needs.
- Secure bestsellers: Strengthen supply planning for top-performing products, such as the Medium Ceramic Top, to prevent costly stockouts.
- Broaden revenue streams: Reduce over-reliance on a few bestsellers by promoting and bundling lower-performing items to create a more balanced product mix.
- Streamline low-value SKUs: Consider phasing out consistently weak products that add little value but increase complexity, allowing for more efficient operations.
Closing Thoughts
This project demonstrates the full lifecycle of a data solution: from raw dataset to actionable insights. By combining Python for cleaning, Power BI for modeling, and interactive dashboards for storytelling, I was able to transform fragmented sales and return data into a strategic tool for decision-making.
It is not just about building charts, but about enabling businesses to answer their most pressing questions: Which products are hurting us? Which ones drive our growth? How do we protect revenue while cutting costs?








