<?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: Victoria Ndei</title>
    <description>The latest articles on DEV Community by Victoria Ndei (@victoria_ndei_07224d0b8db).</description>
    <link>https://dev.to/victoria_ndei_07224d0b8db</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%2F4071801%2Ffa0c0c1c-dcde-437a-b875-bc329aff08df.png</url>
      <title>DEV Community: Victoria Ndei</title>
      <link>https://dev.to/victoria_ndei_07224d0b8db</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/victoria_ndei_07224d0b8db"/>
    <language>en</language>
    <item>
      <title>Data Modelling, Relationships &amp; Joins</title>
      <dc:creator>Victoria Ndei</dc:creator>
      <pubDate>Mon, 14 Sep 2026 07:49:58 +0000</pubDate>
      <link>https://dev.to/victoria_ndei_07224d0b8db/data-modelling-relationships-joins-45cb</link>
      <guid>https://dev.to/victoria_ndei_07224d0b8db/data-modelling-relationships-joins-45cb</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Power BI helps organizations turn raw data into meaningful insights for better decision-making. A well-designed data model is essential for accurate analysis, efficient DAX calculations, and good report performance. This article explains &lt;strong&gt;data modelling, fact and dimension tables, relationships, filter directions, and Power Query joins&lt;/strong&gt;, using practical examples to demonstrate how these concepts are applied when building an effective Power BI solution.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Data Modelling
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is data modelling?
&lt;/h3&gt;

&lt;p&gt;Data modelling in Power BI is the process of organizing data from one or more sources into tables and defining the relationships between those tables so that the data can be analyzed efficiently.&lt;/p&gt;

&lt;p&gt;A well-designed data model provides the foundation for accurate Power BI reports and dashboards. Instead of keeping all information in one large table, you can separate related information into logical tables and connect them using keys.&lt;/p&gt;

&lt;p&gt;For example, in an agricultural business, crop production records could be stored in a central fact table while information about farmers, crops, locations, and seasons is stored in separate dimension tables.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A good data model is important because it:&lt;/li&gt;
&lt;li&gt;Improves reporting and analytical accuracy.&lt;/li&gt;
&lt;li&gt;Makes DAX calculations easier to write and understand.&lt;/li&gt;
&lt;li&gt;Improves Power BI performance by reducing unnecessary data duplication.&lt;/li&gt;
&lt;li&gt;Makes models easier to scale when new data is added.&lt;/li&gt;
&lt;li&gt;Improves maintainability because each table has a clear purpose.&lt;/li&gt;
&lt;li&gt;Makes relationships and filter propagation easier to understand.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are three common approaches to structuring data: &lt;strong&gt;Flat Table, Star Schema, and Snowflake Schema&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  1.2 Flat Table
&lt;/h3&gt;

&lt;p&gt;A flat table stores all information in a single table. Instead of separating customers, products, locations, and transactions into different tables, all the attributes and business-event information are stored together.&lt;/p&gt;

&lt;p&gt;Structure&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%2F4awambfd5kv2jeca5qfb.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%2F4awambfd5kv2jeca5qfb.png" alt="flat table" width="395" height="283"&gt;&lt;/a&gt;&lt;br&gt;
For example, an agricultural dataset could look like this:&lt;/p&gt;

&lt;p&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%2Fufwq65g2xbw9g4ukdgb8.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%2Fufwq65g2xbw9g4ukdgb8.png" alt="flat table" width="800" height="171"&gt;&lt;/a&gt;&lt;br&gt;
Illustration&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%2Fuf2oujvh22xp49lrw0ud.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%2Fuf2oujvh22xp49lrw0ud.png" alt="flat table" width="800" height="400"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Figure 1.1- shows a flat table&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Advantages&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Simple to understand.&lt;/li&gt;
&lt;li&gt;Easy to import and begin analyzing.&lt;/li&gt;
&lt;li&gt;Requires few or no relationships.&lt;/li&gt;
&lt;li&gt;Suitable for small datasets and simple reports.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Disadvantages&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creates data redundancy because descriptive information is repeated.&lt;/li&gt;
&lt;li&gt;Can make the dataset unnecessarily large.&lt;/li&gt;
&lt;li&gt;Changes to descriptive information may need to be repeated across many rows.&lt;/li&gt;
&lt;li&gt;Can make complex DAX calculations and modelling more difficult.&lt;/li&gt;
&lt;li&gt;Less scalable as the dataset grows.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;When is it appropriate?&lt;/strong&gt;&lt;br&gt;
A flat table can be appropriate when working with a small, simple dataset, especially for basic analysis where the data does not need to be reused across multiple business processes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Power BI implications&lt;/strong&gt;&lt;br&gt;
Flat tables are initially simple, but large flat tables can contain substantial redundancy. This can increase model size and make the model harder to maintain as more business requirements are introduced.&lt;/p&gt;
&lt;h3&gt;
  
  
  1.3 Star Schema
&lt;/h3&gt;

&lt;p&gt;A star schema separates the data into a central fact table and several surrounding dimension tables.&lt;br&gt;
The fact table contains measurable business events, while dimension tables contain descriptive information used to analyze those events.&lt;/p&gt;

&lt;p&gt;Structure&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%2F2pm2lq2i3uenwi6523u3.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%2F2pm2lq2i3uenwi6523u3.png" alt="star schema" width="795" height="567"&gt;&lt;/a&gt;&lt;br&gt;
For the agricultural example:&lt;br&gt;
&lt;strong&gt;Advantages&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Excellent for Power BI reporting and dashboards.&lt;/li&gt;
&lt;li&gt;Reduces data redundancy.&lt;/li&gt;
&lt;li&gt;Makes DAX measures easier to understand.&lt;/li&gt;
&lt;li&gt;Relationships are generally straightforward.&lt;/li&gt;
&lt;li&gt;Supports efficient filter propagation.&lt;/li&gt;
&lt;li&gt;Easier to maintain and extend.&lt;/li&gt;
&lt;li&gt;Provides a clear and intuitive model structure.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Disadvantages&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Requires more planning than a flat table.&lt;/li&gt;
&lt;li&gt;Requires relationships between tables.&lt;/li&gt;
&lt;li&gt;Users need to understand facts, dimensions, and keys.&lt;/li&gt;
&lt;li&gt;Creating the model can initially take more time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;When is it appropriate?&lt;/strong&gt;&lt;br&gt;
Star schemas are particularly appropriate for business intelligence, reporting, and analytical systems where users need to analyze measures by different dimensions.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Total Profit by Crop, County, Farmer, and Season

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

&lt;/div&gt;



&lt;p&gt;can be easily analyzed using a star schema.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Power BI implications&lt;/strong&gt;&lt;br&gt;
Star schemas are generally preferred in Power BI because they provide simple relationship paths, efficient filtering, and a clear separation between descriptive attributes and measurable events.&lt;/p&gt;
&lt;h3&gt;
  
  
  1.4 Snowflake Schema
&lt;/h3&gt;

&lt;p&gt;A snowflake schema is an extension of the star schema in which dimension tables are further divided into related tables.&lt;br&gt;
For example, instead of storing the county and region directly inside DimLocation, location information could be separated:&lt;br&gt;
&lt;strong&gt;Advantages&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reduces repeated information within dimensions.&lt;/li&gt;
&lt;li&gt;Can be useful when dimensions contain complex hierarchies.&lt;/li&gt;
&lt;li&gt;Can provide greater control over highly structured data.&lt;/li&gt;
&lt;li&gt;May reduce redundancy in some large and complex datasets.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Disadvantages&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creates more tables.&lt;/li&gt;
&lt;li&gt;Creates more relationships.&lt;/li&gt;
&lt;li&gt;Makes filter propagation more complicated.&lt;/li&gt;
&lt;li&gt;Can make DAX and report development less intuitive.&lt;/li&gt;
&lt;li&gt;Increases model complexity.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;When is it appropriate?&lt;/strong&gt;&lt;br&gt;
A snowflake schema may be appropriate when dimensions are large, hierarchical, or naturally normalized.&lt;/p&gt;

&lt;p&gt;For example, a multinational agricultural organization could have:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Country → Region → County → Location

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

&lt;/div&gt;



