Inside the Olist Dashboard: From 9 Messy CSVs to a 3-Page Report
A behind-the-scenes look at cleaning 100K+ e-commerce orders, and the surprising finding that negative reviews track with delivery times — not product quality.
Shaharier Shourov
Data Analyst & Aspiring Data Engineer
Nine files, one dashboard
The Olist Brazilian E-Commerce dataset looks simple on Kaggle's download page — one zip file. Open it up and it's actually 9 separate relational CSVs: orders, order items, customers, products, sellers, payments, reviews, and a Portuguese-to-English category translation table.
None of them answer a business question alone. Every insight required joining at least two or three tables together.
"Bad data in means bad insights out — cleaning came before anything else."
The cleaning phase nobody sees
Before any chart got built, I spent the most time in Power Query. City names needed standardising ("sao paulo", "Sao Paulo", "SAO PAULO" all meaning the same place). Product categories were entirely in Portuguese. Reviews had duplicate entries per order. None of this is glamorous, but it's where 70% of the actual project time went.
The finding that surprised me most
I expected negative reviews to track with product categories — that certain product types would just generate more complaints. Instead, the data showed something clearer: negative reviews correlate directly with delivery times, not product type. São Paulo delivers in 8 days on average. Roraima takes 27. States with the slowest delivery also have the lowest review scores, almost regardless of what was ordered.
Why that matters
It reframes the fix. If negative sentiment were a product problem, the answer would be a slow, expensive quality-control initiative across thousands of sellers. Because it's a logistics problem, the fix is much more targeted: better carrier partnerships in five specific northern states.
Technical skills this project forced me to learn
- Multi-table ETL — merging 9 sources into one 112K-row fact table
- SQL window functions — using LAG() to calculate exact month-over-month growth
- SQL Views as a Power BI data source, so the dashboard auto-refreshes on schema changes
- DAX time intelligence — SAMEPERIODLASTYEAR for year-over-year comparisons
Full breakdown with all 8 SQL queries and dashboard pages in my case study.