<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Wendy Ochieng</title>
    <description>The latest articles on DEV Community by Wendy Ochieng (@wendy_ochieng).</description>
    <link>https://dev.to/wendy_ochieng</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4071789%2F02b9fb91-782b-4a6a-b4c9-bfaa20d5a056.png</url>
      <title>DEV Community: Wendy Ochieng</title>
      <link>https://dev.to/wendy_ochieng</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/wendy_ochieng"/>
    <language>en</language>
    <item>
      <title>Building an Interactive Excel Dashboard for E-commerce Product Analysis: A Case Study of Jumia Products</title>
      <dc:creator>Wendy Ochieng</dc:creator>
      <pubDate>Sat, 05 Sep 2026 11:13:15 +0000</pubDate>
      <link>https://dev.to/wendy_ochieng/building-an-interactive-excel-dashboard-for-e-commerce-product-analysis-a-case-study-of-jumia-14oh</link>
      <guid>https://dev.to/wendy_ochieng/building-an-interactive-excel-dashboard-for-e-commerce-product-analysis-a-case-study-of-jumia-14oh</guid>
      <description>&lt;h2&gt;
  
  
  Introduction &amp;amp; Objective
&lt;/h2&gt;

&lt;p&gt;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&lt;br&gt;
built an interactive Excel dashboard using a Jumia product dataset to answer a set of&lt;br&gt;
practical business questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Are larger discounts associated with more customer reviews?&lt;/li&gt;
&lt;li&gt;Do highly rated products attract stronger engagement?&lt;/li&gt;
&lt;li&gt;Do price and rating move together?&lt;/li&gt;
&lt;li&gt;Which products are performing best, and which need a different pricing or marketing
strategy?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Importantly, this dataset doesn't include units sold or revenue, so &lt;strong&gt;review count was used&lt;br&gt;
throughout as a proxy for customer engagement&lt;/strong&gt; and not as a stand-in for sales. That distinction&lt;br&gt;
mattered for how I framed every insight later in the project.&lt;/p&gt;
&lt;h2&gt;
  
  
  Dataset Description
&lt;/h2&gt;

&lt;p&gt;The source file, &lt;code&gt;Excel_jumia_dataset.csv&lt;/code&gt;, contained the following fields:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;th&gt;Expected type&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Product&lt;/td&gt;
&lt;td&gt;Product name&lt;/td&gt;
&lt;td&gt;Text&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Current price&lt;/td&gt;
&lt;td&gt;Selling price (KSh)&lt;/td&gt;
&lt;td&gt;Number/currency&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Old price&lt;/td&gt;
&lt;td&gt;Price before discount (KSh)&lt;/td&gt;
&lt;td&gt;Number/currency&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Discount&lt;/td&gt;
&lt;td&gt;Advertised % discount&lt;/td&gt;
&lt;td&gt;Percentage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Review&lt;/td&gt;
&lt;td&gt;Number of customer reviews&lt;/td&gt;
&lt;td&gt;Whole number&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ratingd &lt;em&gt;(sic)&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;Average rating out of 5&lt;/td&gt;
&lt;td&gt;Decimal&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Before touching anything, I ran a data-quality audit and found several issues typical of&lt;br&gt;
scraped e-commerce data: a ## Introduction &amp;amp; Objective&lt;/p&gt;

&lt;p&gt;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&lt;br&gt;
built an interactive Excel dashboard using a Jumia product dataset to answer a set of&lt;br&gt;
practical business questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Are larger discounts associated with more customer reviews?&lt;/li&gt;
&lt;li&gt;Do highly rated products attract stronger engagement?&lt;/li&gt;
&lt;li&gt;Do price and rating move together?&lt;/li&gt;
&lt;li&gt;Which products are performing best, and which need a different pricing or marketing
strategy?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Importantly, this dataset doesn't include units sold or revenue, so &lt;strong&gt;review count was used&lt;br&gt;
throughout as a proxy for customer engagement&lt;/strong&gt; and not as a stand-in for sales. That distinction&lt;br&gt;
mattered for how I framed every insight later in the project.&lt;/p&gt;
&lt;h2&gt;
  
  
  Dataset Description
&lt;/h2&gt;