&lt;p&gt;and maintaining these levels separately may be useful.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Power BI implications&lt;/strong&gt;&lt;br&gt;
Although a snowflake schema can reduce redundancy, it introduces additional relationships and filter paths. For many Power BI analytical models, a well-designed star schema is simpler and easier to work with.&lt;/p&gt;
&lt;h2&gt;
  
  
  2 Fact Table and Dimensions
&lt;/h2&gt;

&lt;p&gt;A well-designed Power BI data model usually separates business events from the descriptive information used to analyze those events. This is where fact tables and dimension tables become important.&lt;/p&gt;
&lt;h3&gt;
  
  
  Fact Tables
&lt;/h3&gt;

&lt;p&gt;A fact table stores measurable business events or transactions. It normally contains numeric values that can be aggregated, together with foreign keys that connect the facts to descriptive dimension tables.&lt;br&gt;
The table contains business events such as sales transactions. Quantity and &lt;code&gt;SalesAmount&lt;/code&gt; are measures that can be aggregated, while &lt;code&gt;CustomerID&lt;/code&gt;, &lt;code&gt;ProductID&lt;/code&gt;, and &lt;code&gt;DateID&lt;/code&gt; identify the dimensions associated with each sale.&lt;/p&gt;
&lt;h3&gt;
  
  
  Dimension Tables
&lt;/h3&gt;

&lt;p&gt;A dimension table contains descriptive information about the entities involved in business events. Dimensions provide the context used to analyze facts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Examples include&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;DimCustomer&lt;/code&gt; – customer name, gender, segment, and location.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;DimProduct&lt;/code&gt; – product name, category, brand, and price.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;DimDate&lt;/code&gt; – date, month, quarter, and year.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;DimLocation&lt;/code&gt; – county, region, town, or country.
For example:
&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%2Fqpbo554gt9ojfomlxlg5.png" alt="dimension table" width="730" height="145"&gt;
The distinction can therefore be summarized as:&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%2Fzk91cduqazuog64gugt6.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%2Fzk91cduqazuog64gugt6.png" alt="Summary" width="765" height="200"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Understanding Grain
&lt;/h2&gt;

&lt;p&gt;One of the most important concepts when designing a fact table is its grain, or granularity.&lt;br&gt;
The grain defines exactly what one row in the fact table represents.&lt;br&gt;
For example, if the grain of FactSales is:&lt;br&gt;
&lt;code&gt;"One row represents one product sold in one sales transaction."&lt;/code&gt;&lt;br&gt;
then every row should represent one product line within a transaction.&lt;br&gt;
Clearly defining the grain prevents problems such as duplicated transactions and incorrect calculations.&lt;/p&gt;
&lt;h3&gt;
  
  
  3. Relationships in Power BI
&lt;/h3&gt;

&lt;p&gt;A relationship connects tables in a Power BI data model. Relationships are necessary because business data is often distributed across multiple tables rather than stored in one large table.&lt;br&gt;
For example, &lt;code&gt;FactSales&lt;/code&gt; may contain &lt;code&gt;CustomerID&lt;/code&gt;, while &lt;code&gt;DimCustomer&lt;/code&gt; stores customer names and customer segments.&lt;br&gt;
This relationship lets Power BI connect the two tables and use customer information when analyzing sales.&lt;/p&gt;
&lt;h3&gt;
  
  
  Primary Keys and Foreign Keys
&lt;/h3&gt;

&lt;p&gt;A primary key uniquely identifies a record in a table.&lt;br&gt;
For example, &lt;code&gt;CustomerID&lt;/code&gt; can be the primary key in &lt;code&gt;DimCustomer&lt;/code&gt;:&lt;br&gt;
Each &lt;code&gt;CustomerID&lt;/code&gt; should occur only once.&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%2F20ajfab1ze5udct1iqlx.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%2F20ajfab1ze5udct1iqlx.png" alt="primary key" width="744" height="145"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The same &lt;code&gt;CustomerID&lt;/code&gt; can appear multiple times in &lt;code&gt;FactSales&lt;/code&gt; because one customer can make many purchases:&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%2Fm9497t0o9rddz3jprs6j.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%2Fm9497t0o9rddz3jprs6j.png" alt="foreign key" width="727" height="152"&gt;&lt;/a&gt;&lt;br&gt;
Each &lt;code&gt;CustomerID&lt;/code&gt; should occur only once.&lt;br&gt;
A one-to-many relationship means one record in one table can relate to many records in another table.&lt;br&gt;
For example:&lt;/p&gt;

&lt;p&gt;|DimCustomer |                |FactSales|&lt;/p&gt;

&lt;p&gt;|CustomerID   |               | CustomerID|&lt;br&gt;
    C001                        C001&lt;br&gt;
                                C001&lt;br&gt;
                               C001&lt;/p&gt;

&lt;p&gt;DimCustomer[CustomerID] contains unique values, while FactSales[CustomerID] can contain repeated values.&lt;/p&gt;

&lt;p&gt;This is the most common relationship type in a star schema.&lt;br&gt;
Use it when a dimension contains unique entities and a fact table contains multiple business events associated with those entities.&lt;/p&gt;
&lt;h3&gt;
  
  
  3.2 One-to-One Relationship (1:1)
&lt;/h3&gt;

&lt;p&gt;A one-to-one relationship means that each record in one table corresponds to only one record in another table.&lt;br&gt;
For example:&lt;br&gt;
EmployeeID     EmployeeDetails&lt;br&gt;
E001     ────&amp;gt; E001&lt;br&gt;
E002     ────&amp;gt; E002&lt;br&gt;
E003     ────&amp;gt; E003&lt;/p&gt;

&lt;p&gt;This relationship may be appropriate when information about the same entity has intentionally been split into two tables.&lt;br&gt;
However, a 1:1 relationship should not normally be used simply because two tables can be connected by a column. If the tables represent the same entity and there is no strong modelling reason to separate them, combining them may be simpler.&lt;/p&gt;
&lt;h3&gt;
  
  
  3.3 Many-to-Many Relationship (:)
&lt;/h3&gt;

&lt;p&gt;A many-to-many relationship occurs when multiple records in one table can be related to multiple records in another table.&lt;br&gt;
For example, students can enrol in multiple courses, while each course can have multiple students.&lt;/p&gt;

&lt;p&gt;Students                    Courses&lt;/p&gt;

&lt;p&gt;Student A  ───────────────&amp;gt; Course 1&lt;br&gt;
Student A  ───────────────&amp;gt; Course 2&lt;br&gt;
Student B  ───────────────&amp;gt; Course 1&lt;br&gt;
Student C  ───────────────&amp;gt; Course 2&lt;/p&gt;

&lt;p&gt;In a proper dimensional model, a bridge or factless fact table can often be introduced to resolve this situation.&lt;br&gt;
Many-to-many relationships should be used carefully because they can make filter&lt;br&gt;
propagation and DAX calculations more difficult to understand.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cardinality&lt;/strong&gt;&lt;br&gt;
Cardinality describes how records in two related tables correspond to each other.&lt;br&gt;
The main cardinalities in Power BI are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1:* — One-to-Many&lt;/li&gt;
&lt;li&gt;1:1 — One-to-One&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;:&lt;/em&gt; — Many-to-Many
For most analytical models, 1:* relationships are preferred because they provide a clear dimension-to-fact structure.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Referential Integrity&lt;/strong&gt;&lt;br&gt;
Referential integrity means that foreign-key values should correspond to valid primary-key values in the related table.&lt;br&gt;
For example, if &lt;code&gt;FactSales&lt;/code&gt; contains:&lt;/p&gt;

&lt;p&gt;CustomerID = C005&lt;/p&gt;

&lt;p&gt;then C005 should normally exist in DimCustomer.&lt;br&gt;
Missing dimension records can create unmatched or blank members in reports and may indicate data-quality problems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Active and Inactive Relationships&lt;/strong&gt;&lt;br&gt;
Power BI can have both active and inactive relationships.&lt;br&gt;
An active relationship is used automatically when filters move between related tables.&lt;br&gt;
An inactive relationship is not automatically used but can be activated in a DAX calculation when required.&lt;br&gt;
A common example is a sales table containing multiple date columns:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FactSales
---------
OrderDate
ShipDate
DeliveryDate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A date dimension may therefore have multiple relationships to the fact table. Only one can normally be active for the same pair of tables, while others can remain inactive and be activated in specific calculations.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Filter Direction
&lt;/h2&gt;

