Introduction & Objective E-commerce platforms generate a constant stream of pricing, promotion, and customer-feedback data. But raw data on its own doesn't tell a seller anything useful. For this project, I built an interactive Excel dashboard using a Jumia product dataset to answer a set of practical business questions: Are larger discounts associated with more customer reviews? Do highly rated products attract stronger engagement? Do price and rating move together? Which products are performing best, and which need a different pricing or marketing strategy? Importantly, this dataset doesn't include units sold or revenue, so review count was used throughout as a proxy for customer engagement and not as a stand-in for sales. That distinction mattered for how I framed every insight later in the project. Dataset Description The source file, Excel_jumia_dataset.csv, contained the following fields: Field Meaning Expected type Product Product name Text Current price Selling price (KSh) Number/currency Old price Price before discount (KSh) Number/currency Discount Advertised % discount Percentage Review Number of customer reviews Whole number Ratingd (sic) Average rating out of 5 Decimal Before touching anything, I ran a data-quality audit and found several issues typical of scraped e-commerce data: a ## Introduction & Objective E-commerce platforms generate a constant stream of pricing, promotion, and customer-feedback data. But raw data on its own doesn't tell a seller anything useful. For this project, I built an interactive Excel dashboard using a Jumia product dataset to answer a set of practical business questions: Are larger discounts associated with more customer reviews? Do highly rated products attract stronger engagement? Do price and rating move together? Which products are performing best, and which need a different pricing or marketing strategy? Importantly, this dataset doesn't include units sold or revenue, so review count was used throughout as a proxy for customer engagement and not as a stand-in for sales. That distinction mattered for how I framed every insight later in the project. Dataset Description The source file, Excel_jumia_dataset.csv, contained the following fields: Field Meaning Expected type Product Product name Text Current price Selling price (KSh) Number/currency Old price Price before discount (KSh) Number/currency Discount Advertised % discount Percentage Review Number of customer reviews Whole number Ratingd (sic) Average rating out of 5 Decimal Before touching anything, I ran a data-quality audit and found several issues typical of scraped e-commerce data: misspelled header (Ratingd), blank cells in the review and rating columns, negative review counts, at least one price expressed as a range instead of a single number, and duplicate rows. Data Cleaning & Preparation I kept Raw_Data completely untouched as a permanent reference and did all cleaning in a duplicated query, using Power Query for the transformations (with a few native Excel formulas where they were simpler). Key cleaning decisions, all logged in a Data_Dictionary sheet with an Issue → Rows Affected → Decision → Reason structure: Header fix: Ratingd renamed to Rating. Currency cleanup: Stripped "KSh" and thousands-separator commas from price fields, then converted to Decimal Number. Price range: One row contained a range (e.g. "1620 - 1980") instead of a single price. Rather than deleting or guessing, I used the midpoint — (1620+1980)/2 = 1800 — and documented the original value and decision in the cleaning log. Discount: Power Query correctly auto-typed this column as Percentage, so no extra /100 conversion was needed. Negative reviews: Treated the negative sign as a scraping artifact and converted to absolute values. Missing values: Left genuinely blank ratings/reviews as blank rather than assuming zero or imputing an average. Duplicates: Removed only rows that matched exactly across all relevant fields, so that legitimate same-name listings with different prices or feedback weren't accidentally dropped. After cleaning, I ran validation formulas directly on the Excel Table (tblProducts) to catch anything that slipped through: =IF(OR([@Rating]<0,[@Rating]>5),"Check rating","OK") =IF(OR([@Discount]<0,[@Discount]>1),"Check discount","OK") =IF([@[Current Price]]>[@[Old Price]],"Check prices","OK") Excel Techniques, Formulas & Analysis With clean data in place, I enriched the table with derived fields and category flags, all using fixed, stated thresholds rather than subjective judgment calls, so any result could be reproduced by rerunning the same formulas: Discount amount =[@[Old Price]]-[@[Current Price]] Rating category (Poor <3, Average 3–4.5, Excellent >4.5) =IF([@Rating]="","Missing",IF([@Rating]<3,"Poor",IF([@Rating]<=4.5,"Average","Excellent"))) Discount category (Low <20%, Medium 20–40%, High >40%) =IF([@Discount]="","Missing",IF([@Discount]<20%,"Low Discount",IF([@Discount]<=40%,"Medium Discount","High Discount"))) Price category, based on quartiles rather than arbitrary cutoffs: Price_Q1 = QUARTILE.INC(tblProducts[Current Price],1) Price_Q3 = QUARTILE.INC(tblProducts[Current Price],3) =IF([@[Current Price]]="","Missing",IF([@[Current Price]]<=Price_Q1,"Low Price",IF([@[Current Price]]<=Price_Q3,"Medium Price","High Price"))) Engagement threshold, defined as the 75th percentile of review counts: =PERCENTILE.INC(tblProducts[Review],0.75) From there, I built four flag columns to surface specific, actionable product segments: High Discount + Poor Rating. Discounting isn't fixing an underlying quality problem High Discount + Weak Engagement. the discount isn't converting into visibility Strong Engagement + Average Rating. popular but not loved, room for improvement Strong Engagement + Excellent Rating. the benchmark performers worth promoting further Correlation analysis I tested three relationships using CORREL() and matching scatter plots with trendlines: Relationship Correlation (r) R² Discount vs. Reviews -0.14 0.02 Rating vs. Reviews 0.06 0.00 Price vs. Rating 0.11 0.01 All three came back weak. It means price, discount, and rating don't strongly predict customer engagement in this dataset, at least not in a simple linear way. Ranked tables I used SORT, FILTER, and LARGE to build ranked views: top/bottom 5 by rating, top 10 by discount, top 10 by reviews, top 10 by rating, and lists of flagged products pulled directly from the flag columns using FILTER(). Dashboard Creation Process The dashboard sits on a single sheet, laid out to be readable without scrolling: Title + Slicers KPI cards (Total Products, Avg Price, Avg Discount, Avg Rating, Total Reviews) Top 10 tables (by Rating, Reviews, Discount) Scatter charts (Discount vs Reviews, Rating vs Reviews, Price vs Rating) Mix charts (Rating Mix, Discount Mix) + Key Insights A few build details worth mentioning: I used rounded rectangle shapes for the KPI cards rather than plain cells, aligned and distributed evenly via Excel's Align tools. Each KPI number is linked live to its source cell (via the Formula Bar, e.g. =Analysis!B2), rather than typed in manually — so the dashboard updates automatically if the underlying data changes. Three slicers (Rating Category, Discount Category, Price Category) are connected to every relevant PivotTable and PivotChart via Report Connections, and tested individually and in combination. Formatting followed a consistent standard throughout: KSh on prices, % on discounts, one decimal on ratings, thousands separators on reviews, no 3-D charts, and horizontal bars where product names were too long for vertical labels. A small note box on the dashboard documents the category thresholds, and how missing values were handled. Key Insights & Business Recommendations Discount vs. reviews (r = -0.14, R² = 0.02): No meaningful relationship. Sellers shouldn't rely on deeper discounts alone to drive engagement other levers like listing quality, placement, or timing likely matter more. Rating vs. reviews (r = 0.06, R² = 0.00): Essentially no relationship. A high rating alone doesn't appear to boost visibility; category demand and listing age may play a bigger role. Price vs. rating (r = 0.11, R² = 0.01): Very weak positive relationship. Price shouldn't be treated as a proxy for perceived quality in pricing decisions. High discount, low rating products: A specific subset of products combine heavy discounting with poor ratings. These are stronger candidates for a quality or listing review than for further price cuts. Strong engagement, excellent rating products: These are the benchmark performers worth using as templates (pricing, description style, imagery) for underperforming listings in the same category. A caveat that applies to every finding above: correlation is not causation. None of these relationships account for factors the dataset doesn't capture such as listing age, category, visibility, or promotional placement so they should inform further investigation, not stand alone as proof of what's driving performance. Wrap-up This project reinforced something that's easy to forget when a dashboard looks polished: weak correlations are still a real, useful finding and not a failed analysis. The value here wasn't in forcing a dramatic story out of the data, but in cleaning it rigorously, documenting every decision, and being honest about what the numbers do and don't support. The full workbook, dataset, and dashboard screenshots are available in my GitHub repo linked below. 🔗 [https://github.com/ochiengwendy21-gif/jumia-product-performance-dashboard]