&lt;p&gt;The source file, &lt;code&gt;Excel_jumia_dataset.csv&lt;/code&gt;, contained the following fields:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;th&gt;Expected type&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Product&lt;/td&gt;
&lt;td&gt;Product name&lt;/td&gt;
&lt;td&gt;Text&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Current price&lt;/td&gt;
&lt;td&gt;Selling price (KSh)&lt;/td&gt;
&lt;td&gt;Number/currency&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Old price&lt;/td&gt;
&lt;td&gt;Price before discount (KSh)&lt;/td&gt;
&lt;td&gt;Number/currency&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Discount&lt;/td&gt;
&lt;td&gt;Advertised % discount&lt;/td&gt;
&lt;td&gt;Percentage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Review&lt;/td&gt;
&lt;td&gt;Number of customer reviews&lt;/td&gt;
&lt;td&gt;Whole number&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ratingd &lt;em&gt;(sic)&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;Average rating out of 5&lt;/td&gt;
&lt;td&gt;Decimal&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Before touching anything, I ran a data-quality audit and found several issues typical of&lt;br&gt;
scraped e-commerce data: misspelled header (&lt;code&gt;Ratingd&lt;/code&gt;), blank cells in the review and&lt;br&gt;
rating columns, negative review counts, at least one price expressed as a range instead of a&lt;br&gt;
single number, and duplicate rows.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq049utgunab2zxu3f63p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq049utgunab2zxu3f63p.png" alt="Raw Jumia product dataset showing unedited price, discount, review, and rating columns" width="780" height="272"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Data Cleaning &amp;amp; Preparation
&lt;/h2&gt;

&lt;p&gt;I kept &lt;code&gt;Raw_Data&lt;/code&gt; completely untouched as a permanent reference and did all cleaning in a&lt;br&gt;
duplicated query, using &lt;strong&gt;Power Query&lt;/strong&gt; for the transformations (with a few native Excel&lt;br&gt;
formulas where they were simpler).&lt;/p&gt;

&lt;p&gt;Key cleaning decisions, all logged in a &lt;code&gt;Data_Dictionary&lt;/code&gt; sheet with an Issue → Rows&lt;br&gt;
Affected → Decision → Reason structure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Header fix:&lt;/strong&gt; &lt;code&gt;Ratingd&lt;/code&gt; renamed to &lt;code&gt;Rating&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Currency cleanup:&lt;/strong&gt; Stripped "KSh" and thousands-separator commas from price fields, then converted to Decimal Number.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Price range:&lt;/strong&gt; One row contained a range (e.g. &lt;code&gt;"1620 - 1980"&lt;/code&gt;) instead of a single price.
Rather than deleting or guessing, I used the &lt;strong&gt;midpoint&lt;/strong&gt; — &lt;code&gt;(1620+1980)/2 = 1800&lt;/code&gt; — and
documented the original value and decision in the cleaning log.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Discount:&lt;/strong&gt; Power Query correctly auto-typed this column as Percentage, so no extra &lt;code&gt;/100&lt;/code&gt; conversion was needed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Negative reviews:&lt;/strong&gt; Treated the negative sign as a scraping artifact and converted to
absolute values.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Missing values:&lt;/strong&gt; Left genuinely blank ratings/reviews as blank rather than assuming zero or imputing an average.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Duplicates:&lt;/strong&gt; 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.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After cleaning, I ran validation formulas directly on the Excel Table (&lt;code&gt;tblProducts&lt;/code&gt;) to catch&lt;br&gt;
anything that slipped through:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=IF(OR([@Rating]&amp;lt;0,[@Rating]&amp;gt;5),"Check rating","OK")
=IF(OR([@Discount]&amp;lt;0,[@Discount]&amp;gt;1),"Check discount","OK")
=IF([@[Current Price]]&amp;gt;[@[Old Price]],"Check prices","OK")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0f6ikmvup6eygm1z5iht.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0f6ikmvup6eygm1z5iht.png" alt="Cleaned product data table with standardized price, discount, review, and rating columns" width="780" height="278"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Excel Techniques, Formulas &amp;amp; Analysis
&lt;/h2&gt;