&lt;p&gt;Relationships do more than connect tables. They also determine how filters propagate through the model.&lt;/p&gt;

&lt;h4&gt;
  
  
  Single-Direction Filtering
&lt;/h4&gt;

&lt;p&gt;In a typical star schema, filtering flows from the dimension table to the fact table.&lt;br&gt;
For example:&lt;/p&gt;

&lt;p&gt;DimProduct&lt;br&gt;
    │&lt;br&gt;
    │ Filter&lt;br&gt;
    ▼&lt;br&gt;
FactSales&lt;/p&gt;

&lt;p&gt;Suppose DimProduct contains:&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%2Fzo36xir10wtm2kiv5dph.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%2Fzo36xir10wtm2kiv5dph.png" alt="single filter" width="589" height="115"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If a user selects Electronics in a Power BI report, the filter is passed from &lt;code&gt;DimProduct to FactSales.&lt;/code&gt;&lt;br&gt;
Power BI then calculates sales using only the transactions associated with products in the Electronics category.&lt;br&gt;
This is the preferred direction for many star-schema models because it is predictable and easy to understand.&lt;/p&gt;
&lt;h4&gt;
  
  
  Bidirectional Filtering
&lt;/h4&gt;

&lt;p&gt;With bidirectional filtering, filters can move in both directions:&lt;br&gt;
DimProduct&lt;br&gt;
    ↕&lt;br&gt;
FactSales&lt;/p&gt;

&lt;p&gt;Although bidirectional filtering can solve some modelling scenarios, it should be used carefully.&lt;br&gt;
It can create:&lt;/p&gt;
&lt;h4&gt;
  
  
  Ambiguous filter paths
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Unexpected filtering behaviour&lt;/li&gt;
&lt;li&gt;More complex DAX calculations&lt;/li&gt;
&lt;li&gt;Performance problems in complex models&lt;/li&gt;
&lt;li&gt;Difficulty understanding why a visual is being filtered&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, if several dimension tables can reach each other through multiple paths, Power BI may have more than one possible route through which a filter can travel.&lt;br&gt;
Therefore, single-direction filtering from dimensions to facts is generally preferable in a standard star schema.&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%2Fblkdkjhagp3acix9tq7x.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%2Fblkdkjhagp3acix9tq7x.png" alt="filter propogation" width="573" height="210"&gt;&lt;/a&gt;&lt;br&gt;
_Figure 4.1 single-direction filtering versus bidirectional filtering between DimProduct and FactSales _&lt;/p&gt;
&lt;h2&gt;
  
  
  5. Joins in Power Query
&lt;/h2&gt;

&lt;p&gt;Relationships are not the only way to work with multiple tables. Power Query provides Merge Queries, which allow tables to be joined during the data transformation stage.&lt;br&gt;
A join matches records from two tables using one or more common columns.&lt;br&gt;
Consider these two 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%2F8822pz10m34az15rvcb1.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%2F8822pz10m34az15rvcb1.png" alt="customers" width="637" height="113"&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%2Fm4znew0w8fgr0004ci2g.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%2Fm4znew0w8fgr0004ci2g.png" alt="orders" width="568" height="177"&gt;&lt;/a&gt;&lt;br&gt;
The tables can be merged using CustomerID.&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%2Fdgfd5toxymt2v75d807p.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%2Fdgfd5toxymt2v75d807p.png" alt="join types" width="590" height="152"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  5.1 Left Outer Join
&lt;/h3&gt;

&lt;p&gt;A Left Outer Join keeps every record from the left table and matching records from the right table.&lt;br&gt;
If Customers is the left 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%2Fwil74tre3irvbvjvu63z.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%2Fwil74tre3irvbvjvu63z.png" alt="left outer join" width="590" height="152"&gt;&lt;/a&gt;&lt;br&gt;
Carol remains in the result even though she has no matching order.&lt;br&gt;
Use case: Find all customers and show their orders where available.&lt;/p&gt;
&lt;h2&gt;
  
  
  5.2 Right Outer Join
&lt;/h2&gt;

&lt;p&gt;A Right Outer Join keeps every record from the right table and matching records from the left 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%2Ft56eq95xfrsze6iilhof.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%2Ft56eq95xfrsze6iilhof.png" alt="right outer join" width="576" height="141"&gt;&lt;/a&gt;&lt;br&gt;
Order O004 remains even though customer C004 does not exist in the Customers table.&lt;br&gt;
Use case: Keep all orders and add customer information when available.&lt;/p&gt;
&lt;h3&gt;
  
  
  5.3 Full Outer Join
&lt;/h3&gt;

&lt;p&gt;A Full Outer Join keeps all records from both tables, whether or not they have a match.&lt;br&gt;
The result would include:&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%2Fxp82vojqyrvtrzca0orx.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%2Fxp82vojqyrvtrzca0orx.png" alt="full outer join" width="575" height="141"&gt;&lt;/a&gt;&lt;br&gt;
This is useful when you need to identify both:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Customers without orders&lt;/li&gt;
&lt;li&gt;Orders without valid customers
It can therefore be particularly useful for data-quality analysis.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  5.4 Inner Join
&lt;/h2&gt;

&lt;p&gt;An Inner Join keeps only records that exist in both tables.&lt;br&gt;
Customers without orders and orders without matching customers are excluded.&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%2Fc90vtk7677ct9kcv9ii3.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%2Fc90vtk7677ct9kcv9ii3.png" alt="Inner join" width="569" height="118"&gt;&lt;/a&gt;&lt;br&gt;
Use case: Analyse only orders associated with valid customers.&lt;/p&gt;
&lt;h3&gt;
  
  
  5.5 Left Anti Join
&lt;/h3&gt;

&lt;p&gt;A Left Anti Join returns records that exist in the left table but have no matching record in the right table.&lt;br&gt;
Using Customers as the left 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%2Fgtofakf7h8j2409aoldv.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%2Fgtofakf7h8j2409aoldv.png" alt="left anti join" width="563" height="57"&gt;&lt;/a&gt;&lt;br&gt;
This identifies customers who have not placed an order.&lt;br&gt;
Use case: Finding inactive customers or records missing from another dataset.&lt;/p&gt;
&lt;h3&gt;
  
  
  5.6 Right Anti Join
&lt;/h3&gt;

&lt;p&gt;A Right Anti Join returns records that exist in the right table but have no matching record in the left table.&lt;br&gt;
Using Orders as 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%2F9pn1lo1qfrq6a9hqtv4q.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%2F9pn1lo1qfrq6a9hqtv4q.png" alt="right anti join" width="568" height="55"&gt;&lt;/a&gt;&lt;br&gt;
This identifies orders whose customer does not exist in the Customers table.&lt;br&gt;
Use case: Detecting invalid foreign keys or data-quality issues&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%2F8e99hflgttlv626dtl87.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%2F8e99hflgttlv626dtl87.png" alt="joint summary" width="737" height="253"&gt;&lt;/a&gt;&lt;br&gt;
_ Figure 5.3 -illustrates the summary of different joins _&lt;/p&gt;
&lt;h2&gt;
  
  
  6. Power Query Joins vs Power BI Relationships
&lt;/h2&gt;

&lt;p&gt;Although both joins and relationships connect tables, they serve different purposes and operate at different stages of the Power BI workflow.&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%2Fl0vm05ro0vrehz5a53fb.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%2Fl0vm05ro0vrehz5a53fb.png" alt="power  query vs power bi" width="666" height="229"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Power Query Merge
&lt;/h3&gt;

&lt;p&gt;A Merge Query is a data-transformation operation.&lt;br&gt;
It occurs before the data is loaded into the Power BI model.&lt;br&gt;
For example:&lt;br&gt;
Customers&lt;br&gt;
   +&lt;br&gt;
Orders&lt;br&gt;
   ↓&lt;br&gt;
Power Query Merge&lt;br&gt;
   ↓&lt;br&gt;
Combined Table&lt;/p&gt;

