<?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: Collins Sigei</title>
    <description>The latest articles on DEV Community by Collins Sigei (@sigei).</description>
    <link>https://dev.to/sigei</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%2F4071748%2F03765e5b-e07d-4f53-84c3-0856de8c68f5.png</url>
      <title>DEV Community: Collins Sigei</title>
      <link>https://dev.to/sigei</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sigei"/>
    <language>en</language>
    <item>
      <title>Power Bi: Data Modelling, Relationships and Joins</title>
      <dc:creator>Collins Sigei</dc:creator>
      <pubDate>Wed, 23 Sep 2026 16:05:26 +0000</pubDate>
      <link>https://dev.to/sigei/power-bi-data-modelling-relationships-and-joins-3aj1</link>
      <guid>https://dev.to/sigei/power-bi-data-modelling-relationships-and-joins-3aj1</guid>
      <description>&lt;h2&gt;
  
  
  Data Modelling
&lt;/h2&gt;

&lt;p&gt;Data modelling involves organizing, connecting, and structuring data from different tables so that Power BI can analyze and summarize data it correctly. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why is data modelling important?&lt;/strong&gt; &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Makes data easy to analyze as it organizes information into fact and dimension tables. &lt;/li&gt;
&lt;li&gt;Ensures correct relationships by enabling information from different tables to work together&lt;/li&gt;
&lt;li&gt;Reduces data errors and duplication as separating information into appropriate tables avoids unnecessarily repeating the same data. &lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Types of Tables
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Fact Table&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This contains the quantitative data that represents the transactions and events and holds numeric values that will be analyzed. &lt;/li&gt;
&lt;li&gt;Fact table contains foreign keys. For instance, consider a hospital record dataset, the fact table contains foreign keys pointing to the related dimension tables like information about the departments, diagnosis, the doctors, patient information as well as other information such as admission type, insurance, length of stays.
&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%2Fh0hxsd0r853jxt3iztbl.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%2Fh0hxsd0r853jxt3iztbl.png" alt="Fact Table" width="344" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Dimension Table&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This contains descriptive attributes used to analyze the information in the fact table. &lt;/li&gt;
&lt;li&gt;Dimension table contains primary key which creates a relationship with the fact table foreign key. In the  hospital records dataset, the dimension tables contain information such as department ID, diagnosis ID, doctor ID, patient ID&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%2Frqgfg0ujiimb7wnhh333.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%2Frqgfg0ujiimb7wnhh333.png" alt="Dim tables" width="638" height="465"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Flat table&lt;/strong&gt;&lt;br&gt;
This is a single table where all the information needed for analysis is stored in one place, rather than being separated into multiple related tables.&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%2Fj34pt8tbo0ckc71gfggj.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%2Fj34pt8tbo0ckc71gfggj.png" alt="Flat table" width="216" height="406"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Types of Schemas
&lt;/h2&gt;

&lt;p&gt;Schema is a way of organizing and structuring tables and their relationships.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Star schema&lt;/strong&gt;&lt;br&gt;
Data is organized into one central fact table surrounded by dimension tables. &lt;br&gt;
The fact table is at the center and the dimension tables are around the fact table. &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%2Fl9uz6gn0kqma2kqji956.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%2Fl9uz6gn0kqma2kqji956.png" alt="star schema" width="638" height="465"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Advantages of a Star Schema&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Simple and easy to understand&lt;/li&gt;
&lt;li&gt;Reduces data duplication &lt;/li&gt;
&lt;li&gt;Makes analysis easier &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Disadvantages of a start schema&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Requires proper relationship management as incorrect relationship can result to inaccurate analysis&lt;/li&gt;
&lt;li&gt;Data needs to be organized into appropriate fact and dimension tables before building the report&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;When is a star schema appropriate?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When working with large datasets that contain different types of information.&lt;/li&gt;
&lt;li&gt;Building Powerbi dashboards that require interactive filtering and analysis&lt;/li&gt;
&lt;li&gt;Creating reports that will be updated regularly, because the model is easier to maintain.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Snowflake schema&lt;/strong&gt;&lt;br&gt;
A snowflake schema is a model where dimension tables are broken into sub-dimensions, resembling a snowflake shape. &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%2Fy5c2mvm6tdiunvvpq765.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%2Fy5c2mvm6tdiunvvpq765.png" alt="snowflake schema" width="800" height="390"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Advantages of snowflake schema&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Provides better data organization as related information can be separated into logical tables.&lt;/li&gt;
&lt;li&gt;Reduces data duplication as repeated information can be separated into its own table.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Disadvantages of snowflake schema&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;More relationships to maintain as incorrect relationships can lead to inaccurate results.&lt;/li&gt;
&lt;li&gt;Can make reporting more difficult for users as users may need to understand several tables before they can identify the information they need. &lt;/li&gt;
&lt;li&gt;May not be necessary for simple datasets &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;When is a snowflake schema appropriate?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Where dimensions are extremely large with repetitive hierarchies &lt;/li&gt;
&lt;li&gt;When working with a large and complex dataset&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Primary Key
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Think of a primary key as an ID number that help tables in a dataset talk to each other. &lt;/li&gt;
&lt;li&gt;This is a unique identifier in a table. 
In this instance, the primary key is the dimension table of &lt;code&gt;dim_patients&lt;/code&gt; is &lt;code&gt;patients Id&lt;/code&gt; in &lt;code&gt;dim_doctors&lt;/code&gt; is &lt;code&gt;doctors Id&lt;/code&gt; in &lt;code&gt;dim_departments&lt;/code&gt; is &lt;code&gt;departments Id&lt;/code&gt;
&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%2Fikqfz44u1wftan4m2yo1.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%2Fikqfz44u1wftan4m2yo1.png" alt="Dim tables" width="638" height="465"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Foreign Keys
&lt;/h3&gt;

