<?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: Nelly Mogere</title>
    <description>The latest articles on DEV Community by Nelly Mogere (@nelly_mogere_194bac0cb2ba).</description>
    <link>https://dev.to/nelly_mogere_194bac0cb2ba</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%2F3854620%2F67d8d347-95e8-4e45-afd2-00fa8d919732.jpg</url>
      <title>DEV Community: Nelly Mogere</title>
      <link>https://dev.to/nelly_mogere_194bac0cb2ba</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nelly_mogere_194bac0cb2ba"/>
    <language>en</language>
    <item>
      <title>Analysing 8 Years of Femicide in Kenya with Excel - A Data Story</title>
      <dc:creator>Nelly Mogere</dc:creator>
      <pubDate>Sat, 04 Jul 2026 01:48:46 +0000</pubDate>
      <link>https://dev.to/nelly_mogere_194bac0cb2ba/analysing-8-years-of-femicide-in-kenya-with-excel-a-data-story-2o88</link>
      <guid>https://dev.to/nelly_mogere_194bac0cb2ba/analysing-8-years-of-femicide-in-kenya-with-excel-a-data-story-2o88</guid>
      <description>&lt;p&gt;&lt;strong&gt;Content Warning:&lt;/strong&gt; This article discusses femicide, the murder of women and girls. The data covers real cases of gender-based violence. If this is a sensitive topic for you, please take care.&lt;/p&gt;




&lt;p&gt;Femicide isn't just a statistic. Every row in the dataset I worked with was someone's daughter, sister, wife, or friend.&lt;br&gt;
When I came across the &lt;strong&gt;Femicide in Kenya (2016-2023)&lt;/strong&gt; dataset on Kaggle, I knew I wanted to do more than scroll through it. I wanted to let the data speak, clearly and loudly. So I built a full analysis pipeline in Excel: cleaning, enriching, analysing, and visualising 507 documented cases over eight years.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This is the story of how I did it, what I found, and why it matters.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  Where the Data Came From
&lt;/h2&gt;

&lt;p&gt;The dataset lives on &lt;a href="https://www.kaggle.com/" rel="noopener noreferrer"&gt;Kaggle&lt;/a&gt; and was compiled from multiple verified public sources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Investigative journalism and news media&lt;/li&gt;
&lt;li&gt;Activist platforms and gender-based violence tracking organisations&lt;/li&gt;
&lt;li&gt;Social media reports and community alerts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each row represents one unique femicide case. The columns cover:&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;What it tells us&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Date&lt;/td&gt;
&lt;td&gt;When it was reported&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Victim Name / Age&lt;/td&gt;
&lt;td&gt;Who was targeted&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;County / Town&lt;/td&gt;
&lt;td&gt;Where it happened&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Suspect Relationship&lt;/td&gt;
&lt;td&gt;Who did it&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Type of Femicide&lt;/td&gt;
&lt;td&gt;Intimate or Non-intimate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mode of Killing&lt;/td&gt;
&lt;td&gt;How it was done&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Murder Scene&lt;/td&gt;
&lt;td&gt;Where specifically&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Case / Court Status&lt;/td&gt;
&lt;td&gt;What happened legally&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Before I could analyse any of this, though, the data needed serious cleaning.&lt;/p&gt;


&lt;h2&gt;
  
  
  Cleaning the Data in Excel Power Query
&lt;/h2&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%2Fotgc676t71dcji21ojny.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%2Fotgc676t71dcji21ojny.png" alt=" " width="799" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I loaded the raw file into &lt;strong&gt;Excel's Power Query Editor&lt;/strong&gt;, my go-to for structured, repeatable data transformations. Here's the exact cleaning process I followed, step by step.&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 1: Remove Duplicates
&lt;/h3&gt;

&lt;p&gt;The first thing I always do. Removed all duplicate rows upfront so every case was counted once and only once.&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 2: Standardise the Author Name Column
&lt;/h3&gt;

&lt;p&gt;The author names had inconsistent casing, some all caps, some all lowercase. I applied the &lt;strong&gt;PROPER&lt;/strong&gt; function to fix this, so &lt;code&gt;JOHN DOE&lt;/code&gt; and &lt;code&gt;john doe&lt;/code&gt; both become &lt;code&gt;John Doe&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 3: Clean the Medium (News Source) Column
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Replaced all &lt;code&gt;null&lt;/code&gt; and empty values with &lt;code&gt;"Not Provided"&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Removed the &lt;code&gt;(Kenya)&lt;/code&gt; suffix that was appended to source names. Since every entry is already Kenya-specific, this was just visual clutter making filters messy.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Step 4: Fix the Type of Murder Column
&lt;/h3&gt;

&lt;p&gt;This one was subtle but important. The column had both &lt;code&gt;femicide&lt;/code&gt; and &lt;code&gt;Femicide&lt;/code&gt; as separate values - Excel treats them as distinct, which would split my pivot counts in two. I standardised everything to &lt;code&gt;Femicide&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 5: Clean the Victim Name Column
&lt;/h3&gt;

&lt;p&gt;Some entries had &lt;code&gt;"unnamed"&lt;/code&gt; as the victim's name, others were blank. Both were replaced with &lt;code&gt;"Not Provided"&lt;/code&gt; for consistency.&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 6: Fix the Suspect Relationship Column
&lt;/h3&gt;

&lt;p&gt;Two entries had trailing noise:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Stranger&lt;/code&gt; had &lt;code&gt;"/Unknown relationship"&lt;/code&gt; appended - redundant. Removed it.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Friend&lt;/code&gt; had &lt;code&gt;"/known to the victim"&lt;/code&gt; appended - also redundant. Removed it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These kinds of notes make sense in a notes field, not in a category column you'll filter on.&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 7: Fill Remaining Nulls Across Text Columns
&lt;/h3&gt;

&lt;p&gt;A blanket step - replaced all remaining &lt;code&gt;null&lt;/code&gt; and empty cells in text columns with &lt;code&gt;"Not Provided"&lt;/code&gt;. This ensures no blank filter entries appear in pivot slicers.&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 8: Apply PROPER to More Columns
&lt;/h3&gt;