&lt;p&gt;The merge can bring columns from one table into another.&lt;br&gt;
For example, an Orders table could be merged with Customers to add:&lt;br&gt;
&lt;code&gt;CustomerName&lt;br&gt;
CustomerSegment&lt;br&gt;
County&lt;/code&gt;&lt;br&gt;
The result is physically represented as a combined query/table when loaded into the model.&lt;/p&gt;
&lt;h3&gt;
  
  
  Power BI Relationship
&lt;/h3&gt;

&lt;p&gt;A relationship is created after the tables are loaded into the data model.&lt;br&gt;
For example:&lt;br&gt;
DimCustomer&lt;br&gt;
     │&lt;br&gt;
     │ 1:*&lt;br&gt;
     ▼&lt;br&gt;
FactSales&lt;/p&gt;

&lt;p&gt;The relationship does not physically combine the tables.&lt;br&gt;
Instead, it tells Power BI how the tables are connected so that filters and calculations can work across them.&lt;/p&gt;
&lt;h3&gt;
  
  
  Key Difference
&lt;/h3&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%2Fzw79rnbr21gefjpa4fon.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%2Fzw79rnbr21gefjpa4fon.png" alt="key differences" width="647" height="216"&gt;&lt;/a&gt;&lt;br&gt;
When Should You Use a Merge?&lt;br&gt;
Tables, Relationships, Filter Direction and Joins in Power BI&lt;br&gt;
A merge is appropriate when the columns are genuinely required in the same table.&lt;br&gt;
For example, if a source system stores product information separately but a transformation requires the product category to be included in a staging table, merging may be appropriate.&lt;/p&gt;
&lt;h3&gt;
  
  
  When Should You Use a Relationship?
&lt;/h3&gt;

&lt;p&gt;A relationship is preferable when the tables represent different business entities.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;DimProduct&lt;br&gt;
     │&lt;br&gt;
     ▼&lt;br&gt;
FactSales&lt;/p&gt;

&lt;p&gt;There is usually no need to copy product name, category, and brand into every sales transaction.&lt;br&gt;
Keeping them in DimProduct reduces data redundancy and preserves a clean dimensional model.&lt;/p&gt;
&lt;h3&gt;
  
  
  Problems with Excessive Merging
&lt;/h3&gt;

&lt;p&gt;Excessive merging can create a very wide table containing repeated descriptive information.&lt;br&gt;
For example, instead of:&lt;br&gt;
&lt;code&gt;DimProduct&lt;br&gt;
ProductID&lt;br&gt;
ProductName&lt;br&gt;
Category&lt;br&gt;
Brand&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
and:&lt;br&gt;
&lt;code&gt;&lt;br&gt;
FactSales&lt;br&gt;
SalesID&lt;br&gt;
ProductID&lt;br&gt;
Quantity&lt;br&gt;
Quantity&lt;br&gt;
SalesAmount&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
a merge could produce:&lt;br&gt;
&lt;code&gt;&lt;br&gt;
SalesID&lt;br&gt;
ProductID&lt;br&gt;
ProductName&lt;br&gt;
Category&lt;br&gt;
Brand&lt;br&gt;
Quantity&lt;br&gt;
SalesAmount&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
If thousands or millions of transactions contain the same product information, the data becomes unnecessarily repetitive.&lt;br&gt;
This can increase model size, reduce readability, and make maintenance more difficult.&lt;br&gt;
For business intelligence solutions, keeping fact and dimension tables separate is often preferable because it supports a cleaner and more scalable model.&lt;/p&gt;
&lt;h2&gt;
  
  
  7. Recommended Power BI Model
&lt;/h2&gt;

&lt;p&gt;For a typical business intelligence project, I would recommend a star schema rather than a flat table or a highly normalized snowflake schema.&lt;br&gt;
A typical model could look like this:&lt;br&gt;
graph TD&lt;br&gt;
`&lt;br&gt;
    Customer["DimCustomer"]&lt;br&gt;
    Product["DimProduct"]&lt;br&gt;
    Date["DimDate"]&lt;br&gt;
    Location["DimLocation"]&lt;br&gt;
    Sales["FactSales"]&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Customer --&amp;gt;|1:*| Sales
Product --&amp;gt;|1:*| Sales
Date --&amp;gt;|1:*| Sales
Location --&amp;gt;|1:*| Sales
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;`&lt;br&gt;
The fact table contains measurable business events, while dimensions contain descriptive attributes.&lt;br&gt;
Why Choose a Star Schema?&lt;/p&gt;
&lt;h3&gt;
  
  
  1. Performance
&lt;/h3&gt;

&lt;p&gt;Star schemas generally provide an efficient structure for analytical queries because dimensions are separated from large transaction tables and relationships are straightforward.&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Simpler DAX
&lt;/h3&gt;

&lt;p&gt;Clear relationships make DAX calculations easier to understand.&lt;br&gt;
For example, a measure such as:&lt;br&gt;
&lt;code&gt;Total Sales = SUM(FactSales[SalesAmount])&lt;/code&gt;&lt;br&gt;
can be analyzed by product, customer, location, or date through the relationships in the model.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Model Readability
A star schema is visually easy to understand. Developers and report users can quickly identify:&lt;/li&gt;
&lt;li&gt;Which table contains transactions&lt;/li&gt;
&lt;li&gt;Which tables contain descriptive attributes&lt;/li&gt;
&lt;li&gt;How the tables are connected
###4. Scalability
As the business grows, additional dimensions can be added without redesigning the entire model.
For example:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;             DimCustomer
                  |
DimProduct — FactSales — DimLocation
                  |
               DimDate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;A future DimSalesperson or DimPromotion could also be connected to the fact table.&lt;/p&gt;
&lt;h3&gt;
  
  
  5. Reduced Redundancy
&lt;/h3&gt;

&lt;p&gt;Product and customer information does not need to be repeated for every transaction.&lt;br&gt;
Instead of storing:&lt;/p&gt;

&lt;p&gt;Laptop | Electronics | HP | 500 times&lt;/p&gt;

&lt;p&gt;the information can be stored once in DimProduct and referenced through ProductID.&lt;/p&gt;
&lt;h3&gt;
  
  
  6. Maintainability
&lt;/h3&gt;

&lt;p&gt;If a product category changes, it can be updated in the dimension rather than repeatedly changing the same information across thousands of fact records.&lt;/p&gt;
&lt;h3&gt;
  
  
  7. Easier Reporting
&lt;/h3&gt;