&lt;p&gt;This is a primary key used in another table. In this instance, the primary keys from the dimension table are seen in the fact table and therefore referred to as foreign keys. &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%2Fe6g6xzq2la19vgfosowg.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%2Fe6g6xzq2la19vgfosowg.png" alt="Fact table" width="344" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Understanding Relationships in Power Bi
&lt;/h3&gt;

&lt;p&gt;When working with Power BI, data is often stored in multiple tables. For example, a hospital records dataset may have separate tables for patients, hospital visits, departments, doctors and treatments. &lt;/p&gt;

&lt;p&gt;A relationship is a connection between two tables that shows how the data in those two tables are related. &lt;/p&gt;

&lt;p&gt;For instance, in the hospital records dataset, we have the following tables:&lt;br&gt;
&lt;code&gt;Dim_Patients&lt;/code&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Patient ID&lt;/th&gt;
&lt;th&gt;Patient name&lt;/th&gt;
&lt;th&gt;Patient gender&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Amina Otieno&lt;/td&gt;
&lt;td&gt;Female&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;John Kariuki&lt;/td&gt;
&lt;td&gt;Male&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Grace Naliaka&lt;/td&gt;
&lt;td&gt;Female&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;We also have &lt;br&gt;
&lt;code&gt;Hospital visits table&lt;/code&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Visit ID&lt;/th&gt;
&lt;th&gt;Patient ID&lt;/th&gt;
&lt;th&gt;Department&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1001&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Outpatient&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1002&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Laboratory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1003&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Pharmacy&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Both tables contain &lt;code&gt;Patient ID&lt;/code&gt;. This allows the relationship to connect the two tables&lt;/p&gt;

&lt;p&gt;In the Patients table, &lt;code&gt;Patient ID&lt;/code&gt; is the &lt;strong&gt;primary key&lt;/strong&gt; because each patient has a unique ID.&lt;/p&gt;

&lt;p&gt;In the Visits table, &lt;code&gt;Patient ID&lt;/code&gt; is the &lt;strong&gt;foreign key&lt;/strong&gt; because it refers back to the patient in the Patients table.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This is a one-to-many (1:*) relationship.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It means that one patient can have many hospital visits.&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%2F9khzqev3cylo9zjppali.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%2F9khzqev3cylo9zjppali.png" alt="One to many" width="446" height="216"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;One-to-One (1:1)&lt;/strong&gt;&lt;br&gt;
One record in one table corresponds to exactly one record in another table.&lt;br&gt;
For instance, &lt;code&gt;Patient ID&lt;/code&gt; and &lt;code&gt;Patient Medical Profile&lt;/code&gt; tables&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Patient ID&lt;/th&gt;
&lt;th&gt;Patient name&lt;/th&gt;
&lt;th&gt;Patient gender&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Amina Otieno&lt;/td&gt;
&lt;td&gt;Female&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;John Kariuki&lt;/td&gt;
&lt;td&gt;Male&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Grace Naliaka&lt;/td&gt;
&lt;td&gt;Female&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Patient ID&lt;/th&gt;
&lt;th&gt;Blood Group&lt;/th&gt;
&lt;th&gt;Insurance No&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;O+&lt;/td&gt;
&lt;td&gt;INS 001&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;A+&lt;/td&gt;
&lt;td&gt;INS 002&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;B+&lt;/td&gt;
&lt;td&gt;INS 003&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Here, each patient has one medical profile. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This is a one to one (1:1) relationship &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The &lt;code&gt;Patient ID&lt;/code&gt; in the &lt;strong&gt;Patients table&lt;/strong&gt; identifies the patient, while &lt;code&gt;Patient ID&lt;/code&gt; in the &lt;strong&gt;Medical Profile table&lt;/strong&gt; is used to connect that patient's profile to them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Many-to-Many (:)&lt;/strong&gt;&lt;br&gt;
Many records in one table can be related to many records in another table.&lt;br&gt;
The hospital records dataset provides a good example as in a table of Patients and Doctors.&lt;/p&gt;