&lt;p&gt;Repeated the PROPER text function across other columns (county names, relationship types, etc.) to prevent capitalisation variants from appearing as duplicate filter options.&lt;/p&gt;


&lt;h2&gt;
  
  
  Data Enrichment - Adding a Region Column
&lt;/h2&gt;

&lt;p&gt;Once the data was clean, I needed to go one level higher than county for geographic analysis. Kenya has 47 counties - grouping them into the 8 administrative regions would give cleaner, more readable charts.&lt;/p&gt;

&lt;p&gt;I built a separate &lt;strong&gt;Mapping sheet&lt;/strong&gt; with each county mapped to its region, then used this XLOOKUP to create a new &lt;code&gt;Region&lt;/code&gt; column:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=XLOOKUP(U2, Mapping!$A$2:$A$48, Mapping!$B$2:$B$48, "Unknown County")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This had a bonus effect: it doubled as &lt;strong&gt;a spell-checker for county names&lt;/strong&gt;. Any misspelled county would return &lt;code&gt;"Unknown County"&lt;/code&gt; - which flagged it for correction in the source data. A clean, self-validating approach.&lt;/p&gt;




&lt;h2&gt;
  
  
  Building the Dashboard
&lt;/h2&gt;

&lt;p&gt;With clean, enriched data, I built &lt;strong&gt;Pivot Tables&lt;/strong&gt; for every question I wanted to answer, then assembled everything into a single interactive Excel dashboard with slicers for filtering by county, region, murder scene, relationship type, and more.&lt;/p&gt;

&lt;p&gt;Here's what the final dashboard looked like:&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%2Fi5dl33myff7qa41bi0cp.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%2Fi5dl33myff7qa41bi0cp.png" alt="Femicide Cases in Kenya Dashboard" width="800" height="485"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Numbers at a Glance
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;KPI&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total Cases&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;507&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Most Affected County&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Nairobi&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Counties Affected&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;45 out of 47&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Intimate Partner Cases&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;83%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Most Vulnerable Age Range&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;26-36 years&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Minor Victims&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Most Common Method&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Stabbing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Most Common Scene&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Home&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  What the Data Revealed
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. The Home Is the Most Dangerous Place
&lt;/h3&gt;

&lt;p&gt;This was the finding that hit hardest. The majority of femicide victims were killed &lt;strong&gt;at home&lt;/strong&gt;, not on the streets, not in unknown locations, at home.&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%2Fa1zoic105pedz4fdsn77.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%2Fa1zoic105pedz4fdsn77.png" alt=" " width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We talk about home as a place of safety. The data dismantles that assumption.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. 83% of Cases Involved Intimate Partners
&lt;/h3&gt;

&lt;p&gt;Boyfriends. Husbands. Ex-partners.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8 in 10 femicide cases&lt;/strong&gt; in this dataset were committed by someone the victim was in, or had been in, a relationship with. Intimate partner violence isn't just a contributor to femicide in Kenya. It is, overwhelmingly, the cause.&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%2Fxjt342vo5rouwg7xsu5q.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%2Fxjt342vo5rouwg7xsu5q.png" alt=" " width="800" height="529"&gt;&lt;/a&gt;&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%2Faba552usv8qzy2ig75ku.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%2Faba552usv8qzy2ig75ku.png" alt=" " width="752" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. The Most Targeted Age Group Is 26-36
&lt;/h3&gt;

&lt;p&gt;These are women in the prime of their adult lives, building careers, raising families, living independently. The data shows they are the most at-risk group.&lt;/p&gt;

&lt;p&gt;Twenty victims were minors. Twenty children.&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%2Fied1eqnppyltxrpt7quu.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%2Fied1eqnppyltxrpt7quu.png" alt=" " width="799" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Stabbing and Strangulation Dominate
&lt;/h3&gt;

&lt;p&gt;The two most recorded methods of killing were stabbing and strangulation. Both require physical proximity. This is not random or opportunistic violence - it is violence by someone close to the victim, in spaces familiar to her.&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%2Fp5t9c3f59e90hq7egi4z.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%2Fp5t9c3f59e90hq7egi4z.png" alt=" " width="752" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  5. This Is a National Crisis, Not a Nairobi Story
&lt;/h3&gt;

&lt;p&gt;Yes, Nairobi had the highest case count. But &lt;strong&gt;45 of Kenya's 47 counties&lt;/strong&gt; recorded at least one femicide case in this dataset. The geographic spread is a clear signal: this is a nationwide systemic problem.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. The Justice System Is Failing These Women
&lt;/h3&gt;

&lt;p&gt;When I looked at the court verdict breakdown, the majority of cases never reached a guilty verdict. Many were ongoing. Some suspects were never brought to trial at all. The impunity is visible in the data.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Arguments Over Food
&lt;/h3&gt;

&lt;p&gt;I'll be honest, this stopped me in my tracks. Going through case descriptions, several murders were triggered by domestic arguments. One recurring trigger: &lt;strong&gt;food&lt;/strong&gt;.&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%2Fda9cn0qufecd8fqwts39.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%2Fda9cn0qufecd8fqwts39.png" alt=" " width="799" height="241"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Arguments over food. Women losing their lives over arguments about food.&lt;/p&gt;

&lt;p&gt;That's not just a data point. That's a reflection of what happens when control, anger, and access to violence exist in the same home.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why I Built This
&lt;/h2&gt;

&lt;p&gt;I'm a data analyst. My tools are spreadsheets, formulas, and charts. But tools don't choose what they illuminate, we do.&lt;/p&gt;

&lt;p&gt;I chose to work on this dataset because the story it tells is important, and because too often data on gender-based violence gets buried in PDFs or left uncleaned on data platforms. I wanted to take it out of the raw and make it readable, visual, and undeniable.&lt;/p&gt;

&lt;p&gt;If you're a researcher, journalist, policymaker, or just someone who cares, I hope this analysis gives you something useful.&lt;/p&gt;




&lt;h2&gt;
  
  
  Tools I Used
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Microsoft Excel&lt;/strong&gt; - Power Query for cleaning, XLOOKUP for enrichment, Pivot Tables for aggregation, Charts for visualisation, Dashboard for presentation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's it. No Python. No SQL. No Power BI. Just Excel used thoughtfully and thoroughly.&lt;/p&gt;