&lt;p&gt;Report users can drag attributes such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DimProduct[Category]
DimDate[Year]
DimLocation[County]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
`&lt;br&gt;
and measures such as:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;[Total Sales]&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;into visualizations without needing to understand complex joins.&lt;/p&gt;

&lt;h3&gt;
  
  
  Recommended Relationships
&lt;/h3&gt;

&lt;p&gt;For a standard star schema, I would normally implement:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One-to-many &lt;code&gt;(1:*) &lt;/code&gt;relationships&lt;/li&gt;
&lt;li&gt;Dimension table on the 1 side&lt;/li&gt;
&lt;li&gt;Fact table on the &lt;code&gt;*&lt;/code&gt;side&lt;/li&gt;
&lt;li&gt;Single-direction filtering from dimensions to facts&lt;/li&gt;
&lt;li&gt;Unique primary keys in dimension tables&lt;/li&gt;
&lt;li&gt;Matching foreign keys in fact tables&lt;/li&gt;
&lt;li&gt;Clearly defined fact-table grain&lt;/li&gt;
&lt;li&gt;Active relationships for the main analytical paths
Many-to-many relationships should only be introduced when the business requirement genuinely requires them, and bridge tables should be considered where appropriate.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Star Schema vs Flat Table vs Snowflake Schema
&lt;/h3&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%2Fysge99llhnl3egwb50bp.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%2Fysge99llhnl3egwb50bp.png" alt="differences" width="738" height="361"&gt;&lt;/a&gt;&lt;br&gt;
A flat table can be useful for small or simple datasets, but it can become inefficient and difficult to maintain as the amount of data grows.&lt;br&gt;
A snowflake schema normalizes dimensions into additional related tables. This can reduce redundancy further, but it introduces additional relationships and complexity.&lt;br&gt;
For most Power BI analytical models, the star schema provides the best balance between performance, simplicity, scalability, and maintainability.&lt;/p&gt;

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

&lt;p&gt;My preferred Power BI model would therefore be a star schema with a central fact table surrounded by dimension tables. I would use one-to-many relationships wherever possible, with dimensions on the 1 side and facts on the * side.&lt;br&gt;
I would also use single-direction filter propagation from dimensions to facts unless there is a specific modelling requirement for bidirectional filtering.&lt;br&gt;
This approach produces a model that is easier to understand, easier to maintain, and easier to use when developing DAX measures and reports. More importantly, it separates business events from descriptive context, allowing the model to scale as the organization's reporting requirements grow.&lt;/p&gt;

&lt;p&gt;A good Power BI model is therefore not simply about connecting tables. It is about designing those connections so that the resulting model is accurate, performant, understandable, and useful for business analysis.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>tutorial</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Building an Interactive Excel Dashboard For E-commerce for Product Analysis: A Case Study for Jumia Products</title>
      <dc:creator>Victoria Ndei</dc:creator>
      <pubDate>Sun, 06 Sep 2026 19:32:17 +0000</pubDate>
      <link>https://dev.to/victoria_ndei_07224d0b8db/building-an-interactive-excel-dashboard-for-e-commerce-for-product-analysis-a-case-study-for-jumia-2k0i</link>
      <guid>https://dev.to/victoria_ndei_07224d0b8db/building-an-interactive-excel-dashboard-for-e-commerce-for-product-analysis-a-case-study-for-jumia-2k0i</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;E-commerce platforms generate large amounts of product information that can help explain pricing strategies, customer engagement, and product performance.&lt;/p&gt;

&lt;p&gt;For this project, I analyzed a dataset of products from Jumia, an e-commerce marketplace, using Microsoft Excel. The goal was to transform raw product data into a cleaned dataset, perform descriptive and relationship analysis, and develop an interactive dashboard that communicates the most important findings.&lt;br&gt;
The analysis focused on four major areas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Product pricing&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Discounts&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Customer reviews&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Product rating&lt;br&gt;
The final result was an Excel-based analytical dashboard designed to help sellers identify high-performing products, products requiring attention, and potential pricing and marketing strategies.&lt;/p&gt;
&lt;h2&gt;
  
  
  Project Objectives
&lt;/h2&gt;

&lt;p&gt;The goal of this project is to create an interactive Excel dashboard that provides insights into the&lt;br&gt;
performance of products listed on Jumia and is capable of answering the following questions:&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is the average product price?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is the average discount?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Which products have the highest ratings?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Which products have the highest number of reviews?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Do higher discounts result in higher customer engagement?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Are highly rated products more expensive?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Which products are performing well?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Which products may require improved pricing or product strategies?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;What recommendations can be made to Jumia sellers?&lt;/p&gt;
&lt;h2&gt;
  
  
  Dataset Description
&lt;/h2&gt;

&lt;p&gt;The dataset contains information about Jumia products&lt;br&gt;
using the following fields:&lt;br&gt;
&lt;strong&gt;Product&lt;/strong&gt;:product name&lt;br&gt;
&lt;strong&gt;Current Price&lt;/strong&gt;:Current selling price&lt;br&gt;
&lt;strong&gt;Old Price&lt;/strong&gt;:Original/listed price&lt;br&gt;
&lt;strong&gt;Discount&lt;/strong&gt;:Percentage discount&lt;br&gt;
&lt;strong&gt;Review&lt;/strong&gt;:Number of customer reviews&lt;br&gt;
&lt;strong&gt;Rating&lt;/strong&gt;:Customer rating out of 5&lt;br&gt;
The original dataset contained 115 records.&lt;br&gt;
After data cleaning and duplicate removal, the final dataset contained 112 products&lt;/p&gt;
&lt;h3&gt;
  
  
  Raw Data
&lt;/h3&gt;

&lt;p&gt;The first step was to inspect the raw dataset before making any changes.&lt;/p&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%2Fu4y16uxtrmkpfe22e24t.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%2Fu4y16uxtrmkpfe22e24t.png" alt="Raw data" width="800" height="298"&gt;&lt;/a&gt;&lt;br&gt;
The initial audit looked for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Missing values&lt;/li&gt;
&lt;li&gt;Duplicate records&lt;/li&gt;
&lt;li&gt;Incorrect data types&lt;/li&gt;
&lt;li&gt;Negative review counts&lt;/li&gt;
&lt;li&gt;Invalid ratings&lt;/li&gt;
&lt;li&gt;Invalid discounts&lt;/li&gt;
&lt;li&gt;Price inconsistencies&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%2Ffil09wgo11utfvk9uj9j.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%2Ffil09wgo11utfvk9uj9j.png" alt="Figure 2:Cleaned Data" width="799" height="334"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Data Cleaning
&lt;/h2&gt;

&lt;p&gt;Data cleaning was important because raw e-commerce data is not always immediately suitable for analysis.&lt;br&gt;
For my data cleaning, I used Power Query, which made the cleaning process much easier.&lt;/p&gt;
&lt;h3&gt;
  
  
  Removing Duplicate Records
&lt;/h3&gt;

&lt;p&gt;Duplicate records can cause products to be counted more than once and can distort totals and averages.&lt;br&gt;
The dataset contained three duplicate records. These duplicates were removed, leaving 112 unique records.&lt;/p&gt;
&lt;h3&gt;
  
  
  Cleaning Review Counts
&lt;/h3&gt;

&lt;p&gt;Some review values were negative.&lt;br&gt;
A review count cannot logically be negative, so these values were converted to their absolute values.&lt;br&gt;
Blank review values were retained as missing values rather than automatically being treated as zero.&lt;br&gt;
This distinction is important because a missing review count does not necessarily mean that the product received zero reviews.&lt;/p&gt;
&lt;h3&gt;
  
  
  Cleaning Ratings
&lt;/h3&gt;

&lt;p&gt;Ratings were originally stored in text formats such as:&lt;br&gt;
&lt;code&gt;4.5 out of 5&lt;/code&gt;&lt;br&gt;
These values were converted into numerical ratings so that averages, sorting, and correlations could be calculated.&lt;/p&gt;
&lt;h3&gt;
  
  
  Cleaning Discounts
&lt;/h3&gt;

&lt;p&gt;Discount values were originally represented as percentages, such as:&lt;br&gt;
&lt;code&gt;38%&lt;/code&gt;&lt;br&gt;
These were converted into numerical percentage values for analysis.&lt;/p&gt;
&lt;h3&gt;
  
  
  Cleaning Prices
&lt;/h3&gt;

&lt;p&gt;Currency text was removed from the price fields so that prices could be treated as numerical values.&lt;br&gt;
One product contained a price range rather than a single price. A midpoint was used for the numerical analysis so that the record could be included in price calculations.&lt;br&gt;
Also, we removed the 'KSh' and ',' before changing prices to whole numbers.&lt;/p&gt;
&lt;h2&gt;
  
  
  Data Enrichment
&lt;/h2&gt;

&lt;p&gt;After cleaning the original fields, additional analytical columns were created.&lt;/p&gt;
&lt;h2&gt;
  
  
  Discount Amount
&lt;/h2&gt;

&lt;p&gt;The discount amount was calculated using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Discount Amount = Old Price - Current Price

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

&lt;/div&gt;



&lt;p&gt;This provides the actual monetary reduction rather than only the percentage reduction.&lt;/p&gt;

&lt;h3&gt;
  
  
  Rating Category
&lt;/h3&gt;

&lt;p&gt;Products were categorized according to their rating performance.&lt;br&gt;
The categories were used to make it easier to analyze the overall distribution of customer ratings.&lt;/p&gt;

&lt;h3&gt;
  
  
  Discount Category
&lt;/h3&gt;

&lt;p&gt;Products were also grouped into discount categories:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Low&lt;/li&gt;
&lt;li&gt;Medium&lt;/li&gt;
&lt;li&gt;High
These categories made it possible to compare product performance across different discount levels.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Price Category
&lt;/h3&gt;

&lt;p&gt;Products were grouped into price ranges to make price analysis easier and to support interactive dashboard filtering.&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%2Fjif3yzyiuhg7rdrdoc94.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%2Fjif3yzyiuhg7rdrdoc94.png" alt="Cleaned  Data" width="799" height="310"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Excel Techniques Used
&lt;/h2&gt;

&lt;p&gt;Several Excel features were used throughout the project.&lt;/p&gt;

&lt;h3&gt;
  
  
  Excel Formulas
&lt;/h3&gt;

&lt;p&gt;Formulas were used to create calculated fields and perform summary calculations.&lt;br&gt;
For example, the discount amount was calculated by subtracting the current price from the old price.&lt;br&gt;
Functions such as &lt;code&gt;AVERAGE&lt;/code&gt;, &lt;code&gt;SUM&lt;/code&gt;, &lt;code&gt;COUNT&lt;/code&gt;, &lt;code&gt;MAX&lt;/code&gt;, &lt;code&gt;MIN&lt;/code&gt;, &lt;code&gt;IF&lt;/code&gt;, and other conditional functions were useful for transforming and analyzing the dataset.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sorting and Filtering
&lt;/h3&gt;

&lt;p&gt;Sorting was used to identify:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Highest-rated products&lt;/li&gt;
&lt;li&gt;Lowest-rated products&lt;/li&gt;
&lt;li&gt;Products with the most reviews&lt;/li&gt;
&lt;li&gt;Products with the highest discounts&lt;/li&gt;
&lt;li&gt;Products requiring attention&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Pivot Tables were used to summarize product performance by categories such as rating and discount levels.&lt;br&gt;
They provided a flexible way to aggregate the data without manually calculating every summary.&lt;/p&gt;

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

&lt;p&gt;Pivot Charts converted the Pivot Table results into visualizations suitable for the dashboard.&lt;/p&gt;

&lt;h3&gt;
  
  
  Slicers
&lt;/h3&gt;

&lt;p&gt;Slicers were added to make the dashboard interactive.&lt;br&gt;
Users can filter the dashboard based on variables such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rating Category&lt;/li&gt;
&lt;li&gt;Discount Category&lt;/li&gt;
&lt;li&gt;Price Category&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Data Analysis
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1 Descriptive Analysis
&lt;/h3&gt;

&lt;p&gt;After cleaning the data, the following statistics were obtained:&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%2Fh8815lp7in6msch9mtoz.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%2Fh8815lp7in6msch9mtoz.png" alt="Figure 3:Descriptive analysis" width="407" height="494"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Trend Analysis
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Relationship Between Discounts and Reviews
&lt;/h3&gt;

&lt;p&gt;One of the main questions was whether larger discounts result in greater customer engagement.&lt;br&gt;
Customer engagement was represented using the number of reviews.&lt;br&gt;
The correlation between discount percentage and review count was approximately:&lt;br&gt;
-0.14&lt;br&gt;
This represents a very weak negative relationship.&lt;br&gt;
Therefore, the analysis does not provide evidence that increasing the discount percentage automatically results in more customer reviews.&lt;br&gt;
Some products with substantial discounts had very few reviews, while some products with moderate discounts had significantly more reviews. &lt;/p&gt;

&lt;h3&gt;
  
  
  Business Interpretation
&lt;/h3&gt;

&lt;p&gt;Sellers should therefore avoid treating discounts as the only method of increasing engagement.&lt;br&gt;
Product quality, value, visibility, presentation, and customer experience may also influence customer response.&lt;/p&gt;

&lt;h3&gt;
  
  
  Relationship Between Price and Rating
&lt;/h3&gt;

&lt;p&gt;The correlation between current price and rating was approximately:&lt;br&gt;
+0.11&lt;br&gt;
This is a very weak positive relationship.&lt;br&gt;
The result suggests that expensive products were not necessarily rated much higher than cheaper products.&lt;br&gt;
For example, the Electronic Digital Display Vernier Caliper had a relatively low current price but achieved a rating of 4.6/5 alongside 49 reviews.&lt;/p&gt;

&lt;h3&gt;
  
  
  Business Interpretation
&lt;/h3&gt;

&lt;p&gt;Price alone does not appear to determine customer satisfaction.&lt;br&gt;
Sellers should focus on providing strong value for money rather than assuming that a higher selling price will result in higher ratings.&lt;/p&gt;

&lt;h3&gt;
  
  
  Relationship Between Ratings and Reviews
&lt;/h3&gt;

&lt;p&gt;The correlation between rating and review count was approximately:&lt;br&gt;
+0.06&lt;br&gt;
This is effectively a negligible linear relationship.&lt;br&gt;
A product can therefore have many reviews without necessarily having a high rating.&lt;br&gt;
This is particularly important when evaluating product performance.&lt;br&gt;
A high number of reviews indicates strong customer engagement, but it does not automatically indicate customer satisfaction.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sales Performance Analysis
&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%2Feu0e9j1hlwfsacf46yli.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%2Feu0e9j1hlwfsacf46yli.png" alt="Analysis" width="800" height="336"&gt;&lt;/a&gt;&lt;br&gt;
The following table summarizes the product performance analysis by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Strong demand proxy: Which products have review counts above the engagement threshold?&lt;/li&gt;
&lt;li&gt;Pricing/marketing attention: Which products combine weak engagement or weak ratings with high price/high discount?&lt;/li&gt;
&lt;li&gt;Many reviews, average experience: Which products have high engagement but fall in the Average rating category?
-Promotion inefficiency: Which high-discount products remain below the engagement threshold?&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;The final stage of the project was creating an interactive Excel dashboard.&lt;br&gt;
The dashboard was designed to provide a quick overview of product performance without requiring the user to inspect the raw dataset.&lt;/p&gt;

&lt;h3&gt;
  
  
  KPI Cards
&lt;/h3&gt;

&lt;p&gt;The dashboard includes key performance indicators such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Total Products&lt;/li&gt;
&lt;li&gt;Average Current Price&lt;/li&gt;
&lt;li&gt;Average Discount&lt;/li&gt;
&lt;li&gt;Average Rating&lt;/li&gt;
&lt;li&gt;Total Reviews
##Product Performance Charts
Charts were created to display:&lt;/li&gt;
&lt;li&gt;Top 10 products by rating&lt;/li&gt;
&lt;li&gt;Top 10 products by reviews&lt;/li&gt;
&lt;li&gt;Top 10 products by discount
###Category Analysis
The dashboard also presents the distribution of:&lt;/li&gt;
&lt;li&gt;Rating categories
-Discount categories
-Price categories
###Interactive Slicers
Slicers allow the user to filter the dashboard by selected product characteristics.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Screenshot: Pivot Tables&lt;/p&gt;

&lt;p&gt;Insert screenshot of your Pivot Tables here.&lt;/p&gt;

&lt;p&gt;Screenshot: Charts&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%2Fte2otqa6utnkqy0k04al.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%2Fte2otqa6utnkqy0k04al.png" alt="Figure 4:Charts" width="799" height="289"&gt;&lt;/a&gt;&lt;br&gt;
Insert screenshot of your charts here.&lt;/p&gt;

&lt;p&gt;Screenshot: Final Dashboard&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%2Fi6isiwrel59321jq2ogy.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%2Fi6isiwrel59321jq2ogy.png" alt="Figure 5: Dashboard" width="800" height="326"&gt;&lt;/a&gt;&lt;br&gt;
Insert screenshot of your completed Dashboard here.&lt;/p&gt;

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

&lt;p&gt;The analysis produced five major conclusions.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Large discounts do not guarantee engagement
&lt;/h3&gt;

&lt;p&gt;The discount-review correlation was approximately -0.14, showing a very weak negative relationship.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Higher prices do not guarantee better ratings
&lt;/h3&gt;

&lt;p&gt;The price-rating correlation was approximately +0.11.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Review volume and rating measure different aspects of
&lt;/h3&gt;

&lt;p&gt;performance&lt;br&gt;
Review count reflects customer engagement, while rating provides an indication of customer satisfaction.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. High-performing products combine engagement and satisfaction
&lt;/h3&gt;

&lt;p&gt;Products such as the Cake Decorating Tool Set and Vernier Caliper demonstrated strong performance through both review volume and rating.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Some heavily discounted products still perform poorly
&lt;/h3&gt;

&lt;p&gt;High discounts cannot compensate for poor product quality or customer dissatisfaction.&lt;/p&gt;

&lt;h2&gt;
  
  
  Recommendations for Jumia Sellers
&lt;/h2&gt;

&lt;p&gt;Based on the findings, sellers should consider the following strategies.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Do not rely entirely on discounts
&lt;/h3&gt;

&lt;p&gt;Discounting should be part of a broader marketing strategy rather than the only method used to generate engagement.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Monitor customer ratings carefully
&lt;/h3&gt;

&lt;p&gt;A product receiving many reviews but maintaining a low rating should be investigated immediately.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Prioritize high-rated and highly reviewed products
&lt;/h3&gt;

&lt;p&gt;Products demonstrating both strong engagement and customer satisfaction should receive greater promotional attention.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Improve product quality
&lt;/h3&gt;

&lt;p&gt;Products with consistently poor ratings should be reviewed for quality and functionality issues.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Improve product descriptions
&lt;/h3&gt;

&lt;p&gt;Accurate product descriptions and specifications can help reduce differences between customer expectations and the actual product.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Use competitive pricing
&lt;/h3&gt;

&lt;p&gt;The analysis indicates that higher prices do not automatically result in higher ratings. Sellers should therefore balance profitability with customer-perceived value.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Use data for decision-making
&lt;/h3&gt;

&lt;p&gt;Instead of deciding on pricing and promotions based solely on intuition, sellers can use review counts, ratings, discounts, and prices together to identify products requiring action.&lt;/p&gt;

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

&lt;p&gt;This project demonstrated how Microsoft Excel can be used to transform raw e-commerce data into an interactive business intelligence dashboard.&lt;br&gt;
The analysis showed that product performance cannot be explained by discounts or prices alone.&lt;br&gt;
The weak relationship between discounts and reviews indicates that larger discounts do not automatically produce higher engagement. Similarly, the weak relationship between price and ratings indicates that expensive products are not necessarily better rated.&lt;br&gt;
The most useful approach is to evaluate multiple indicators together.&lt;br&gt;
Products with high review counts and strong ratings represent stronger performers, while products with high engagement but poor ratings may require quality or customer-experience improvements.&lt;br&gt;
Ultimately, the dashboard provides sellers with a practical way to identify opportunities, monitor product performance, and make more evidence-based pricing and marketing decisions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Takeaway
&lt;/h2&gt;

&lt;p&gt;The key lesson from this project is simple:&lt;br&gt;
A large discount can attract attention, but customer satisfaction and product value are essential for sustainable product performance.&lt;/p&gt;

</description>
      <category>analysis</category>
      <category>data</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Getting Started With Excel For Data Analytics: From Basic Data to Cleaning</title>
      <dc:creator>Victoria Ndei</dc:creator>
      <pubDate>Sat, 29 Aug 2026 20:47:00 +0000</pubDate>
      <link>https://dev.to/victoria_ndei_07224d0b8db/getting-started-with-excel-for-data-analytics-from-basic-data-to-cleaning-3ndp</link>
      <guid>https://dev.to/victoria_ndei_07224d0b8db/getting-started-with-excel-for-data-analytics-from-basic-data-to-cleaning-3ndp</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;This week at Luxdevhq, our data analyst group, we dove into Excel, learning how to navigate it and use its tools as real analysts. Join me as I explain what we covered this week. But before we go any further, we must first understand what Excel is.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Excel
&lt;/h2&gt;

&lt;p&gt;Excel is a spreadsheet software program designed by Microsoft that allows you to collect, organize, analyze, calculate, and visualize data efficiently. It allows users to create charts,and manage large datasets, making it one of the most widely used tools in data analysis and business reporting.&lt;/p&gt;

&lt;h2&gt;
  
  
  1 Excel Fundamentals
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1.1 Workbooks, Worksheets and Cells
&lt;/h3&gt;

&lt;p&gt;Excel file is called a workbook, and a workbook is made of one or more worksheets(often called sheets), visibly seen as tabs at the bottom of the screen. Each worksheet is a grid of cells arranged into columns labelled with letters A, B, C... and rows labelled with numbers:1,2,3...&lt;br&gt;
Every cell has a unique address formed by its column and row, such as A2 or G12, and that address is what formulas use to refer to data elsewhere in the sheet.&lt;/p&gt;

&lt;h3&gt;
  
  
  1.2 Data Types
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Numbers: plain quantities use in calculations e.g: 2, 56, 134&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Texts: words or codes that Excel won't try to calculate e.g Nairobi&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Dates: stored internally as serial numbers;1/12/2000&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Formulas: expression begins with equals sign(=) that calculates result from other cells. e.g (=A2+C2) &lt;/p&gt;
&lt;h3&gt;
  
  
  The Ribbon and Navigation
&lt;/h3&gt;

&lt;p&gt;The ribbon is the toolbar across the top that contains all commands organized into tabs (Home, Insert, Page Layout, Formulas, Data, Review) being the most commonly used.&lt;br&gt;
Home tab covers formatting(fonts,colors,number formats),the formula tab gives access to the function library, and the Data tab is where most data-cleaning tools are found, including Removing Duplicates, Text to Columns, Data Validation, and Sort&amp;amp; Filter. &lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  1.4 Basic Formulas and Functions
&lt;/h3&gt;

&lt;p&gt;A &lt;strong&gt;formula&lt;/strong&gt; is an expression that calculates the value of a cell. Formulas begin with an equals (=) sign and can include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Constants (numbers like 100)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cell references(like A1, B2)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Operations like (+, -, *, /)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Built-in functions (like SUM, AVERAGE)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;FUNCTIONS&lt;/strong&gt;&lt;br&gt;
The following are some of the functions we went through this week:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;=SUM() - adds a range of numbers&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;=AVERAGE() -calculates the mean of a range&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;=COUNT()/=COUNT() -counts numeric cells, or non-blank cells respectively.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;=COUNTIFS() and =SUMIFS() -conditional counting and summing&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;This section we will walk through a realistic sample dataset: fifteen order records from a small online store selling electronics and furniture. This dataset was built in away that it contains different problems every analyst runs into early in a project; inconsistent capitalization, stray whitespace, mixed data formats, a duplicate record, missing values, and a data entry error&lt;/p&gt;

&lt;h3&gt;
  
  
  2.1 The Raw Data
&lt;/h3&gt;

&lt;p&gt;Below is the "Raw Data" worksheet exactly as it may arrive from an export or a manual entry log. A few problems can be noted immediately, a few become obvious once formulas are applied to check for them:&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%2Fnvwu2vn5q2l9cx81258x.jpg" 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%2Fnvwu2vn5q2l9cx81258x.jpg" alt="Figure1:raw, uncleaned data" width="800" height="214"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2.2 Standardizing Text with TRIM, PROPER, and LOWER
&lt;/h3&gt;

&lt;p&gt;These text functions mostly do most of the work when cleaning inconsistencies text entries:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;=TRIM() -removes leading, trailing, and repeated internal spaces (e.g, turns " Peter Otieno" into "Mary Achieng")&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;=PROPER() -converts text to Title Case, so "john mwangi" and "MARY ACHIENG" to "John Mwangi" and "Mary Achieng"&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;=LOWER() -converts texts to lowercase, useful for standardizing email addresses so "&lt;a href="mailto:JOHNMWANGI@GMAIL.COM"&gt;JOHNMWANGI@GMAIL.COM&lt;/a&gt; and &lt;a href="mailto:johnmwangi@gmail.com"&gt;johnmwangi@gmail.com&lt;/a&gt; are recognized as equal.
### 2.3 Handling Dates and Catching Format Errors
Data in Excel can sometimes look correct but actually can be stored incorrectly, which can cause problems when calculating and sorting data. e.g a date like 13/06/2023 might be understood differently depends on Excel's regional settings. The formula checks whether Excel can understand the entry as a real date. If it's a real date, it changes it format DD-MMM-YYYY such as 13-05-2023
### 2.4 Flagging Duplicates, Blanks, and Errors
This step is about finding problems in a data automatically instead of checking rows manually. 
Three checks are used:&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%2Fn6l69041vci6hn0589uj.jpg" 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%2Fn6l69041vci6hn0589uj.jpg" alt="Figure2:The cleaning formulas sheet" width="800" height="244"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Duplicate detection&lt;/strong&gt;: Finds records that appear more than once and marks them as "Duplicate"&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Blank Detection&lt;/strong&gt;: Finds cells where information is missing and marks them as &lt;strong&gt;"Yes"&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Price validation&lt;/strong&gt;: Checks whether the price is negative. If it is, it shows "Negative Price"; otherwise, it shows &lt;strong&gt;OK&lt;/strong&gt;.&lt;br&gt;
Conditional formatting is used to highlight these problems in red problems making them easy to spot:&lt;/p&gt;
&lt;h3&gt;
  
  
  2.5 Producing the Final, Clean Dataset
&lt;/h3&gt;

&lt;p&gt;With every issue identified, the final step combines Excel's inbuilt data; Remove duplicates with the corrections suggested by the flag columns: the duplicate order (1007) was removed, the negative price on order was corrected to its intended positive value, missing quantities and regions were filled after checking the original records, and every data was rewritten in single consistent format. The result is a clean analysis ready table:&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%2Fm1xrlqvrm82plfkg7g22.jpg" 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%2Fm1xrlqvrm82plfkg7g22.jpg" alt="Figure3:The final cleaned dataset &lt;br&gt;
" width="799" height="280"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;p&gt;Data cleaning is very important in data analysis. Excel functions like TRIM, PROPER, LOWER, COUNTSIFS help fix common data problems.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Use conditional formatting to highlight problems so that they are easy to see.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Always check dates. A date may look correct but could be stored as a text, which can cause errors.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use formulas for analysis instead of manually typing.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>beginners</category>
      <category>analytics</category>
      <category>productivity</category>
    </item>
    <item>
      <title>My First GitHub Project: From a Local Folder to GitHub using Git and SSH</title>
      <dc:creator>Victoria Ndei</dc:creator>
      <pubDate>Sat, 22 Aug 2026 14:55:35 +0000</pubDate>
      <link>https://dev.to/victoria_ndei_07224d0b8db/my-first-github-project-from-a-local-folder-to-github-using-git-and-ssh-5cbc</link>
      <guid>https://dev.to/victoria_ndei_07224d0b8db/my-first-github-project-from-a-local-folder-to-github-using-git-and-ssh-5cbc</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;This week I learnt how to create my first  GitHub project from a local folder on my desktop using tools such as Git and an SSH connection. Git is used to track changes in the source code and files over time, while SSH is a key used for authenticating your desktop with your GitHub account. There are several steps that we need to follow before connecting our project to our GitHub account.&lt;/p&gt;

&lt;h2&gt;
  
  
  1 Creating a Folder
&lt;/h2&gt;

&lt;p&gt;There are two ways to create a folder; the first way is to go to your file explorer and select Desktop to create the folder directly there. The second step is to use Git Bash. When using Git Bash, first, you run the command &lt;strong&gt;pwd&lt;/strong&gt; to see which folder you're currently in; e.g when using Windows, you may see &lt;em&gt;/c/Users/John _&lt;/em&gt;.To change your directory to Desktop, you run the command&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="nb"&gt;cd &lt;/span&gt;Desktop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then run &lt;strong&gt;ls&lt;/strong&gt; to see the files located on your desktop. Now we create our folder. To create a folder, we run&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="nb"&gt;mkdir &lt;/span&gt;Kenya_Health_Records
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then we run *&lt;em&gt;cd Kenya_Health_Records *&lt;/em&gt; to change the directory to our folder.&lt;/p&gt;

&lt;h2&gt;
  
  
  2 Adding Files to The Folder
&lt;/h2&gt;

&lt;p&gt;This is our second step after creating our folder. We are going to add the following folders to our project folder:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;data &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;notebooks&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;scripts&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To add the folders, we will run the following commands:&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="nb"&gt;mkdir &lt;/span&gt;data

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

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir &lt;/span&gt;notebooks
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir &lt;/span&gt;scripts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We will also add our README.md using the command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;br&gt;
touch README.md&lt;br&gt;
&lt;/code&gt;`shell&lt;/p&gt;
&lt;h3&gt;
  
  
  Adding information to our README.md