&lt;p&gt;A patient can see several doctors and at the same time, a doctor can see many patients, so &lt;code&gt;many patients can see many doctors&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Understanding Joins
&lt;/h3&gt;

&lt;p&gt;Data is often stored in different tables. For example, a hospital records dataset may have separate tables for patients, visits, doctors, and departments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1:&lt;/strong&gt;Load the data, then select &lt;code&gt;home&lt;/code&gt; and click of &lt;code&gt;transform data&lt;/code&gt; to go to power query.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2:&lt;/strong&gt; Select the first table and head to &lt;code&gt;merge queries&lt;/code&gt;. The &lt;code&gt;first table&lt;/code&gt; selected will be the &lt;code&gt;left table&lt;/code&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%2F58720sfiuisizyga19tj.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%2F58720sfiuisizyga19tj.png" alt="Merge queries" width="800" height="262"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3:&lt;/strong&gt;In the merge window, select the table you want to join with the first table. From the two table, select the column from each table that are common from both tables. &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%2Fugr4pwm2hl7ev5sfil61.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%2Fugr4pwm2hl7ev5sfil61.png" alt="Joins" width="710" height="651"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4:&lt;/strong&gt; Choose the join type from the dropdown menu&lt;/p&gt;

&lt;p&gt;A join allows us to combine data from two tables using a common column. For instance, the Patients and hospital visits tables may both contain &lt;code&gt;Patient ID&lt;/code&gt;. This common column can be used to join the two tables.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Inner Join&lt;/strong&gt;&lt;br&gt;
An inner join returns only records that have a matching value in both tables.&lt;br&gt;
In this hospital records table, the &lt;code&gt;dim_patients&lt;/code&gt; and the &lt;code&gt;hospital visits table&lt;/code&gt;, it will only return the common values in the table which is:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Patient ID&lt;/th&gt;
&lt;th&gt;Patient name&lt;/th&gt;
&lt;th&gt;Patient gender&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Amina Otieno&lt;/td&gt;
&lt;td&gt;Female&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Grace Naliaka&lt;/td&gt;
&lt;td&gt;Female&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;2. Left Outer Join&lt;/strong&gt;&lt;br&gt;
A left outer join keeps all records from the left table and adds matching information from the right table.&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%2Fxoglmruh5l8jpd4uc1dt.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%2Fxoglmruh5l8jpd4uc1dt.png" alt="Left outer join" width="727" height="646"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Right Outer Join&lt;/strong&gt;&lt;br&gt;
It keeps all records from the right table and brings in matching records from the left table.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Full Outer Join&lt;/strong&gt;&lt;br&gt;
A full outer join keeps everything from both tables. Provides everything from both tables, whether they match or not.&lt;/p&gt;

&lt;p&gt;For instance the &lt;code&gt;patients table&lt;/code&gt; has patients Id &lt;code&gt;1,2,3&lt;/code&gt; while the &lt;code&gt;visits table&lt;/code&gt; has patients Id &lt;code&gt;1,3,4&lt;/code&gt; Therefore, the &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Full outer join will provide 1,2,3,4 &lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Patient ID&lt;/th&gt;
&lt;th&gt;Patient name&lt;/th&gt;
&lt;th&gt;Patient gender&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Amina Otieno&lt;/td&gt;
&lt;td&gt;Female&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;John Kariuki&lt;/td&gt;
&lt;td&gt;Male&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Grace Naliaka&lt;/td&gt;
&lt;td&gt;Female&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Ahmed Ahmed&lt;/td&gt;
&lt;td&gt;Male&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;5. Left Anti Join&lt;/strong&gt; &lt;br&gt;
This is useful for finding records in the left table that do not exist in the right table.&lt;/p&gt;