&lt;p&gt;With clean data in place, I enriched the table with derived fields and category flags, all&lt;br&gt;
using &lt;strong&gt;fixed, stated thresholds&lt;/strong&gt; rather than subjective judgment calls, so any result could&lt;br&gt;
be reproduced by rerunning the same formulas:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Discount amount&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=[@[Old Price]]-[@[Current Price]]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Rating category&lt;/strong&gt; (Poor &amp;lt;3, Average 3–4.5, Excellent &amp;gt;4.5)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=IF([@Rating]="","Missing",IF([@Rating]&amp;lt;3,"Poor",IF([@Rating]&amp;lt;=4.5,"Average","Excellent")))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Discount category&lt;/strong&gt; (Low &amp;lt;20%, Medium 20–40%, High &amp;gt;40%)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=IF([@Discount]="","Missing",IF([@Discount]&amp;lt;20%,"Low Discount",IF([@Discount]&amp;lt;=40%,"Medium Discount","High Discount")))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Price category&lt;/strong&gt;, based on quartiles rather than arbitrary cutoffs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Price_Q1 = QUARTILE.INC(tblProducts[Current Price],1)
Price_Q3 = QUARTILE.INC(tblProducts[Current Price],3)
=IF([@[Current Price]]="","Missing",IF([@[Current Price]]&amp;lt;=Price_Q1,"Low Price",IF([@[Current Price]]&amp;lt;=Price_Q3,"Medium Price","High Price")))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Engagement threshold&lt;/strong&gt;, defined as the 75th percentile of review counts:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=PERCENTILE.INC(tblProducts[Review],0.75)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;From there, I built four flag columns to surface specific, actionable product segments:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;High Discount + Poor Rating. Discounting isn't fixing an underlying quality problem&lt;/li&gt;
&lt;li&gt;High Discount + Weak Engagement. the discount isn't converting into visibility&lt;/li&gt;
&lt;li&gt;Strong Engagement + Average Rating. popular but not loved, room for improvement &lt;/li&gt;
&lt;li&gt;Strong Engagement + Excellent Rating. the benchmark performers worth promoting further&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Correlation analysis
&lt;/h3&gt;

&lt;p&gt;I tested three relationships using &lt;code&gt;CORREL()&lt;/code&gt; and matching scatter plots with trendlines:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Relationship&lt;/th&gt;
&lt;th&gt;Correlation (r)&lt;/th&gt;
&lt;th&gt;R²&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Discount vs. Reviews&lt;/td&gt;
&lt;td&gt;-0.14&lt;/td&gt;
&lt;td&gt;0.02&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rating vs. Reviews&lt;/td&gt;
&lt;td&gt;0.06&lt;/td&gt;
&lt;td&gt;0.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Price vs. Rating&lt;/td&gt;
&lt;td&gt;0.11&lt;/td&gt;
&lt;td&gt;0.01&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;All three came back weak. It means price,&lt;br&gt;
discount, and rating don't strongly predict customer engagement in this dataset, at least not in a simple linear way.&lt;/p&gt;
&lt;h3&gt;
  
  
  Ranked tables
&lt;/h3&gt;

&lt;p&gt;I used &lt;code&gt;SORT&lt;/code&gt;, &lt;code&gt;FILTER&lt;/code&gt;, and &lt;code&gt;LARGE&lt;/code&gt; to build ranked views: top/bottom 5 by rating, top 10 by&lt;br&gt;
discount, top 10 by reviews, top 10 by rating, and lists of flagged products pulled directly&lt;br&gt;
from the flag columns using &lt;code&gt;FILTER()&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Dashboard Creation Process
&lt;/h2&gt;