&lt;h2&gt;
  
  
  Access the Files
&lt;/h2&gt;

&lt;p&gt;The full project, including the raw dataset, cleaned file, and dashboard, is on GitHub:&lt;/p&gt;

&lt;p&gt;(&lt;a href="https://github.com/pinkleather221/kenya-femicide-analysis.git" rel="noopener noreferrer"&gt;https://github.com/pinkleather221/kenya-femicide-analysis.git&lt;/a&gt;)&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Note
&lt;/h2&gt;

&lt;p&gt;Behind every row in this dataset is a name. A face. A life that was ended by violence that could have been prevented.&lt;/p&gt;

&lt;p&gt;If this analysis can contribute, even a small amount, to better policy, stronger advocacy, or clearer public understanding of the femicide crisis in Kenya, then it was worth building.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;If you found this useful or have questions about the methodology, drop a comment below. And if you're working on similar social impact data projects, I'd love to connect.&lt;/em&gt;&lt;/p&gt;




</description>
      <category>data</category>
      <category>analytics</category>
      <category>community</category>
      <category>diversity</category>
    </item>
    <item>
      <title>From Dirty Data to Business Intelligence: Building an End-to-End Power BI Analytics Solution with PostgreSQL, Power Query, DAX, and Star Schema</title>
      <dc:creator>Nelly Mogere</dc:creator>
      <pubDate>Fri, 03 Jul 2026 12:44:39 +0000</pubDate>
      <link>https://dev.to/nelly_mogere_194bac0cb2ba/from-dirty-data-to-business-intelligence-building-an-end-to-end-power-bi-analytics-solution-with-4bfj</link>
      <guid>https://dev.to/nelly_mogere_194bac0cb2ba/from-dirty-data-to-business-intelligence-building-an-end-to-end-power-bi-analytics-solution-with-4bfj</guid>
      <description>&lt;p&gt;&lt;em&gt;How I transformed a messy education dataset into an interactive Business Intelligence solution using PostgreSQL, Power Query, Data Modeling, DAX, and Power BI.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Every dashboard tells a story.&lt;/p&gt;

&lt;p&gt;But before the charts, KPIs, and colorful visuals come into existence, there's usually something much less exciting a spreadsheet full of inconsistent, duplicated, incomplete, and poorly structured data.&lt;br&gt;
That was exactly the challenge my team received during our Power BI training.&lt;br&gt;
Instead of being handed a perfectly structured dataset ready for visualization, we were given what many data professionals encounter in real organizations: a single flat dataset filled with inconsistencies that needed to be transformed into a reliable source of business intelligence.&lt;br&gt;
Our assignment wasn't simply to create attractive charts.&lt;br&gt;
Our assignment wasn't simply to create attractive charts.&lt;/p&gt;

&lt;p&gt;We were expected to complete the entire Business Intelligence workflow, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Extracting data from a PostgreSQL database&lt;/li&gt;
&lt;li&gt;Establishing a secure database connection using SSL certificates&lt;/li&gt;
&lt;li&gt;Cleaning messy data using Power Query&lt;/li&gt;
&lt;li&gt;Designing a dimensional data model&lt;/li&gt;
&lt;li&gt;Creating relationships between tables&lt;/li&gt;
&lt;li&gt;Writing DAX measures&lt;/li&gt;
&lt;li&gt;Building interactive dashboards&lt;/li&gt;
&lt;li&gt;Producing meaningful business insights&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Although this was an educational project, the workflow closely mirrors what Business Intelligence developers and Data Analysts do every day.&lt;/p&gt;

&lt;p&gt;In this article, I'll walk through that journey from start to finish.&lt;/p&gt;
&lt;h2&gt;
  
  
  Understanding the Business Problem
&lt;/h2&gt;

&lt;p&gt;The dataset represented an education management system containing information about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Students&lt;/li&gt;
&lt;li&gt;Schools&lt;/li&gt;
&lt;li&gt;Teachers&lt;/li&gt;
&lt;li&gt;Subjects&lt;/li&gt;
&lt;li&gt;Academic performance&lt;/li&gt;
&lt;li&gt;Payments&lt;/li&gt;
&lt;li&gt;Locations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At first glance, everything appeared to exist inside one large table. While this may seem convenient, storing everything in a single table quickly creates problems.&lt;/p&gt;

&lt;p&gt;Some of the issues included:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Duplicate information&lt;/li&gt;
&lt;li&gt;Repeated school names and teacher details&lt;/li&gt;
&lt;li&gt;Inconsistent county names and spelling&lt;/li&gt;
&lt;li&gt;Mixed capitalization&lt;/li&gt;
&lt;li&gt;Missing values&lt;/li&gt;
&lt;li&gt;Incorrect data types and invalid numerical values&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  &lt;em&gt;These are exactly the kinds of data quality issues that reduce trust in business reports. Our brief required us to clean the data, normalize it into logical tables, build relationships, and answer business questions through an interactive Power BI dashboard.&lt;/em&gt;
&lt;/h2&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%2Fs7z3vretkc98cm8bwxef.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%2Fs7z3vretkc98cm8bwxef.png" alt=" " width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Why We Used PostgreSQL Instead of Importing a CSV
&lt;/h2&gt;

&lt;p&gt;Many Power BI tutorials begin by importing an Excel or CSV file. While this works for demonstrations, most organizations do not store operational data inside spreadsheets.&lt;/p&gt;

&lt;p&gt;Instead, business data is typically stored inside relational databases such as PostgreSQL, SQL Server, MySQL, or Oracle.&lt;/p&gt;

&lt;p&gt;For this project, our dataset was hosted inside a PostgreSQL database, allowing us to simulate a real production environment where Power BI retrieves data directly from a database rather than from manually exported files.&lt;/p&gt;

&lt;p&gt;This approach offered several advantages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A centralized source of truth&lt;/li&gt;
&lt;li&gt;Better data integrity&lt;/li&gt;
&lt;li&gt;Easier scalability&lt;/li&gt;
&lt;li&gt;Simplified data refreshes&lt;/li&gt;
&lt;li&gt;A more realistic enterprise workflow&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Configuring PostgreSQL for Secure Connections
&lt;/h2&gt;

&lt;p&gt;One of the most interesting parts of this project happened &lt;strong&gt;before&lt;/strong&gt; opening Power BI.&lt;/p&gt;

&lt;p&gt;To establish a secure connection to PostgreSQL, I first had to install and configure the required SSL certificates. Many cloud-hosted PostgreSQL instances enforce encrypted connections to protect data while it travels across the network. Without the correct certificates, Power BI cannot establish a trusted connection.&lt;/p&gt;

&lt;p&gt;The process involved:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Installing the PostgreSQL SSL certificate&lt;/li&gt;
&lt;li&gt;Configuring the database connection&lt;/li&gt;
&lt;li&gt;Verifying encrypted communication&lt;/li&gt;
&lt;li&gt;Testing the connection before importing data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Although this step often receives little attention in beginner tutorials, it reflects what happens in production systems where database security is a priority.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key takeaway:&lt;/strong&gt; Understanding secure connectivity is just as important as understanding visualization, because no dashboard can exist without reliable access to trusted data.&lt;/p&gt;
&lt;/blockquote&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%2Fvvkbxyv1cqh66bhdptkm.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%2Fvvkbxyv1cqh66bhdptkm.png" alt=" " width="798" height="168"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Connecting PostgreSQL to Power BI
&lt;/h2&gt;

&lt;p&gt;With the secure connection established, I opened &lt;strong&gt;Power BI Desktop&lt;/strong&gt; and selected &lt;strong&gt;Get Data &amp;gt; PostgreSQL Database&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;After providing the server name, database name, and authentication credentials, Power BI connected directly to PostgreSQL and displayed the available tables through the Navigator window.&lt;/p&gt;

&lt;p&gt;Rather than importing every available object, I selected only the tables required for analysis. This is a small but important optimization, because importing unnecessary tables increases model complexity and refresh times.&lt;/p&gt;
&lt;h2&gt;
  
  
  First Look at the Dataset
&lt;/h2&gt;

&lt;p&gt;The initial inspection confirmed what the assignment description had warned about. The dataset contained numerous quality issues, including duplicate records, null values, incorrect spellings, mixed casing, inconsistent location names, invalid numerical values, and poorly formatted dates.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Important lesson:&lt;/strong&gt; At this point, jumping directly into building charts would have produced misleading results. A dashboard is only as reliable as the data behind it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For this reason, data preparation became the next priority.&lt;/p&gt;


&lt;h2&gt;
  
  
  Cleaning the Data with Power Query
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Power Query&lt;/strong&gt; is one of Power BI's most powerful features. Instead of modifying the source database, Power Query allows analysts to transform incoming data while keeping the original source untouched. This creates a repeatable &lt;strong&gt;Extract, Transform, and Load (ETL)&lt;/strong&gt; process that can be refreshed whenever new data becomes available.&lt;/p&gt;

&lt;p&gt;Our cleaning process involved several key transformations:&lt;/p&gt;
&lt;h3&gt;
  
  
  Standardizing Text
&lt;/h3&gt;

&lt;p&gt;Some records used uppercase values, others used lowercase, and some contained abbreviations or spelling mistakes. For example, a county could appear in several different forms, causing Power BI to treat them as different locations. We standardized these values to ensure consistency across the entire dataset.&lt;/p&gt;
&lt;h3&gt;
  
  
  Correcting Data Types
&lt;/h3&gt;

&lt;p&gt;Columns representing numbers had occasionally been interpreted as text, and date columns contained inconsistent formats. Power Query made it possible to convert each column into its correct data type before analysis.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Why this matters:&lt;/strong&gt; Proper data types are essential because DAX calculations depend on them. A number stored as text cannot be summed or averaged.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  Handling Missing Values
&lt;/h3&gt;

&lt;p&gt;Several fields contained null values. Rather than blindly deleting records, we evaluated each case individually. Depending on the context, we either replaced missing values, kept them for transparency, or excluded unusable records where appropriate. Documenting these decisions is an important part of responsible data preparation because every transformation influences the final analysis.&lt;/p&gt;
&lt;h3&gt;
  
  
  Removing Duplicates
&lt;/h3&gt;

&lt;p&gt;Repeated records inflate KPIs and distort business insights. Duplicate students, schools, or teachers could easily lead to incorrect counts. Power Query enabled us to identify and remove duplicate records while preserving unique entities.&lt;/p&gt;
&lt;h3&gt;
  
  
  Renaming Columns
&lt;/h3&gt;

&lt;p&gt;Clear naming conventions improve model readability. Instead of cryptic or inconsistent column names, we renamed fields using descriptive, business-friendly names. This makes DAX formulas easier to understand and simplifies collaboration.&lt;/p&gt;
&lt;h3&gt;
  
  
  Creating a Repeatable Transformation Pipeline
&lt;/h3&gt;
&lt;h2&gt;
  
  
  One of Power Query's greatest strengths is that every transformation becomes an &lt;strong&gt;Applied Step&lt;/strong&gt;. Instead of manually repeating the cleaning process each time new data arrives, Power BI simply replays the transformation steps automatically during refresh. This makes the cleaning process reproducible, auditable, and significantly less error-prone.
&lt;/h2&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%2Fvs6dhh171kcbqh1lnqh4.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%2Fvs6dhh171kcbqh1lnqh4.png" alt=" " width="800" height="458"&gt;&lt;/a&gt;&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%2Fwc1a55d3oougjxmh0dep.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%2Fwc1a55d3oougjxmh0dep.png" alt=" " width="800" height="416"&gt;&lt;/a&gt;&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%2Fe9494n5apnrump10qz5r.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%2Fe9494n5apnrump10qz5r.png" alt=" " width="320" height="796"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Why We Did Not Keep Everything in One Flat Table
&lt;/h2&gt;

&lt;p&gt;Once the data was clean, an important question emerged: should everything remain inside one giant table?&lt;/p&gt;

&lt;p&gt;Technically, it could. Practically, it should not.&lt;/p&gt;

&lt;p&gt;Flat tables work for small datasets, but as projects grow they become difficult to maintain. Repeated information wastes storage, complicates updates, and slows analytical queries. Instead of keeping one massive table, we normalized the data into a dimensional model that better represents how business entities relate to one another.&lt;/p&gt;

&lt;p&gt;This decision laid the foundation for the next and arguably most important phase of the project: building a &lt;strong&gt;Star Schema&lt;/strong&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  Building a Scalable Data Model with a Star Schema
&lt;/h2&gt;

&lt;p&gt;At this point, our data had been cleaned, standardized, and prepared for analysis. However, one major challenge still remained: the dataset still represented an &lt;em&gt;operational&lt;/em&gt; system rather than an &lt;em&gt;analytical&lt;/em&gt; one.&lt;/p&gt;

&lt;p&gt;Operational databases are designed to store information efficiently. Business Intelligence systems are designed to analyze information efficiently. Those are two very different objectives.&lt;/p&gt;

&lt;p&gt;If we had continued using one massive flat table, we would have encountered several problems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The same school information repeated hundreds of times&lt;/li&gt;
&lt;li&gt;Teacher information duplicated for every student&lt;/li&gt;
&lt;li&gt;Location information stored repeatedly&lt;/li&gt;
&lt;li&gt;Larger file sizes and slower report performance&lt;/li&gt;
&lt;li&gt;More complex DAX calculations&lt;/li&gt;
&lt;li&gt;Higher maintenance costs whenever data changed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead, we redesigned the model using one of the most widely adopted dimensional modeling techniques in Business Intelligence: the &lt;strong&gt;Star Schema&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  Why Star Schema?
&lt;/h3&gt;

&lt;p&gt;Before building the model, we briefly considered the three most common approaches:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Flat Table:&lt;/strong&gt; Stores everything in one place. While it appears simple at first, it becomes increasingly difficult to maintain because every entity is repeated multiple times. Imagine a school with 800 students. The school's name would appear 800 separate times in the table.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Snowflake Schema:&lt;/strong&gt; Introduces additional normalization by breaking hierarchical data into separate tables (Country &amp;gt; Region &amp;gt; County &amp;gt; Sub-county). This reduces redundancy further but also increases relationship complexity. For our assignment, this introduced unnecessary overhead.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Star Schema:&lt;/strong&gt; Strikes an excellent balance between simplicity, performance, and scalability. The design consists of one central Fact Table surrounded by multiple Dimension Tables. Microsoft also recommends Star Schema as the preferred modeling approach for Power BI because it simplifies filtering, improves query performance, and makes DAX calculations easier to write.&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%2F7mee9vwetl47u1ob1z3t.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%2F7mee9vwetl47u1ob1z3t.png" alt=" " width="800" height="505"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Designing the Fact Table
&lt;/h2&gt;

&lt;p&gt;The fact table became the heart of our analytical model. Unlike dimension tables, which describe entities, the fact table stores &lt;strong&gt;measurable events&lt;/strong&gt; such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Student scores&lt;/li&gt;
&lt;li&gt;Fee payments&lt;/li&gt;
&lt;li&gt;Attendance records&lt;/li&gt;
&lt;li&gt;Performance metrics&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every row in a fact table represents an event that can be analyzed. For example:&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%2F6d3xdm2skap9x0mhcqsg.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%2F6d3xdm2skap9x0mhcqsg.png" alt=" " width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Notice that the fact table references other entities rather than storing all their descriptive information repeatedly. Instead of storing the teacher's county, school address, and contact details every time, it simply stores a key pointing to the Teacher table. This dramatically reduces redundancy.&lt;/p&gt;


&lt;h2&gt;
  
  
  Building the Dimension Tables
&lt;/h2&gt;

&lt;p&gt;Once the fact table was identified, we separated descriptive information into dedicated dimension tables:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Student Dimension&lt;/strong&gt; contained: Student ID, Student Name, Gender, Age, School, County&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Teacher Dimension&lt;/strong&gt; contained: Teacher ID, Teacher Name, Assigned School, Subject&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;School Dimension&lt;/strong&gt; contained: School ID, School Name, Category, Location&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Subject Dimension&lt;/strong&gt; contained: Subject ID, Subject Name&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Location Dimension&lt;/strong&gt; centralized county and region information into a reusable table. This allows both schools and teachers to reference the same geographical information while maintaining consistency.&lt;/p&gt;
&lt;h2&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%2F5lt71fi2xc3yswmywfxw.png" alt=" " width="800" height="505"&gt;
&lt;/h2&gt;
&lt;h2&gt;
  
  
  Understanding Primary Keys and Foreign Keys
&lt;/h2&gt;

&lt;p&gt;One concept that finally clicked for me during this project was the relationship between primary and foreign keys.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;Primary Key&lt;/strong&gt; uniquely identifies each record within a table. For example:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;School ID&lt;/th&gt;
&lt;th&gt;School Name&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;101&lt;/td&gt;
&lt;td&gt;Green Hills Academy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;102&lt;/td&gt;
&lt;td&gt;Sunrise School&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The School ID is unique. No two schools share the same identifier.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;Foreign Key&lt;/strong&gt; references the primary key of another table. For example:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Student&lt;/th&gt;
&lt;th&gt;School ID&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Alice&lt;/td&gt;
&lt;td&gt;101&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Brian&lt;/td&gt;
&lt;td&gt;102&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Rather than writing the school name repeatedly, each student simply stores the corresponding School ID. Power BI then uses relationships to retrieve the descriptive information whenever required. This is one of the principles that makes relational databases so efficient.&lt;/p&gt;


&lt;h2&gt;
  
  
  Creating Relationships in Power BI
&lt;/h2&gt;

&lt;p&gt;Once the tables had been separated, we connected them using relationships. Power BI supports several relationship types:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One-to-One:&lt;/strong&gt; Every record matches exactly one record in another table. Valid but relatively uncommon in analytical models.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One-to-Many:&lt;/strong&gt; This became the dominant relationship in our project. For example, one school has many students; one teacher has many student records; one subject has many assessment records. This relationship type reflects how educational data naturally behaves.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Many-to-One:&lt;/strong&gt; Power BI often displays the same relationship from the opposite perspective. Many students belong to one school. The underlying relationship remains identical.&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%2F5ucxqhinvotdi12xmnn3.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%2F5ucxqhinvotdi12xmnn3.png" alt=" " width="800" height="276"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Understanding Cardinality
&lt;/h3&gt;

&lt;p&gt;Cardinality determines how Power BI filters information across related tables. If relationships are configured incorrectly, visuals may return duplicated values or incorrect totals. Because our model followed a proper Star Schema, defining cardinality became much more straightforward, with most relationships naturally following a One-to-Many structure.&lt;/p&gt;
&lt;h3&gt;
  
  
  Filter Direction
&lt;/h3&gt;

&lt;p&gt;Power BI allows filters to flow between related tables. Whenever possible, we maintained &lt;strong&gt;single-direction filtering&lt;/strong&gt;, allowing filters to flow from the dimension tables toward the fact table. For example, selecting a county automatically filtered schools, students, teachers, and performance records. This simplified report behavior while reducing ambiguity during DAX calculations.&lt;/p&gt;
&lt;h3&gt;
  
  
  Why Normalization Matters
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Dividing one table into several smaller tables might appear to make the project more complicated. Ironically, the opposite is true. Normalization makes the model easier to maintain, easier to understand, faster to query, less repetitive, and more scalable. As datasets grow, these benefits become increasingly significant.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  Turning Data into Insights with DAX
&lt;/h2&gt;

&lt;p&gt;After building the data model, the next step was teaching Power BI how to answer business questions. This is where &lt;strong&gt;Data Analysis Expressions (DAX)&lt;/strong&gt; became essential.&lt;/p&gt;

&lt;p&gt;Think of DAX as the language that teaches Power BI how to think. While relationships organize data, DAX transforms that organized data into business metrics.&lt;/p&gt;
&lt;h3&gt;
  
  
  Calculated Columns vs. Measures
&lt;/h3&gt;

&lt;p&gt;One key lesson from this project was understanding the difference between these two approaches:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Calculated Columns&lt;/strong&gt; compute values for every row and store the result in the model&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Measures&lt;/strong&gt; calculate results dynamically based on the filters applied by the user&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Since dashboards are interactive, measures are generally the better choice because they recalculate automatically as users interact with slicers and filters.&lt;/p&gt;
&lt;h3&gt;
  
  
  Measures We Created
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Total Students&lt;/li&gt;
&lt;li&gt;Total Schools&lt;/li&gt;
&lt;li&gt;Total Teachers&lt;/li&gt;
&lt;li&gt;Average Student Score&lt;/li&gt;
&lt;li&gt;Student Distribution&lt;/li&gt;
&lt;li&gt;School Distribution&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Where the dataset lacked complete information, such as revenue or outstanding balances, we intentionally avoided creating misleading measures. Instead, we documented the limitation and focused our analysis on the data that was available.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Important principle:&lt;/strong&gt; Good analysts never invent data to satisfy a report.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  Applying Business Logic with DAX
&lt;/h3&gt;

&lt;p&gt;Beyond simple aggregations, DAX can encode business rules. Functions such as &lt;code&gt;IF()&lt;/code&gt;, &lt;code&gt;AND()&lt;/code&gt;, and &lt;code&gt;OR()&lt;/code&gt; allow multiple conditions to be evaluated, while &lt;code&gt;SWITCH(TRUE())&lt;/code&gt; provides a cleaner alternative to long nested IF statements.&lt;/p&gt;

&lt;p&gt;For example, a revenue classification measure could be written as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Revenue Category =
SWITCH(
    TRUE(),
    ISBLANK([Revenue]), "Not Provided",
    [Revenue] &amp;gt; 500000, "High Revenue",
    [Revenue] &amp;gt; 100000, "Medium Revenue",
    [Revenue] &amp;gt; 0, "Low Revenue"
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We also learned how &lt;code&gt;CALCULATE()&lt;/code&gt; changes the filter context, enabling measures such as total students in a specific county or average scores for selected schools. This flexibility is one of the reasons DAX is such a powerful analytical language.&lt;/p&gt;

&lt;h2&gt;
  
  
  Designing the Interactive Dashboard
&lt;/h2&gt;

&lt;p&gt;With the model and measures complete, the final step was presenting the insights.&lt;/p&gt;

&lt;p&gt;Our dashboard combined several visualizations to answer the questions outlined in the project brief:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;KPI Cards&lt;/strong&gt; for key metrics&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bar and Column Charts&lt;/strong&gt; for comparisons&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Donut Charts&lt;/strong&gt; for distributions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Slicers&lt;/strong&gt; for filtering by school, county, teacher, subject, and gender&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tables&lt;/strong&gt; for detailed records&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Rather than filling the report with as many visuals as possible, we focused on clarity. Each chart answered a specific business question, and together they formed a cohesive analytical story.&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%2Ffkqonp1kcydv9lmqxv97.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%2Ffkqonp1kcydv9lmqxv97.png" alt=" " width="800" height="463"&gt;&lt;/a&gt;&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%2F7vy0xcqps5e0xf8xs82l.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%2F7vy0xcqps5e0xf8xs82l.png" alt=" " width="800" height="467"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Insights from the Project
&lt;/h2&gt;

&lt;p&gt;Building the dashboard highlighted how quickly insights become accessible once data is properly prepared. Users could identify:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Schools with the highest student populations&lt;/li&gt;
&lt;li&gt;Student distribution across locations&lt;/li&gt;
&lt;li&gt;Gender distribution&lt;/li&gt;
&lt;li&gt;Teacher allocation&lt;/li&gt;
&lt;li&gt;Subject performance&lt;/li&gt;
&lt;li&gt;Academic trends across schools and regions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;More importantly, the project demonstrated that the quality of these insights depended entirely on the quality of the underlying data model.&lt;/p&gt;




&lt;h2&gt;
  
  
  Beyond Power BI Desktop
&lt;/h2&gt;

&lt;p&gt;One topic we covered during training was what happens after a report is built.&lt;/p&gt;

&lt;p&gt;Publishing a report to the &lt;strong&gt;Power BI Service&lt;/strong&gt; allows organizations to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Share reports securely with stakeholders&lt;/li&gt;
&lt;li&gt;Schedule automatic data refreshes&lt;/li&gt;
&lt;li&gt;Create email subscriptions that send report snapshots at scheduled intervals&lt;/li&gt;
&lt;li&gt;Embed reports into web applications and organizational portals&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We also explored &lt;strong&gt;Microsoft Fabric&lt;/strong&gt;, Microsoft's unified analytics platform that brings together data engineering, data warehousing, real-time analytics, and business intelligence into a single ecosystem. Although our project was developed in Power BI Desktop, understanding how it fits within the broader Microsoft analytics platform provided valuable context for enterprise-scale solutions.&lt;/p&gt;




&lt;h2&gt;
  
  
  Lessons I Took Away
&lt;/h2&gt;

&lt;p&gt;This project changed the way I think about dashboards.&lt;/p&gt;

&lt;p&gt;Before, I assumed the most important skill in Power BI was creating attractive visualizations. I now realize that visualization is only the &lt;strong&gt;final stage&lt;/strong&gt; of a much larger process.&lt;/p&gt;

&lt;p&gt;The real work happens long before the first chart is created:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Connecting securely to data sources&lt;/li&gt;
&lt;li&gt;Cleaning inconsistent data&lt;/li&gt;
&lt;li&gt;Designing scalable data models&lt;/li&gt;
&lt;li&gt;Building meaningful relationships&lt;/li&gt;
&lt;li&gt;Writing reusable DAX measures&lt;/li&gt;
&lt;li&gt;Delivering insights that decision-makers can trust&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;A visually impressive dashboard built on poor-quality data is still a poor dashboard.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;What began as a classroom assignment became an excellent introduction to the complete Business Intelligence workflow.&lt;/p&gt;

&lt;p&gt;Over the course of the project, I learned how to connect Power BI to a PostgreSQL database using secure SSL connections, transform messy data with Power Query, redesign a flat dataset into a Star Schema, create relationships between fact and dimension tables, write DAX measures, and communicate insights through an interactive dashboard.&lt;/p&gt;

&lt;p&gt;More importantly, I learned that &lt;strong&gt;Business Intelligence is not about creating charts.&lt;/strong&gt; It is about transforming raw, imperfect data into information that supports better decisions.&lt;/p&gt;

&lt;p&gt;As I continue exploring data engineering and analytics, this project serves as a reminder that every reliable dashboard begins with a well-designed data pipeline, a thoughtful data model, and a commitment to data quality.&lt;/p&gt;




&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;p&gt;If you are learning Power BI, I would recommend exploring:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/training/powerplatform/power-bi" rel="noopener noreferrer"&gt;Microsoft Learn - Power BI Learning Paths&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/dax/" rel="noopener noreferrer"&gt;Microsoft Learn - DAX Fundamentals&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/power-query/" rel="noopener noreferrer"&gt;Microsoft Learn - Power Query Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/power-bi/guidance/star-schema" rel="noopener noreferrer"&gt;Microsoft Learn - Star Schema Guidance&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/fabric/" rel="noopener noreferrer"&gt;Microsoft Fabric Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.postgresql.org/docs/" rel="noopener noreferrer"&gt;PostgreSQL Official Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/pinkleather221/Power-BI-End-to-End-Education-Data-Analysis-" rel="noopener noreferrer"&gt;GitHub Repository&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Connect With Me
&lt;/h2&gt;

&lt;p&gt;If you are working on Power BI, data engineering, or analytics projects, I would love to connect and exchange ideas.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/pinkleather221/" rel="noopener noreferrer"&gt;https://github.com/pinkleather221/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>datascience</category>
      <category>powerfuldevs</category>
      <category>analytics</category>
      <category>database</category>
    </item>
    <item>
      <title>How Excel is Used in Real-World Data Analysis</title>
      <dc:creator>Nelly Mogere</dc:creator>
      <pubDate>Sat, 06 Jun 2026 06:57:21 +0000</pubDate>
      <link>https://dev.to/nelly_mogere_194bac0cb2ba/how-excel-is-used-in-real-world-data-analysis-g1</link>
      <guid>https://dev.to/nelly_mogere_194bac0cb2ba/how-excel-is-used-in-real-world-data-analysis-g1</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Introduction&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In today’s digital world, data is everywhere. Businesses, schools, hospitals and organizations collect large amounts of information every day. One of the most commonly used tools for organizing and analyzing this data is Microsoft Excel.&lt;/p&gt;

&lt;p&gt;Before starting my data analytics journey, I viewed Excel as a simple spreadsheet application mainly used for typing tables and performing calculations. However, after learning more about it during my training at LuxDevHQ, I now understand how powerful and important it is in real-world data analysis.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;What is excel&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Microsoft Excel is a spreadsheet software developed by Microsoft that helps users:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Organize data&lt;/li&gt;
&lt;li&gt;Perform calculations&lt;/li&gt;
&lt;li&gt;Analyze information&lt;/li&gt;
&lt;li&gt;Create charts and reports&lt;/li&gt;
&lt;li&gt;Visualize trends and patterns&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Excel is widely used because it is easy to learn, flexible, and useful in many industries.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Real-World application of excel in data analysis&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt; Business decision-making&lt;br&gt;
Businesses use Excel to track and analyze important information such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sales performance&lt;/li&gt;
&lt;li&gt;Inventory records&lt;/li&gt;
&lt;li&gt;Employee performance&lt;/li&gt;
&lt;li&gt;Customer trends&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, a company can use Excel to identify which products sell the most and which products are underperforming. This helps managers make better business decisions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2.&lt;/strong&gt; Financial Reporting and Budgeting&lt;br&gt;
Excel is heavily used in finance and accounting. Companies use it to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Calculate profits and losses&lt;/li&gt;
&lt;li&gt;Track expenses&lt;/li&gt;
&lt;li&gt;Prepare budgets&lt;/li&gt;
&lt;li&gt;Forecast future revenue&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Functions like SUMIF and AVERAGEIF help analysts quickly calculate totals and averages based on specific conditions.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Excel Features and Formulas I Have Learned&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;So far, I have learned several useful Excel features and formulas that are commonly used in data analysis.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Features&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Freeze Panes&lt;/em&gt;&lt;br&gt;
This feature keeps important rows or columns visible while scrolling through large datasets.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Remove Duplicates&lt;/em&gt;&lt;br&gt;
This helps clean data by removing repeated information, making datasets more accurate and organized.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Formulas&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;SUMIF&lt;/em&gt;&lt;br&gt;
Used to calculate totals based on a condition.&lt;br&gt;
Example:&lt;br&gt;
Calculating total sales from a specific region.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;AVERAGEIF&lt;/em&gt;&lt;br&gt;
Used to find averages that meet certain conditions.&lt;br&gt;
Example:&lt;br&gt;
Finding the average marks of students in one class.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;COUNTIFS&lt;/em&gt;&lt;br&gt;
Used to count values that meet multiple conditions.&lt;br&gt;
Example:&lt;br&gt;
Counting customers from a certain city who purchased a specific product.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;My Personal Reflection&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;At first, I thought Excel was something simple and easy. However, after attending classes and practicing different features and formulas, I now realize that Excel is a powerful analytical tool used in real-world industries.&lt;/p&gt;

&lt;p&gt;Even with the few classes I have attended so far, I already feel more confident working with data. I can now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Find insights from datasets&lt;/li&gt;
&lt;li&gt;Calculate totals and averages&lt;/li&gt;
&lt;li&gt;Clean messy data&lt;/li&gt;
&lt;li&gt;Visualize information clearly&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This learning experience has made me more interested in data analytics and I look forward to learning more advanced skills in the future.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Excel plays a major role in real-world data analysis because it helps people organize, analyze and understand data efficiently. From business reporting to financial analysis and marketing insights, Excel continues to be one of the most valuable tools in the world of data.&lt;/p&gt;

&lt;p&gt;As a beginner in data analytics, learning Excel has given me confidence and a better understanding of how data can be used to solve real-world problems.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>datascience</category>
      <category>beginners</category>
    </item>
    <item>
      <title>I Built a Cloud Platform That Does Absolutely Nothing (And It Works Perfectly)</title>
      <dc:creator>Nelly Mogere</dc:creator>
      <pubDate>Mon, 06 Apr 2026 05:31:11 +0000</pubDate>
      <link>https://dev.to/nelly_mogere_194bac0cb2ba/i-built-a-cloud-platform-that-does-absolutely-nothing-and-it-works-perfectly-45fe</link>
      <guid>https://dev.to/nelly_mogere_194bac0cb2ba/i-built-a-cloud-platform-that-does-absolutely-nothing-and-it-works-perfectly-45fe</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/aprilfools-2026"&gt;DEV April Fools Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I’ve spent a ridiculous amount of time learning cloud architecture, Kubernetes, scaling systems… all the serious stuff.&lt;br&gt;
So naturally, I decided to build something completely useless.&lt;br&gt;
I present: Cloud Architect Simulator™ a platform that successfully deploys absolutely nothing… at scale.&lt;br&gt;
You can:&lt;br&gt;
Deploy apps that don’t exist&lt;br&gt;
Auto-scale to infinity (with 0 users 💀)&lt;br&gt;
Optimize your infrastructure using AI (which deletes everything for better performance)&lt;br&gt;
Brew coffee via API (spoiler: I’m a teapot ☕)&lt;br&gt;
There’s even a region selector with options like Mars (Beta) and Some Guy’s Laptop because… why not?&lt;br&gt;
The whole idea was to poke fun at how complex and over-engineered cloud systems can get except here, all that complexity leads to absolutely no outcome.&lt;br&gt;
And somehow… it still works perfectly.&lt;/p&gt;
&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;




&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://pinkleather221.github.io/Cloud-Architect-Simulator-Deploying-Nothing-at-Scale-/" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;pinkleather221.github.io&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
  &lt;iframe src="https://www.youtube.com/embed/gi6Ebefh_c8"&gt;
  &lt;/iframe&gt;
 &lt;br&gt;
Everything is working exactly as it shouldn’t
&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;




&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/pinkleather221" rel="noopener noreferrer"&gt;
        pinkleather221
      &lt;/a&gt; / &lt;a href="https://github.com/pinkleather221/Cloud-Architect-Simulator-Deploying-Nothing-at-Scale-" rel="noopener noreferrer"&gt;
        Cloud-Architect-Simulator-Deploying-Nothing-at-Scale-
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Cloud Architect Simulator™ is a fake cloud platform where you deploy apps that don’t exist, scale to infinity with zero users, and optimize everything into nothing. Built for the DEV April Fools Challenge, it’s a playful take on over-engineered systems.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Cloud-Architect-Simulator-Deploying-Nothing-at-Scale-&lt;/h1&gt;

&lt;/div&gt;
&lt;p&gt;Cloud Architect Simulator™ is a fake cloud platform where you deploy apps that don’t exist, scale to infinity with zero users, and optimize everything into nothing. Built for the DEV April Fools Challenge, it’s a playful take on over-engineered systems.&lt;/p&gt;
&lt;/div&gt;



&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/pinkleather221/Cloud-Architect-Simulator-Deploying-Nothing-at-Scale-" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;br&gt;&lt;br&gt;
It’s a simple HTML, CSS and JavaScript setup nothing fancy, just pure intentional nonsense layered on top of clean structure.

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;I kept the stack intentionally simple:&lt;br&gt;
HTML for structure&lt;br&gt;
CSS for styling (dark mode because we’re engineers obviously)&lt;br&gt;
Vanilla JavaScript for all the chaotic interactions&lt;br&gt;
Most of the logic is just fake state changes, random values and delayed responses to make it feel real.&lt;br&gt;
The fun part was designing interactions that look legitimate at first… and then slowly fall apart.&lt;br&gt;
For example:&lt;br&gt;
Fake deployment logs that end in “No application found”&lt;br&gt;
Billing that spikes randomly then pretends nothing happened&lt;br&gt;
AI optimization that aggressively removes everything&lt;br&gt;
It’s basically a real cloud dashboard… if it had an existential crisis.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Category
&lt;/h2&gt;

&lt;p&gt;I had to pay respect to the legendary 418 I’m a teapot energy.&lt;br&gt;
The “Brew Coffee API” feature is my tribute it goes through a whole dramatic process before ultimately refusing to cooperate because… it’s a teapot.&lt;br&gt;
It felt very on-brand for a project that commits fully to doing the wrong thing in the most elaborate way possible.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>418challenge</category>
      <category>showdev</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