&lt;p&gt;For instance the Patient table: &lt;code&gt;1,2,3&lt;/code&gt; and Hospital visits table: &lt;code&gt;1,4,3&lt;/code&gt;. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The left anti join returns &lt;strong&gt;2&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;6. Right Anti Join&lt;/strong&gt; &lt;br&gt;
It returns records that exist in the right table but not the left table.&lt;/p&gt;

&lt;p&gt;For instance the Patient table: &lt;code&gt;1,2,3&lt;/code&gt; and Hospital visits table: &lt;code&gt;1,4,3&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The left anti join returns &lt;strong&gt;4&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Recommendation and Conclusion
&lt;/h2&gt;

&lt;p&gt;For a Business Intelligence (BI) project, I would use a star schema as the main data modelling approach, with a fact table at the centre and dimension tables surrounding it.&lt;/p&gt;

&lt;p&gt;For example, in a hospital analysis project, the model could contain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fact Visits – records of hospital visits, patients information, departments, doctors, and treatment administered.&lt;/li&gt;
&lt;li&gt;Dim Patient – patient information.&lt;/li&gt;
&lt;li&gt;Dim Department – department information.&lt;/li&gt;
&lt;li&gt;Dim Doctor – doctor information, where required.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The fact table would contain foreign keys that connect it to the dimension tables through one-to-many (1:*) relationships.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dim Patient (1) → Fact Visits (*)&lt;/strong&gt;&lt;br&gt;
This means one patient can have many visits, while each visit belongs to a particular patient.&lt;/p&gt;

&lt;p&gt;Overall, the goal is to keep the model simple, well-structured, and suitable for accurate reporting and analysis.&lt;/p&gt;

</description>
      <category>datascience</category>
      <category>analytics</category>
    </item>
    <item>
      <title>Building an Interactive Excel Dashboard for E-commerce Product Analysis: A Case Study of Jumia Products</title>
      <dc:creator>Collins Sigei</dc:creator>
      <pubDate>Sun, 06 Sep 2026 02:35:36 +0000</pubDate>
      <link>https://dev.to/sigei/building-an-interactive-excel-dashboard-for-e-commerce-product-analysis-a-case-study-of-jumia-2j2f</link>
      <guid>https://dev.to/sigei/building-an-interactive-excel-dashboard-for-e-commerce-product-analysis-a-case-study-of-jumia-2j2f</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;This project involved building an interactive Excel dashboard to analyse Jumia products. The dataset contains information such as product, prices, customer ratings, reviews and discounts. Here in are the steps taken to ensure that the raw data translates into meaningful insights to help identify product performance and customer satisfaction. &lt;/p&gt;

&lt;h2&gt;
  
  
  Data Cleaning and Preparation
&lt;/h2&gt;

&lt;p&gt;Initially, the dataset was cleaned to remove any inconsistencies, blanks, and corrected to ensure that the data was ready for analysis. Below is the raw dataset&lt;br&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%2F0iupieyq72rpj86rlqxp.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%2F0iupieyq72rpj86rlqxp.png" alt="Rawdataset" width="800" height="349"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Remove Duplicates
Created a new worksheet from the raw dataset and named it as &lt;code&gt;cleaned&lt;/code&gt;. Duplicates were removed from the cleaned worksheet  to ensure all repeated records are expunged and only the unique records remain. &lt;/li&gt;
&lt;li&gt;Format the numerical values to the appropriate category &lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;The prices column are formatted and converted to currency&lt;/li&gt;
&lt;li&gt;The review column is revised from the &lt;code&gt;negative&lt;/code&gt; value and made to whole numbers. &lt;/li&gt;
&lt;li&gt;On the ratings column, the &lt;code&gt;out of 5&lt;/code&gt; is expunged and only the whole numbers retained. &lt;/li&gt;
&lt;li&gt;The blanks in each column are replaced by &lt;code&gt;Not provided&lt;/code&gt;
&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%2Fz84udp2g62iuauacdqc9.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%2Fz84udp2g62iuauacdqc9.png" alt="Cleaned Dataset" width="799" height="347"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Excel techniques, formulas and analysis performed
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Discount Amount&lt;/em&gt;&lt;br&gt;
Created a discount column and calculated the difference between the old and current price. &lt;code&gt;Old price - Current price&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Discount Category&lt;/em&gt;&lt;br&gt;
Grouped products into categories of High discount, Medium discount, and Low discount, based on the discount percentage column. &lt;br&gt;
&lt;code&gt;=IF(D2&amp;gt;=40%, "High Discount", IF(D2&amp;gt;=20%, "Medium Discount", "Low Discount"))&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;High discount - more than or equal to 40%&lt;/li&gt;
&lt;li&gt;Medium discount - more than or equal to 20%&lt;/li&gt;
&lt;li&gt;Low discount - less than 20%&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Rating Category&lt;/em&gt;&lt;br&gt;
Classified products based on their ratings into Excellent, average and poor based on the ratings column using the following function:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;=IF(ISBLANK(F2), "Not Provided", IF(F2&amp;gt;=4.5, "Excellent", IF(F2&amp;gt;=3, "Average", "Poor")))&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Blank spaces - Not provided&lt;/li&gt;
&lt;li&gt;Excellent - more than or equal to 4.5&lt;/li&gt;
&lt;li&gt;Average - more than or equal to 3&lt;/li&gt;
&lt;li&gt;Poor - less than 3&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Price Category&lt;/em&gt;&lt;br&gt;
Classified products into high price, medium price, and low price, using the below function based on the price column:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;=IF(B2&amp;gt;=2000, "High Price", IF(B2&amp;gt;=1000, "Medium Price", "Low Price"))&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;High price - more than or equal to 2000&lt;/li&gt;
&lt;li&gt;Medium price - more than or equal to 1000&lt;/li&gt;
&lt;li&gt;Low price - less than 1000&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%2Fcdgvm544o263jri48a24.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%2Fcdgvm544o263jri48a24.png" alt="Category" width="800" height="341"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Pivot Tables and Charts
&lt;/h3&gt;