&lt;/h3&gt;

&lt;p&gt;To add information to our README, we use the echo command, two double quotes, and the&amp;gt; sign.&lt;br&gt;
Example:&lt;br&gt;
&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;br&gt;
echo " ## My First GitHub Project" &amp;gt;README.md&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;shell&lt;br&gt;
If you want to check that the information is added to the README.md file, we use&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;br&gt;
cat README.md&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;shell&lt;/p&gt;
&lt;h2&gt;
  
  
  3 Initializing the Project with Git
&lt;/h2&gt;

&lt;p&gt;To initialize the project, we use the command &lt;strong&gt;git init&lt;/strong&gt;&lt;br&gt;
git init initializes the directory as a Git repository.&lt;br&gt;
When I ran git init, it created a hidden .git directory inside my project to track changes.&lt;br&gt;
Afterwards, I checked the status of my files using &lt;strong&gt;git status&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  4 Stage the Whole Project
&lt;/h2&gt;

&lt;p&gt;To stage the remaining changes to the whole project, I ran:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;br&gt;
git add.&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;shell&lt;br&gt;
The period (.) tells Git to add all files to the current directory. I ran *&lt;em&gt;git status *&lt;/em&gt; to check if the files have been added.&lt;/p&gt;
&lt;h2&gt;
  
  
  5 Creating the First Commit