&lt;p&gt;The dashboard sits on a single sheet, laid out to be readable without scrolling:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;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
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A few build details worth mentioning:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I used &lt;strong&gt;rounded rectangle shapes&lt;/strong&gt; for the KPI cards rather than plain cells, aligned and
distributed evenly via Excel's Align tools.&lt;/li&gt;
&lt;li&gt;Each KPI number is &lt;strong&gt;linked live to its source cell&lt;/strong&gt; (via the Formula Bar, e.g.
&lt;code&gt;=Analysis!B2&lt;/code&gt;), rather than typed in manually — so the dashboard updates automatically if the
underlying data changes.&lt;/li&gt;
&lt;li&gt;Three &lt;strong&gt;slicers&lt;/strong&gt; (Rating Category, Discount Category, Price Category) are connected to every
relevant PivotTable and PivotChart via Report Connections, and tested individually and in
combination.&lt;/li&gt;
&lt;li&gt;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.&lt;/li&gt;
&lt;li&gt;A small note box on the dashboard documents the category thresholds, and how missing values were handled.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn7yyflgsb3kr8bwweoqm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn7yyflgsb3kr8bwweoqm.png" alt="PivotTables summarizing product counts by rating and discount category" width="780" height="275"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Insights &amp;amp; Business Recommendations
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Discount vs. reviews (r = -0.14, R² = 0.02):&lt;/strong&gt; 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.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Rating vs. reviews (r = 0.06, R² = 0.00):&lt;/strong&gt; Essentially no relationship. A high rating alone doesn't appear to boost visibility; category demand and listing age may play a bigger role.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Price vs. rating (r = 0.11, R² = 0.01):&lt;/strong&gt; Very weak positive relationship. Price shouldn't be treated as a proxy for perceived quality in pricing decisions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;High discount, low rating products:&lt;/strong&gt; 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.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Strong engagement, excellent rating products:&lt;/strong&gt; These are the benchmark performers worth using as templates (pricing, description style, imagery) for underperforming listings in the same category.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;A caveat that applies to every finding above:&lt;/strong&gt; correlation is not causation. None of these&lt;br&gt;
relationships account for factors the dataset doesn't capture such as listing age, category,&lt;br&gt;
visibility, or promotional placement so they should inform further investigation, not stand&lt;br&gt;
alone as proof of what's driving performance.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9hdwfw7dopkqsmddl3bj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9hdwfw7dopkqsmddl3bj.png" alt="Jumia product performance dashboard with KPI cards, top 10 tables, charts, and slicers" width="780" height="321"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrap-up
&lt;/h2&gt;

&lt;p&gt;This project reinforced something that's easy to forget when a dashboard looks polished: weak&lt;br&gt;
correlations are still a real, useful finding and not a failed analysis. The value here wasn't in&lt;br&gt;
forcing a dramatic story out of the data, but in cleaning it rigorously, documenting every&lt;br&gt;
decision, and being honest about what the numbers do and don't support.&lt;/p&gt;

&lt;p&gt;The full workbook, dataset, and dashboard screenshots are available in my GitHub repo  linked&lt;br&gt;
below.&lt;/p&gt;

&lt;p&gt;🔗 &lt;em&gt;[&lt;a href="https://github.com/ochiengwendy21-gif/jumia-product-performance-dashboard" rel="noopener noreferrer"&gt;https://github.com/ochiengwendy21-gif/jumia-product-performance-dashboard&lt;/a&gt;]&lt;/em&gt;&lt;/p&gt;

</description>
      <category>analysis</category>
      <category>analytics</category>
      <category>data</category>
    </item>
    <item>
      <title>A beginner's understanding of the Git Workflow</title>
      <dc:creator>Wendy Ochieng</dc:creator>
      <pubDate>Mon, 24 Aug 2026 15:08:10 +0000</pubDate>
      <link>https://dev.to/wendy_ochieng/a-beginners-understanding-of-the-git-workflow-53j8</link>
      <guid>https://dev.to/wendy_ochieng/a-beginners-understanding-of-the-git-workflow-53j8</guid>
      <description>&lt;h2&gt;
  
  
  Git
&lt;/h2&gt;

&lt;p&gt;This is a version control system that tracks changes to files in a project. It's a software that recalls the exact files that were edited, when these changes were made and by whom(if it's a team project) and stores the previous versions of the files.&lt;br&gt;
It's quite useful especially for large projects with multiple developers.&lt;br&gt;
Git saves your files locally(in your machine) and you can store your code online or share it with others through &lt;em&gt;github&lt;/em&gt;, &lt;em&gt;gitlab&lt;/em&gt; or &lt;em&gt;bitbucket&lt;/em&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Git Core Concepts
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Repository(Repo)&lt;/strong&gt;&lt;br&gt;
This refers to a project and its entire history of changes. It can be local or remote.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Git commits&lt;/strong&gt;&lt;br&gt;
These are like snapshots of the entire projects that records all the tracked changes in your directory. Git can sometimes bundle all the changes to a project from one version of the repository to another, instead of just blindly copying the entire directory every time you commit-it maintains a history of which commits were made when.&lt;br&gt;
A new commit might have another commit above it, like a parent commit, which references which commit it was based off of.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Git Branches&lt;/strong&gt;&lt;br&gt;
These are simply pointers to a specific commit. They are independent lines of development that allows you to work on features or fixes without affecting others.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F17bnalc7zeg3v670k8vs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F17bnalc7zeg3v670k8vs.png" alt="Git Workflow Diagram.com" width="253" height="277"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the image, we have a branch called &lt;em&gt;newimage&lt;/em&gt; that now refers to commit &lt;em&gt;C1&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To create a branch called &lt;em&gt;newimage&lt;/em&gt; and immediately switch to it, we can use this code;&lt;br&gt;
&lt;br&gt;
 &lt;code&gt;git checkout -b newimage&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;To prevent having many branches, it's better to divide your work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Merge&lt;/strong&gt;&lt;br&gt;