&lt;p&gt;Pivot table and charts helps to summarize the relationship between different categories. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to the &lt;code&gt;cleaned&lt;/code&gt; dataset and select &lt;code&gt;Ctrl+A&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Go to &lt;code&gt;insert&lt;/code&gt; and then select &lt;code&gt;pivot tables&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Several pivot tables were created to analyze the following:&lt;br&gt;
&lt;strong&gt;Top 10 products by discount:&lt;/strong&gt; This shows the relationship between the top products that had the most discount. &lt;br&gt;
Slicers of the product and discount were added to the pivot tables &lt;br&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%2Flrno1gjtr60b3qbijitp.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%2Flrno1gjtr60b3qbijitp.png" alt="ProductvsDiscount" width="798" height="213"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Top 10 products by ratings:&lt;/strong&gt; This entails top products by ratings. &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%2F16lybhllikzlyfditknz.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%2F16lybhllikzlyfditknz.png" alt="ProductsvsRatings" width="623" height="251"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Discount mix:&lt;/strong&gt; This shows the relationship between the discount category and the product &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%2Fb2mosut8k4oy4irb0ykq.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%2Fb2mosut8k4oy4irb0ykq.png" alt="Discount mix" width="482" height="288"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Dashboard
&lt;/h2&gt;

&lt;p&gt;The cleaned and analyzed data was used to develop an interactive dashboard presenting e-commerce product performance and comparisons. The dashboard helps to examine product pricing, discounts, ratings, reviews, and customer engagement.&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%2F6uxxggjovmj5jfplpgqj.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%2F6uxxggjovmj5jfplpgqj.png" alt="Dashboard" width="799" height="388"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding
&lt;/h2&gt;

&lt;p&gt;The average product rating is 3.89/5 which indicates moderate customer satisfaction.&lt;br&gt;
Higher discounts do not necessarily result in higher customer engagement. High-discount products actually have lower average reviews than medium-discount products.&lt;/p&gt;

&lt;h2&gt;
  
  
  Recommendation
&lt;/h2&gt;

&lt;p&gt;Adopt a medium discount category that is around the 20%–40% range, instead of automatically pushing products into 40% discount territory. This will create more engagement from the customers. &lt;/p&gt;

</description>
      <category>analytics</category>
      <category>datascience</category>
    </item>
    <item>
      <title>Git workflow</title>
      <dc:creator>Collins Sigei</dc:creator>
      <pubDate>Sun, 30 Aug 2026 11:53:15 +0000</pubDate>
      <link>https://dev.to/sigei/git-workflow-17ge</link>
      <guid>https://dev.to/sigei/git-workflow-17ge</guid>
      <description>&lt;h1&gt;
  
  
  Git workflow: Working Directory, Staging, Commit and Push
&lt;/h1&gt;

&lt;p&gt;This will demonstrate how to create folders, files, and pushing a data set to Github using Git. &lt;br&gt;
Our data set is: Car Imports Analysis. &lt;/p&gt;