&lt;/h2&gt;

&lt;p&gt;Run: git commit-m" Add Kenya Health Records`&lt;br&gt;
git commit is a snapshot of the changes made to the project.&lt;/p&gt;
&lt;h2&gt;
  
  
  6 Check Current Branch
&lt;/h2&gt;

&lt;p&gt;Run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git branch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
shell&lt;br&gt;
You may see *main, which is the current branch we are in.&lt;br&gt;
For our beginner project, we will use main as our primary branch. If your branch says master, rename it using git branch -M main`&lt;/p&gt;

&lt;h2&gt;
  
  
  7 Creating GitHub repository
&lt;/h2&gt;

&lt;p&gt;Sign in to your GitHub account and then click New repository.&lt;br&gt;
 Name your repository as Kenya-Health-Records. &lt;br&gt;
You can choose whether to set it as private or public.&lt;br&gt;
Our project already has a README.md, so do not select to add it to the repository.&lt;/p&gt;

&lt;h2&gt;
  
  
  8 Selecting SSH
&lt;/h2&gt;

&lt;p&gt;After creating the repository, GitHub displays connection options like HTTPS and SSH. &lt;br&gt;
Select SSH because it was already configured earlier.&lt;br&gt;
The address will look similar to:&lt;a href="mailto:git@github.com"&gt;git@github.com&lt;/a&gt;:USERNAME/kenyan-hospital-health-records.git &lt;/p&gt;

&lt;h2&gt;
  
  
  9 Connecting the Local Repository to GitHub
&lt;/h2&gt;

&lt;p&gt;Open your git bash and run;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;br&gt;
git remote add origin git@github.com:USERNAME/kenyan-hospital-health-records.git &lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;shell&lt;br&gt;
I replaced the username with my GitHub username.&lt;br&gt;
I verified the remote connection using:&lt;br&gt;
&lt;code&gt;git remote-v&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  10 Pushing the Project to GitHub
&lt;/h2&gt;

&lt;p&gt;Run:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;br&gt;
git push -u origin main&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;br&gt;
git push sends the changes from my computer to my remote repository.&lt;/p&gt;

&lt;h2&gt;
  
  
  11 Verifying the Project on GitHub
&lt;/h2&gt;

&lt;p&gt;After the push was completed, I went to GitHub and refreshed the page to see if my project files had been added to the repository.&lt;/p&gt;

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

&lt;p&gt;I gained practical experience in how to upload my local folder using Git and SSH on GitHub. The experience was truly great, and now I'm more familiar with the tools, making it easier to work on more projects on my own from henceforth.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>git</category>
      <category>github</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