Merging brings changes from one branch into another.&lt;/p&gt;

&lt;h2&gt;
  
  
  Basic Git Workflow
&lt;/h2&gt;

&lt;p&gt;Common commands used to manage projects and upload your work to github.&lt;br&gt;
&lt;strong&gt;1. Working Directory&lt;/strong&gt;&lt;br&gt;
This is the local folder where you create, open and edit files. This directory can be observed but changes are not automatically recorded.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Staging Area&lt;/strong&gt;&lt;br&gt;
This is where you select the changes you want to include in your next commit. You may choose specific files or lines of code you want to bundle together before saving.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Local Repository&lt;/strong&gt;&lt;br&gt;
It's the internal git database inside the project folder. It's where you commit the staged changes and git permanently saves it as a secure snapshot in your local history.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Remote Repository&lt;/strong&gt;&lt;br&gt;
This is where commits are pushed so others can access them, eg Github.&lt;/p&gt;

&lt;p&gt;Note; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You &lt;strong&gt;push&lt;/strong&gt; projects from your local machine to Github&lt;/li&gt;
&lt;li&gt;You &lt;strong&gt;pull&lt;/strong&gt; projects from Github to your local machine&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;The workflow looks like this in a nutshell;&lt;br&gt;
┌──────────────────┐&lt;br&gt;
│ Working Directory│&lt;br&gt;
│ (your files)     │&lt;br&gt;
└─────────┬────────┘&lt;br&gt;
          │&lt;br&gt;
          │ git add &lt;br&gt;
          │ git add.&lt;br&gt;
          ▼&lt;br&gt;
┌──────────────────┐&lt;br&gt;
│  Staging Area    │&lt;br&gt;
│   (index)        │&lt;br&gt;
└─────────┬────────┘&lt;br&gt;
          │&lt;br&gt;
          │ git commit -m "message"&lt;br&gt;
          ▼&lt;br&gt;
┌──────────────────┐&lt;br&gt;
│ Local Repository │&lt;br&gt;
│ (your computer)  │&lt;br&gt;
└─────────┬────────┘&lt;br&gt;
          │&lt;br&gt;
          │ git push origin main&lt;br&gt;
          ▼&lt;br&gt;
┌──────────────────┐&lt;br&gt;
│Remote Repository │&lt;br&gt;
│ GitHub / GitLab  │&lt;br&gt;
└─────────┬────────┘&lt;br&gt;
          ▲&lt;br&gt;
          │&lt;br&gt;
          │ git pull origin main&lt;br&gt;
          │ git fetch&lt;br&gt;
          │&lt;br&gt;
          └───────────────────────&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Edit files in the Working Directory.&lt;/li&gt;
&lt;li&gt;Use git add to move changes to the Staging Area.&lt;/li&gt;
&lt;li&gt;Use git commit to save a snapshot in the Local Repository.&lt;/li&gt;
&lt;li&gt;Use git push to send commits to GitHub.&lt;/li&gt;
&lt;li&gt;Use git pull to get other developers' latest changes.&lt;/li&gt;
&lt;/ol&gt;

</description>
    </item>
  </channel>
</rss>