&lt;p&gt;Create a folder in desktop&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Barta@DESKTOP-I97ED39 MINGW64 /c/One Drive/onedrive/desktop
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;mkdir &lt;/span&gt;Car-Imports-Analysis
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create a data folder inside Car-Imports-Analysis&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Barta@DESKTOP-I97ED39 MINGW64 /c/One Drive/onedrive/desktop/Car-Imports-Analysis
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;mkdir &lt;/span&gt;data
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create a file inside Car-Imports-Analysis&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Barta@DESKTOP-I97ED39 MINGW64 /c/One Drive/onedrive/desktop/Car-Imports-Analysis
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;touch &lt;/span&gt;README.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add content to README.md file&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Barta@DESKTOP-I97ED39 MINGW64 /c/One Drive/onedrive/desktop/Car-Imports-Analysis
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"#Car-Imports-Analysis"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;README.md

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Used Nano terminal text editor to write the texts and display in README.md file. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;Barta@DESKTOP-I97ED39 MINGW64 /c/One Drive/onedrive/desktop/Car-Imports-Analysis&lt;br&gt;
$ nano README.md&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Barta@DESKTOP-I97ED39 MINGW64 /c/One Drive/onedrive/desktop/Car-Imports-Analysis&lt;br&gt;
$ nano README.md&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="sb"&gt;`&lt;/span&gt;Barta@DESKTOP-I97ED39 MINGW64 /c/One Drive/onedrive/desktop/Car-Imports-Analysis
&lt;span class="nv"&gt;$ &lt;/span&gt;nano README.md&lt;span class="sb"&gt;`&lt;/span&gt;

Barta@DESKTOP-I97ED39 MINGW64 /c/One Drive/onedrive/desktop/Car-Imports-Analysis
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cat &lt;/span&gt;README.md
&lt;span class="c"&gt;#Car-Imports-Analysis&lt;/span&gt;
&lt;span class="c"&gt;##Project Overview&lt;/span&gt;
This project analyses the Car Imports data records &lt;span class="k"&gt;for &lt;/span&gt;different car models &lt;span class="k"&gt;in &lt;/span&gt;the respective years
&lt;span class="c"&gt;##Tools Used&lt;/span&gt;
- Microsoft Excel
- Github
- Git
- Power Bi

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Initialize the project with Git using git init:&lt;br&gt;
&lt;code&gt;Barta@DESKTOP-I97ED39 MINGW64 /c/One Drive/onedrive/desktop/Car-Imports-Analysis&lt;br&gt;
$ git init&lt;br&gt;
Initialized empty Git repository in C:/One Drive/OneDrive/Desktop/Car-Imports-Analysis/.git/&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Connecting the local project 'Car Imports Analysis' to Github using SSH key:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;
Barta@DESKTOP-I97ED39 MINGW64 /c/One Drive/onedrive/desktop/Car-Imports-Analysis &lt;span class="o"&gt;(&lt;/span&gt;main&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;git remote add origin git@github.com:Collins-Sigei/Car-Import-Analysis-.git

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  The following are the steps towards pushing the project to Github:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Staging the project:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Barta@DESKTOP-I97ED39 MINGW64 /c/One Drive/onedrive/desktop/Car-Imports-Analysis &lt;span class="o"&gt;(&lt;/span&gt;main&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;git add &lt;span class="nb"&gt;.&lt;/span&gt;
warning: &lt;span class="k"&gt;in &lt;/span&gt;the working copy of &lt;span class="s1"&gt;'data/Car Imports Data Records.csv'&lt;/span&gt;, LF will be replaced by CRLF the
 next &lt;span class="nb"&gt;time &lt;/span&gt;Git touches it

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Commit &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;Barta@DESKTOP-I97ED39 MINGW64 /c/One Drive/onedrive/desktop/Car-Imports-Analysis (main)&lt;br&gt;
$ git commit -m "Add Car Imports Analaysis Records Project"&lt;br&gt;
[main (root-commit) 9a2d029] Add Car Imports Analaysis Records Project&lt;br&gt;
 2 files changed, 1009 insertions(+)&lt;br&gt;
 create mode 100644 README.md&lt;br&gt;
 create mode 100644 data/Car Imports Data Records.csv&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Select and copy the SSH key from Github to gitbash&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Connect local project to github&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Barta@DESKTOP-I97ED39 MINGW64 /c/One Drive/onedrive/desktop/Car-Imports-Analysis &lt;span class="o"&gt;(&lt;/span&gt;main&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;git remote add origin git@github.com:Collins-Sigei/Car-Import-Analysis-.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Push the project to Github
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Barta@DESKTOP-I97ED39 MINGW64 /c/One Drive/onedrive/desktop/Car-Imports-Analysis &lt;span class="o"&gt;(&lt;/span&gt;main&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;git push &lt;span class="nt"&gt;-u&lt;/span&gt; origin main
Enter passphrase &lt;span class="k"&gt;for &lt;/span&gt;key &lt;span class="s1"&gt;'C:\Users\Barta/.ssh/id_ed25519'&lt;/span&gt;:
Enumerating objects: 5, &lt;span class="k"&gt;done&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
Counting objects: 100% &lt;span class="o"&gt;(&lt;/span&gt;5/5&lt;span class="o"&gt;)&lt;/span&gt;, &lt;span class="k"&gt;done&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
Delta compression using up to 4 threads
Compressing objects: 100% &lt;span class="o"&gt;(&lt;/span&gt;5/5&lt;span class="o"&gt;)&lt;/span&gt;, &lt;span class="k"&gt;done&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
Writing objects: 100% &lt;span class="o"&gt;(&lt;/span&gt;5/5&lt;span class="o"&gt;)&lt;/span&gt;, 48.25 KiB | 345.00 KiB/s, &lt;span class="k"&gt;done&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
Total 5 &lt;span class="o"&gt;(&lt;/span&gt;delta 0&lt;span class="o"&gt;)&lt;/span&gt;, reused 0 &lt;span class="o"&gt;(&lt;/span&gt;delta 0&lt;span class="o"&gt;)&lt;/span&gt;, pack-reused 0 &lt;span class="o"&gt;(&lt;/span&gt;from 0&lt;span class="o"&gt;)&lt;/span&gt;
To github.com:Collins-Sigei/Car-Import-Analysis-.git
 &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;new branch]      main -&amp;gt; main
branch &lt;span class="s1"&gt;'main'&lt;/span&gt; &lt;span class="nb"&gt;set &lt;/span&gt;up to track &lt;span class="s1"&gt;'origin/main'&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>beginners</category>
      <category>git</category>
      <category>github</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Getting Started with Excel for Data Analytics: From Basics to Data Cleaning</title>
      <dc:creator>Collins Sigei</dc:creator>
      <pubDate>Sun, 30 Aug 2026 11:27:22 +0000</pubDate>
      <link>https://dev.to/sigei/getting-started-with-excel-for-data-analytics-from-basics-to-data-cleaning-2c1c</link>
      <guid>https://dev.to/sigei/getting-started-with-excel-for-data-analytics-from-basics-to-data-cleaning-2c1c</guid>
      <description>&lt;h1&gt;
  
  
  Microsoft Excel
&lt;/h1&gt;

&lt;p&gt;Microsoft Excel is a spreadsheet program used to calculate data, organize information, and perform detailed analysis. It structures data into rows and columns, allowing users to perform mathematical operations and create charts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Excel User Interface
&lt;/h2&gt;

&lt;p&gt;This entails the parts that the user interacts while using Microsoft Excel. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Ribbon - A large panel near the top holding tools categorized across tabs like Home, Insert, Page Layout, and Formulas.&lt;/li&gt;
&lt;li&gt;Quick access toolbar - A small, customizable toolbar at the very top-left corner that holds frequent commands like Save, Undo, and Redo.&lt;/li&gt;
&lt;li&gt;Name box - Located to the left of the formula bar, it displays the cell reference or address of your currently active cell (e.g., A1).&lt;/li&gt;
&lt;li&gt;Formula Bar - A long input bar next to the name box used to type, view, and edit data or formulas inside active cells&lt;/li&gt;
&lt;li&gt;Column Bar - The horizontal gray bar running across the top of the worksheet grid that displays letters (A, B, C, etc.) to identify each vertical column&lt;/li&gt;
&lt;li&gt;Worksheet tab - A small clickable label at the bottom of the Excel window that represents an individual sheet inside your workbook.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhm6y5nr5f5cbzgsku3fn.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhm6y5nr5f5cbzgsku3fn.webp" alt="Excel user interface" width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Data Formatting in Excel
&lt;/h2&gt;

&lt;p&gt;Changing visual presentation of data without altering its actual values.&lt;/p&gt;

&lt;h3&gt;
  
  
  Number Formatting
&lt;/h3&gt;

&lt;p&gt;This involves changing the how the value looks in a cell without altering the actual value stored in the cell. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select the &lt;strong&gt;Home&lt;/strong&gt; tab&lt;/li&gt;
&lt;li&gt;Go to the &lt;strong&gt;Number&lt;/strong&gt; ribbon&lt;/li&gt;
&lt;li&gt;Select from the dropdown options the appropriate format to apply to the data set.&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%2Fn6ifnz6odhtmaisebfvb.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%2Fn6ifnz6odhtmaisebfvb.png" alt="Number Format" width="800" height="295"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Data Sorting
&lt;/h2&gt;

&lt;p&gt;This is arranging the data set in a particular order, either from largest to smallest in numeric values and from A to Z in text form. &lt;/p&gt;

&lt;h2&gt;
  
  
  Data Filtering
&lt;/h2&gt;

&lt;p&gt;This allows specific data to be isolated from a large dataset&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click any single cell inside a dataset&lt;/li&gt;
&lt;li&gt;On the data tab, in the sort and filter section, select filter&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Freezing Panes
&lt;/h2&gt;

&lt;p&gt;This allows the selected column and row to be visible when scrolling through a large dataset. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to the view tab&lt;/li&gt;
&lt;li&gt;Select the row and/or column that should be visible &lt;/li&gt;
&lt;li&gt;Head to windows ribbon under the view tab and click on freeze panes &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%2Fykiqai13go35w91argbr.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%2Fykiqai13go35w91argbr.png" alt="Freeze panes" width="800" height="203"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Data Cleaning
&lt;/h2&gt;

&lt;p&gt;Process of ensuring that the data does not not have incorrect information, duplicates, inconsistencies and errors. &lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1. Remove Duplicates
&lt;/h3&gt;

&lt;p&gt;Expunge the repeated data from the dataset&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select the whole dataset through &lt;code&gt;ctrl+A&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;Go to the Data tab&lt;/li&gt;
&lt;li&gt;Under data tools ribbon, select remove duplicates&lt;/li&gt;
&lt;li&gt;Check the box "My data has headers" and press Ok&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%2F4ytn7hqnsf0d1snesed2.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%2F4ytn7hqnsf0d1snesed2.png" alt="Duplicates" width="799" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2. Formatting
&lt;/h3&gt;

&lt;p&gt;Ensure the respective columns have the correct  format type, that is numerical and text formatting to align with the values in that column.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3. Find and Replace
&lt;/h3&gt;

&lt;p&gt;Use this to remove inconsistencies in each column&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select the specific column and click &lt;code&gt;ctrl+H&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;Input the category that is duplicated and replace with one term to refer the selected category&lt;/li&gt;
&lt;li&gt;Replicate the process in the other columns &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 4. Remove Blanks
&lt;/h3&gt;

&lt;p&gt;Utilizing the find and replace method, remove the blanks from each column and replace with either 'unknown' or 'not provided'&lt;/p&gt;

&lt;h2&gt;
  
  
  Text Functions
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;=UPPER()&lt;/code&gt; Converts the text to uppercase &lt;/li&gt;
&lt;li&gt;
&lt;code&gt;=LOWER()&lt;/code&gt;Converts the text to lowercase&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;=PROPER()&lt;/code&gt; Capitalizes the first letter of each word and makes the rest lowercase&lt;/li&gt;
&lt;/ol&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%2F8mn1haqugb559cxg5pj5.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%2F8mn1haqugb559cxg5pj5.png" alt="Text Function" width="410" height="227"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Aggregate Functions
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;=SUM()&lt;/code&gt; Adds all numbers in a range together &lt;/li&gt;
&lt;li&gt;
&lt;code&gt;=AVERAGE()&lt;/code&gt; Calculate the mean of a range &lt;/li&gt;
&lt;li&gt;
&lt;code&gt;=MEDIAN ()&lt;/code&gt; Finds the number that appears in the middle when arranged in a particular order &lt;/li&gt;
&lt;li&gt;
&lt;code&gt;=MODE()&lt;/code&gt;Find the most repeated value in an ordered set &lt;/li&gt;
&lt;li&gt;
&lt;code&gt;=MAX()&lt;/code&gt; Finds the highest value in a data set&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;=MIN()&lt;/code&gt; Finds the lowest value in a data set&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Date Functions
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;=Today()&lt;/code&gt; Returns the current date &lt;/li&gt;
&lt;li&gt;
&lt;code&gt;=Now()&lt;/code&gt; Returns both the current date and time &lt;/li&gt;
&lt;li&gt;
&lt;code&gt;=Year()&lt;/code&gt;Extracts the year from a given date &lt;/li&gt;
&lt;li&gt;
&lt;code&gt;=Month()&lt;/code&gt; Extracts the month from a given date &lt;/li&gt;
&lt;li&gt;
&lt;code&gt;=Day()&lt;/code&gt; Extracts the day from a given date &lt;/li&gt;
&lt;li&gt;
&lt;code&gt;=Datedif()&lt;/code&gt; Calculates the difference between two dates &lt;/li&gt;
&lt;/ol&gt;

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