<?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: Susan kiptoo</title>
    <description>The latest articles on DEV Community by Susan kiptoo (@susan_kiptoo).</description>
    <link>https://dev.to/susan_kiptoo</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%2F4071733%2Fbda78248-e033-40dc-b6ae-c39996bfe80e.png</url>
      <title>DEV Community: Susan kiptoo</title>
      <link>https://dev.to/susan_kiptoo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/susan_kiptoo"/>
    <language>en</language>
    <item>
      <title>Data Modelling, Relationships &amp; Joins</title>
      <dc:creator>Susan kiptoo</dc:creator>
      <pubDate>Tue, 22 Sep 2026 13:28:09 +0000</pubDate>
      <link>https://dev.to/susan_kiptoo/data-modelling-relationships-joins-icm</link>
      <guid>https://dev.to/susan_kiptoo/data-modelling-relationships-joins-icm</guid>
      <description>&lt;p&gt;&lt;strong&gt;INTRODUCTION&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Power BI is widely used for transforming raw data into meaningful insights, interactive reports, and business intelligence dashboards. However, the quality of the analysis depends not only on the visualizations created but also on how the underlying data is structured and connected. A poorly designed data model can lead to inaccurate results, complicated calculations, inefficient reports, and difficulties when the model needs to be expanded or maintained.&lt;/p&gt;

&lt;p&gt;Data modelling provides the foundation for organizing data in a way that supports efficient analysis. Power BI offers different approaches to modelling data, including flat tables, star schemas, and snowflake schemas. Understanding the differences between these approaches helps developers and analysts select a structure that is appropriate for their reporting requirements and data environment.&lt;br&gt;
This article explores these concepts from both a theoretical and practical perspective. &lt;br&gt;
It examines different data modelling schemas, fact and dimension tables, relationships and cardinality, filter directions, and the different types of joins available in Power Query.&lt;/p&gt;
&lt;h1&gt;
  
  
  Data Modelling
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Data modelling&lt;/strong&gt; in Power BI is the process of organizing data from one or more sources into a structured model that defines how tables, columns, and relationships work together.&lt;/p&gt;

&lt;p&gt;A data model determines how Power BI understands the relationships between different datasets and how those datasets can be used for reporting, visualization, filtering, and calculations.&lt;/p&gt;

&lt;p&gt;A good data model contributes to:&lt;/p&gt;

&lt;p&gt;-&lt;strong&gt;Reporting&lt;/strong&gt;: Tables and relationships allow users to combine information from different business areas in a single report.&lt;/p&gt;

&lt;p&gt;-&lt;strong&gt;Analytics&lt;/strong&gt;: A properly structured model makes it easier to analyze trends, patterns, and relationships between business measures and descriptive information.&lt;/p&gt;

&lt;p&gt;-&lt;strong&gt;DAX calculations&lt;/strong&gt; : DAX measures depend heavily on relationships and filter context. A clear model makes calculations easier to write, understand, and maintain.&lt;/p&gt;

&lt;p&gt;-&lt;strong&gt;Performance&lt;/strong&gt;: Reducing unnecessary columns, duplicate data, and complicated relationships can reduce the amount of data Power BI has to process.&lt;/p&gt;

&lt;p&gt;-&lt;strong&gt;Scalability&lt;/strong&gt;: A well-designed model can accommodate additional data, dimensions, and business requirements without requiring the entire model to be redesigned.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Maintainability&lt;/strong&gt;: Separating facts from descriptive information makes the model easier to understand, troubleshoot, and modify.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Schemas
&lt;/h2&gt;

&lt;p&gt;We have different types of Schemas:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Flat Table Schema
This is a data model in which all relevant information is stored in one table.&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%2Ffw6liu1cy8ct4tm0ds0y.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%2Ffw6liu1cy8ct4tm0ds0y.png" alt=" " width="800" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here we are merging all the tables for it to become one.&lt;/p&gt;

&lt;p&gt;Advantages of Flat Table&lt;br&gt;
The main advantages of a flat table include:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Simplicity – The structure is easy for beginners to understand.&lt;/li&gt;
&lt;li&gt;Easy data loading – Data can often be imported directly without creating multiple relationships.&lt;/li&gt;
&lt;li&gt;Simple reporting – Basic charts and aggregations can be created quickly.&lt;/li&gt;
&lt;li&gt;Straightforward filtering – All fields are available within the same table.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Disadvantages of Flat Table&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Data duplication – Customer, product, and branch information may be repeated for every transaction.&lt;/li&gt;
&lt;li&gt;Larger model size – Repeated text values and attributes can increase the amount of data that needs to be stored. &lt;/li&gt;
&lt;li&gt;Poor scalability – As the dataset grows, maintaining one large table becomes more difficult.&lt;/li&gt;
&lt;li&gt;Limited reusability – The same customer or product information cannot easily be reused across different fact tables.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A flat table may be appropriate when:&lt;/p&gt;

&lt;p&gt;The dataset is relatively small.&lt;br&gt;
The analysis is simple.&lt;br&gt;
There is only one major business process.&lt;br&gt;
The data does not require complex relationships.&lt;br&gt;
The model is being used for a quick analysis or prototype.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Star Schema&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is a data model where there is a fact table containing all the details from all the tables , surrounded by dimensional 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%2Flfkq8x2abhqtoo04vk7t.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%2Flfkq8x2abhqtoo04vk7t.png" alt=" " width="800" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Advantages of Star Schema&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Clear structure.&lt;/li&gt;
&lt;li&gt;Easy to understand.&lt;/li&gt;
&lt;li&gt;Good for reporting.&lt;/li&gt;
&lt;li&gt;Reduces unnecessary duplication.&lt;/li&gt;
&lt;li&gt;Works well with DAX.&lt;/li&gt;
&lt;li&gt;Easier to maintain.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Disadvantages of Star Schema&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Requires understanding of relationships.&lt;/li&gt;
&lt;li&gt;More tables than a flat model.&lt;/li&gt;
&lt;li&gt;Requires proper modelling&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It is appropriate to use star Schema when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Required to do Business intelligence&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Creating Dashboards&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Sales reporting&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Financial reporting&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Large analytical datasets&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Snowflake Schema.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is a data model where there is a fact table containing all the details from all the tables , surrounded by dimensional tables and the dimensional tables are split into different categories.&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%2Fzfcl4ioilvivrf5et12j.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%2Fzfcl4ioilvivrf5et12j.png" alt=" " width="800" height="369"&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%2Fgclx2345soy70u7sth1b.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%2Fgclx2345soy70u7sth1b.png" alt=" " width="799" height="355"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Advantages of Snowflake Schema&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Reduces duplication&lt;/li&gt;
&lt;li&gt;More normalized&lt;/li&gt;
&lt;li&gt;Can be useful for complex hierarchical data&lt;/li&gt;
&lt;li&gt;Makes some large dimensions more manageable&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Disadvantages of Snowflake Schema&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;More relationships&lt;/li&gt;
&lt;li&gt;More complicated model&lt;/li&gt;
&lt;li&gt;More complicated filtering&lt;/li&gt;
&lt;li&gt;Can make DAX and navigation harder to understand&lt;/li&gt;
&lt;li&gt;When appropriate&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Useful where dimensions contain multiple hierarchical levels or significant repeated information.&lt;/p&gt;
&lt;h3&gt;
  
  
  FACTS AND DIMENSIONAL TABLES
&lt;/h3&gt;

&lt;p&gt;A &lt;strong&gt;fact table&lt;/strong&gt; is a table in a data model that stores business events or transactions and the numerical values associated with those events.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It tells us what happened and records the measurable values of that event.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;fact table contains:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Keys such as CustomerID, ProductID, and DateID&lt;/li&gt;
&lt;li&gt;Measures/numeric values such as Quantity and SalesAmount&lt;/li&gt;
&lt;li&gt;Information about the business event, such as the sale&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A &lt;strong&gt;dimension table&lt;/strong&gt; is a table that stores descriptive information or attributes used to provide context to the events recorded in a fact table.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;It tells us who, what, when, where, or other characteristics related to a business event.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This table doesn't tell us how much a customer purchased. Instead, it describes the customer.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A fact table normally contains three important types of information.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Foreign keys-That connect the fact table to dimension tables.&lt;/li&gt;
&lt;li&gt;Measures-These are numerical values that can be aggregated or analyzed.&lt;/li&gt;
&lt;li&gt;Business events-The fact table represents something that happened.&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;A Dimension table normally contain descriptive attributes.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;ProductID&lt;/code&gt; identifies the product.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ProductName&lt;/code&gt; describes it.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Category&lt;/code&gt; describes it.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Brand&lt;/code&gt; describes it.&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;These attributes allow users to slice, filter and group the information in the fact table.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Measures and Descriptive Attributes&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;-&lt;code&gt;Measures&lt;/code&gt; represent numeric values that can be analyzed.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Descriptive Attributes&lt;/code&gt; describe the business entities involved.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Grain / Granularity of a Fact Table&lt;/strong&gt;&lt;br&gt;
-The &lt;strong&gt;grain&lt;/strong&gt; of a fact table defines what one row in the fact table represents.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It refers to description of what each record in a table consists of.
Example:
One row should be able to represent one product sold in one sales transaction/ one patient from coming in to the end of the diagnosis.&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%2F35g1oqqs66wjopl62uqv.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%2F35g1oqqs66wjopl62uqv.png" alt=" " width="800" height="72"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The grain helps determine:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What each row represents&lt;/li&gt;
&lt;li&gt;What can be summed&lt;/li&gt;
&lt;li&gt;How measures should be calculated&lt;/li&gt;
&lt;li&gt;What relationships are appropriate&lt;/li&gt;
&lt;li&gt;How the fact table should be designed&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Clearly defining the grain of a fact table helps prevent double-counting and ensures that calculations and relationships accurately represent the underlying business process.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Illustration of star and snowflake schemas.&lt;br&gt;
Snowflake Schema- we divide the dimensional tables into sub categories&lt;br&gt;
Then connect to each.&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%2Fyal19h7yagrdcsllnqm3.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%2Fyal19h7yagrdcsllnqm3.png" alt=" " width="800" height="308"&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%2Fgkl52bcuy2owvtc99ei3.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%2Fgkl52bcuy2owvtc99ei3.png" alt=" " width="800" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Star Schema- we create dimensional table that can be linked wwith the fact table using the 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%2Fg6aqlg631iyqfo5qa283.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%2Fg6aqlg631iyqfo5qa283.png" alt=" " width="800" height="315"&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%2F4wz65jvc3n9hcecnvyua.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%2F4wz65jvc3n9hcecnvyua.png" alt=" " width="800" height="511"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  RELATIONSHIPS IN POWER BI
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;A &lt;strong&gt;relationship&lt;/strong&gt; in Power BI is a connection between two tables that allows Power BI to associate related records using a common column, usually a key column.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In a well-designed Power BI model, information is often distributed across multiple tables rather than stored in one huge table.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Relationships therefore allow Power BI to:&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Connect related tables&lt;/li&gt;
&lt;li&gt;Propagate filters&lt;/li&gt;
&lt;li&gt;Perform calculations across tables&lt;/li&gt;
&lt;li&gt;Analyze transactions using descriptive attributes&lt;/li&gt;
&lt;li&gt;Build visualizations from multiple tables&lt;/li&gt;
&lt;li&gt;Maintain a structured data model&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Relationship Cardinality&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;Cardinality&lt;/code&gt; describes how many records in one table can correspond to records in another table.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Power BI commonly uses:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;One-to-Many (1:*)
One-to-One (1:1)
Many-to-Many (:)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Cardinality is important because it tells Power BI how the data on both sides of a relationship behaves.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;One-to-Many Relationship (1:*)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;This is the most common relationship you'll encounter in a Power BI star schema.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A &lt;code&gt;one-to-many relationship&lt;/code&gt; means that one record in one table can be associated with multiple records in another table.&lt;br&gt;
The notation is:&lt;br&gt;
&lt;code&gt;1 : *&lt;/code&gt;&lt;br&gt;
The &lt;code&gt;1&lt;/code&gt; represents the table where the relationship column contains unique values.&lt;br&gt;
The &lt;br&gt;
&lt;code&gt;*&lt;/code&gt;&lt;br&gt;
represents the table where the same value can appear multiple times.&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%2F0r1isqx6vjun6jlvwd5n.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%2F0r1isqx6vjun6jlvwd5n.png" alt=" " width="800" height="562"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We can Use it when:&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;The "one" side contains unique values.&lt;/li&gt;
&lt;li&gt;The "many" side can contain repeated values.&lt;/li&gt;
&lt;li&gt;One entity can have multiple transactions.
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DimCustomer → FactSales
DimProduct  → FactSales
DimDate     → FactSales
DimLocation → FactSales
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;One-to-One Relationship (1:1)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;code&gt;one-to-one relationship&lt;/code&gt; means that one record in one table corresponds to exactly one record in the other table.
-For a One to One relationship to work , remove duplicates, since the record should only show one relationship for that specific customer or patient.&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%2Fetqfzfax1ac6cf25wvvi.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%2Fetqfzfax1ac6cf25wvvi.png" alt=" " width="800" height="774"&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%2Fsurimrvwvxbimpp37408.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%2Fsurimrvwvxbimpp37408.png" alt=" " width="800" height="478"&gt;&lt;/a&gt;&lt;br&gt;
-It can be useful when information about the same entity has been separated into two tables.&lt;br&gt;
1:1 Relationship , shouldn't be used when:&lt;br&gt;
If the two tables contain essentially the same type of information and always have the same grain, it may be simpler to combine them during data preparation instead of maintaining a 1:1 relationship.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Many-to-Many Relationship (&lt;em&gt;:&lt;/em&gt;)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;code&gt;many-to-many relationship&lt;/code&gt;occurs when multiple records in one table can be associated with multiple records in another table.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example: A patient can visit the hospital many times , or a student can take multiple courses.&lt;/p&gt;

&lt;p&gt;In our below example, a Patient can visist the hospital many times and when visiting many times , he/she can be treated by different doctors.&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%2Fk3obqqqe88vg6z2zbufn.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%2Fk3obqqqe88vg6z2zbufn.png" alt=" " width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Primary and Foreign Keys&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the relationships used in Power BI, we have Primary Keys and Foreign Keys.&lt;/p&gt;

&lt;p&gt;A &lt;code&gt;primary key&lt;/code&gt; is a column that uniquely identifies each record in a table while a &lt;code&gt;foreign key&lt;/code&gt; is a column that references a primary key in another table.&lt;/p&gt;

&lt;p&gt;These are very important when defining relationships in Power BI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Unique Values&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;For a normal 1:* relationship:One side must have unique values and the many side can have repeated values.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If the supposed "one" side contains duplicates, Power BI cannot correctly treat it as the unique side of a normal one-to-many relationship.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Referential Integrity&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Referential integrity&lt;/code&gt; means that values in a foreign-key column should correspond to valid records in the related primary-key column.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Active and Inactive Relationships&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An active relationship is the relationship Power BI uses by default when calculating and filtering data.
It is normally shown as a solid line in Model View.&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%2Fxkylelx6o8veu64sk3by.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%2Fxkylelx6o8veu64sk3by.png" alt=" " width="800" height="604"&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%2Fmmmnidr3jy9pbleo0mca.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%2Fmmmnidr3jy9pbleo0mca.png" alt=" " width="800" height="76"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An inactive relationship exists in the model but isn't used automatically for normal filtering.
It is normally displayed as a dashed line.&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%2Fjtmracsmfoy8sy4oymn7.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%2Fjtmracsmfoy8sy4oymn7.png" alt=" " width="800" height="514"&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%2Fixny83k728ntzu9ixc8c.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%2Fixny83k728ntzu9ixc8c.png" alt=" " width="182" height="185"&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%2Fvy3w5qx7195juoaklplj.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%2Fvy3w5qx7195juoaklplj.png" alt=" " width="799" height="243"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h5&gt;
  
  
  Filter Direction
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;Filter direction determines how filters move between related tables in a Power BI data model.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Single-Direction Filtering&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;With single-direction filtering, the filter normally travels from the one side of the relationship to the many side.&lt;br&gt;
Like mostly in star Schema.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Single-direction filtering is generally easier to understand because the model follows a clear path.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After Creating the Fact and dimensional tables, we will therefore define the filtering direction &lt;br&gt;
&lt;code&gt;Dimension → Fact&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DimPatient    ──►
Dimdiagnosis  ──► FactSales
DimProcedure  ──►
Dimdepartments──►
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0nee75b55dio82jijmwv.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%2F0nee75b55dio82jijmwv.png" alt=" " width="800" height="749"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Both/Bidirectional Filtering&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;With bidirectional filtering, filters can travel in both directions between related tables.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The relationship should behave like:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Dimdepartments ◄────► Factvisits&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%2Fl7p0lftbpjac4xsuccpc.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%2Fl7p0lftbpjac4xsuccpc.png" alt=" " width="800" height="729"&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%2Ffzmtca4u6jqn3axkbqdc.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%2Ffzmtca4u6jqn3axkbqdc.png" alt=" " width="694" height="496"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bidirectional filtering&lt;/strong&gt; can be useful in certain scenarios, particularly when the analytical requirement genuinely requires filters to propagate in both directions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;However, it should not automatically be used for every relationship.&lt;br&gt;
There may be multiple routes through which a filter can travel between tables.&lt;/p&gt;

&lt;p&gt;Disadvantages of Bidirectional&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;This can create ambiguous filter paths, making it difficult for Power BI to determine which filtering route should be used.&lt;/li&gt;
&lt;li&gt;Bidirectional relationships make the model more difficult to understand and troubleshoot.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Please note: Use single-direction filtering by default and use bidirectional filtering only when there is a clear analytical requirement.&lt;/p&gt;

&lt;h6&gt;
  
  
  Joins in Power Query
&lt;/h6&gt;

&lt;p&gt;A &lt;code&gt;join&lt;/code&gt; combines information from two tables based on a matching column.&lt;br&gt;
In Power Query, joins are performed using , Merge Queries.&lt;/p&gt;

&lt;p&gt;To Join Tables&amp;gt;&amp;gt; Click transform data&amp;gt;&amp;gt; it will open power Query.&lt;br&gt;
Identify the table&amp;gt;&amp;gt;click merge queries&amp;gt;&amp;gt;choose the table tou want to join with&amp;gt;&amp;gt; then choose the type of join you will need.&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%2F52xmhj7tf5tpw436tr04.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%2F52xmhj7tf5tpw436tr04.png" alt=" " width="799" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Left Outer Join&lt;/strong&gt;&lt;br&gt;
A Left Outer Join keeps all records from the left table and adds matching records from the right table.&lt;br&gt;
If there is no match, the right-side information is returned as blank.&lt;/p&gt;

&lt;p&gt;In our example we are joining the Products table with the sales 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%2Frf34xxcwft1is9jck3zu.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%2Frf34xxcwft1is9jck3zu.png" alt=" " width="800" height="742"&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%2F74egyir0rbuk4bycccgy.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%2F74egyir0rbuk4bycccgy.png" alt=" " width="799" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Right Outer Join&lt;/strong&gt;&lt;br&gt;
A Right Outer Join keeps all records from the right table and adds matching records from the left table.&lt;br&gt;
This join is useful when the right-hand table represents the records that must all be preserved.&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%2F2t4vwpfsu52zcavgjfm3.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%2F2t4vwpfsu52zcavgjfm3.png" alt=" " width="800" height="731"&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%2Fmadublq1510t115idydn.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%2Fmadublq1510t115idydn.png" alt=" " width="799" height="263"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Full Outer Join&lt;/strong&gt;&lt;br&gt;
A Full Outer Join keeps all records from both tables, whether they match or not.&lt;br&gt;
If there is no match , it will join and whats not visible on both tables will read as null.&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%2Fle5y3str2yffnvnndb10.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%2Fle5y3str2yffnvnndb10.png" alt=" " width="800" height="727"&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%2Fdf9kffw4m67bxwxz2y5u.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%2Fdf9kffw4m67bxwxz2y5u.png" alt=" " width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Inner Join&lt;/strong&gt;&lt;br&gt;
An Inner Join keeps only records that exist in both tables.&lt;br&gt;
This is useful when the analysis requires only records that exist in both datasets.&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%2Fjp3q4rqvtbkqqsz8n1mv.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%2Fjp3q4rqvtbkqqsz8n1mv.png" alt=" " width="800" height="734"&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%2Fo0nnpz2c1f6cr8er5dsl.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%2Fo0nnpz2c1f6cr8er5dsl.png" alt=" " width="799" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Left Anti Join&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A Left Anti Join returns records that exist in the left table but do not have a matching record in 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%2F734kbd1slzbr253k75jo.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%2F734kbd1slzbr253k75jo.png" alt=" " width="800" height="728"&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%2F1tj8jipf3yegm07hjgmy.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%2F1tj8jipf3yegm07hjgmy.png" alt=" " width="799" height="212"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Right Anti Join&lt;/strong&gt;&lt;br&gt;
A Right Anti Join returns records that exist in the right table but do not have a matching record in 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%2Fjs6hirib9e6g4a4zzmx6.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%2Fjs6hirib9e6g4a4zzmx6.png" alt=" " width="799" height="208"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h6&gt;
  
  
  # Power Query Joins vs Power BI Relationships
&lt;/h6&gt;

&lt;p&gt;&lt;strong&gt;Power Query Merge&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A Power Query merge is a data transformation operation.&lt;br&gt;
It takes two tables and combines information based on matching columns.&lt;br&gt;
This is a transformation done before the data is loaded into the Power BI model.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Power BI Relationship&lt;/strong&gt;&lt;br&gt;
A relationship does not physically merge the tables.Instead, the tables remain separate (Fact and dimensional tables) and are connected through relationships.&lt;br&gt;
A relationship is generally preferable when you are building a BI model with fact and dimension tables.&lt;/p&gt;

&lt;p&gt;Keeping the fact and dimensional Table separate is useful because each table has a clear purpose.&lt;/p&gt;

&lt;h6&gt;
  
  
  ## Recommended Power BI Model
&lt;/h6&gt;

&lt;p&gt;For a typical business intelligence project, I would recommend a &lt;code&gt;Star Schema&lt;/code&gt; as the default modelling approach.&lt;/p&gt;

&lt;p&gt;The recommendation is based on the separation of business events from descriptive information.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Recommended Relationships&lt;/strong&gt;&lt;br&gt;
One-to-many (1:*) relationships&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Recommended Filter Direction&lt;/strong&gt;&lt;br&gt;
Single-direction filtering from dimensions to the fact table.&lt;/p&gt;

&lt;p&gt;Data → Power Query → Tables → Relationships → Filters → DAX/Reports&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%2F8pwgpo8qw9k2h8920r00.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%2F8pwgpo8qw9k2h8920r00.png" alt=" " width="800" height="387"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CONCLUSION&lt;/strong&gt;&lt;br&gt;
Designing an effective Power BI solution requires more than simply importing data and creating visualizations. A well-designed data model provides the foundation for accurate analysis, efficient reporting, and long-term maintainability. This article has examined the key concepts involved in building such a model, including flat tables, star schemas, snowflake schemas, fact and dimension tables, relationships, filter directions, and Power Query joins.&lt;/p&gt;

&lt;p&gt;Among the modelling approaches discussed, the star schema provides a practical structure for most business intelligence projects. By separating measurable business events into fact tables and descriptive information into dimension tables, it reduces unnecessary data redundancy while making the model easier to understand, maintain, and scale. One-to-many relationships between dimensions and fact tables, combined with single-direction filtering, also provide predictable filter propagation and simplify analysis.&lt;/p&gt;

&lt;p&gt;It is also important to distinguish between Power Query merges and Power BI relationships. A merge is a data transformation operation used to physically combine information during the data preparation stage, while a relationship connects separate tables within the Power BI data model without physically combining them. Understanding when to use each approach helps prevent unnecessary merging and preserves a clear fact-and-dimension structure.&lt;/p&gt;

&lt;p&gt;Ultimately, there is no single modelling approach that is appropriate for every dataset. The choice should consider the size and structure of the data, reporting requirements, performance, scalability, and maintenance needs. However, for a typical Power BI business intelligence solution, a well-designed star schema with appropriate relationships and controlled filter propagation provides a strong foundation for building reliable, understandable, and scalable analytical reports.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/SusanKiptoo/Data-modelling-Relationships-Joins" rel="noopener noreferrer"&gt;https://github.com/SusanKiptoo/Data-modelling-Relationships-Joins&lt;/a&gt;&lt;/p&gt;

</description>
      <category>data</category>
      <category>analytics</category>
      <category>modelling</category>
    </item>
    <item>
      <title>Turning Jumia Data into Decisions: Building an Interactive Excel Dashboard for Smarter Pricing, Promotions &amp; Customer Engagement</title>
      <dc:creator>Susan kiptoo</dc:creator>
      <pubDate>Sun, 13 Sep 2026 14:50:03 +0000</pubDate>
      <link>https://dev.to/susan_kiptoo/turning-jumia-data-into-decisions-building-an-interactive-excel-dashboard-for-smarter-pricing-396l</link>
      <guid>https://dev.to/susan_kiptoo/turning-jumia-data-into-decisions-building-an-interactive-excel-dashboard-for-smarter-pricing-396l</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;For this project, we are using Microsoft Excel to transform raw Jumia product data into meaningful, actionable insights. &lt;br&gt;
The goal is to build an interactive dashboard that makes it easier to understand product pricing, discounts, promotions, sales performance, and customer engagement.&lt;/p&gt;

&lt;p&gt;Through data cleaning, analysis, and visualization, the dashboard helps turn large amounts of raw data into clear information that can support better pricing decisions, more effective promotions, and a deeper understanding of customer behavior.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dataset
&lt;/h2&gt;

&lt;p&gt;Our dataset is defined as below:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The Product&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The current Price&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Old Price&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The discount&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The review&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The ratings&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With any dataset given , you need to understand what the organization expects you to achieve even before proceeding with data cleaning.&lt;br&gt;
Here the objectives stated , will help us achieve an end goal of understanding how the products perform and some recommendations that we will give the business to ensure the low performing products are will improve, or how to make their business grow.&lt;/p&gt;

&lt;p&gt;Below are our objectives:&lt;br&gt;
To understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;whether larger discounts are associated with more reviews. &lt;/li&gt;
&lt;li&gt;whether highly rated products attract stronger engagement.&lt;/li&gt;
&lt;li&gt;whether price and rating move together.&lt;/li&gt;
&lt;li&gt;which products perform best based on ratings and reviews; and&lt;/li&gt;
&lt;li&gt;which products may need a different pricing or marketing strategy.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Data Cleaning
&lt;/h3&gt;

&lt;p&gt;From our data we see alot of inconsistencies as stated below:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Blanks&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Price columns, Both Current and old price are defined as texts instead of numerical/ currencies.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Some Duplicate Products, with same values all through to the last column.&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%2Febo0kjmi679eeeuktmst.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%2Febo0kjmi679eeeuktmst.png" alt=" " width="799" height="198"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Misspelled Header:&lt;code&gt;Ratingd&lt;/code&gt;intsead of &lt;code&gt;Ratings&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Negative Reviews.&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%2Fbmq86ooca5pvmle589w9.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%2Fbmq86ooca5pvmle589w9.png" alt=" " width="800" height="268"&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%2Ffcuk6028ldzhpzq2qh5o.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%2Ffcuk6028ldzhpzq2qh5o.png" alt=" " width="799" height="251"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Data Cleaning Steps:
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Renaming the misspelled Header &lt;br&gt;
After Indentifying the issue Change it from &lt;code&gt;Ratingd&lt;/code&gt; to &lt;code&gt;Ratings&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Changing the Prices from Texts to numerical then updating the currency.&lt;br&gt;
-Select the whole column, then press &lt;code&gt;CTRL+H&lt;/code&gt; rename the &lt;code&gt;Ksh&lt;/code&gt; to &lt;code&gt;Blank&lt;/code&gt;. Then format the cell by choosing the correct currencies available , in our case we will convert it to &lt;code&gt;KES&lt;/code&gt;&lt;/p&gt;&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%2F02nxzky52mdplm01u9fa.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%2F02nxzky52mdplm01u9fa.png" alt=" " width="800" height="399"&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%2Fyv5mlgyisj8luuxqfhbl.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%2Fyv5mlgyisj8luuxqfhbl.png" alt=" " width="800" height="889"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.Changing the negative Reviews. &lt;code&gt;CTRL+H&lt;/code&gt;then replace it with a &lt;code&gt;Blank&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%2F98nu58bn6accgg6im5fx.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%2F98nu58bn6accgg6im5fx.png" alt=" " width="799" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Replacing blank cells with Values like: &lt;code&gt;Null&lt;/code&gt; or &lt;code&gt;Unknown&lt;/code&gt;&lt;br&gt;
&lt;code&gt;CTRL+H&lt;/code&gt;, Replace Balnk with &lt;code&gt;Null&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Changing the ratings, now that we know 5 is the highest out of all the rating. We remove the &lt;code&gt;out of 5&lt;/code&gt;so that we just remain with numerical ratings and for it to be aa numerical column.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;We have an item with prices not defined but left as shown.&lt;/p&gt;&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%2F6igsrn3x86amm40wqu5i.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%2F6igsrn3x86amm40wqu5i.png" alt=" " width="800" height="34"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With this we will have to calculate the median/Average because we dont know the exact price but we are given the range.&lt;br&gt;
&lt;code&gt;=AVERAGE(1620,1980)&lt;/code&gt;1800&lt;code&gt;=AVERAGE( 2200, 3200)&lt;/code&gt;2700&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%2Fseb1rge41qu2typhexg0.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%2Fseb1rge41qu2typhexg0.png" alt=" " width="799" height="55"&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%2F64neb847t90nx8misj0a.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%2F64neb847t90nx8misj0a.png" alt=" " width="695" height="88"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Removing only duplicates that are similar in all columns.
After identifying the duplicates, Select the whole data&amp;gt;&amp;gt;data tab&amp;gt;&amp;gt;remove duplicates&amp;gt;&amp;gt; select all columns.&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%2Fmmpklxd7h7l4ldf87zwa.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%2Fmmpklxd7h7l4ldf87zwa.png" alt=" " width="800" height="386"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h5&gt;
  
  
  Creating Additional Columns.
&lt;/h5&gt;

&lt;p&gt;Creating Additional columns easens the work when creating pivot tables which we will use for our analysis, As we are comparing the Price, Rating,Discounts and Reviews.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pricing Category:&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%2Fwhsbktyrs1bglcplsp64.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%2Fwhsbktyrs1bglcplsp64.png" alt=" " width="800" height="392"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Discount Category:&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%2Fghrhmrru38ro10mokjfz.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%2Fghrhmrru38ro10mokjfz.png" alt=" " width="798" height="204"&gt;&lt;/a&gt;&lt;br&gt;
-Review Category:&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%2Fsfi5285kxtsgiezw0aka.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%2Fsfi5285kxtsgiezw0aka.png" alt=" " width="800" height="174"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h6&gt;
  
  
  Pivot Tables
&lt;/h6&gt;

&lt;p&gt;From the cleaned data set, click any cell&amp;gt;&amp;gt;insert&amp;gt;&amp;gt;pivot tables&amp;gt;&amp;gt;New page.&lt;/p&gt;

&lt;p&gt;Whether larger discounts are associated with more reviews.?&lt;br&gt;
We add the row for discount Category and average Reviews to understand if its possible.&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%2Fz5j96yr28icsdwlb7enb.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%2Fz5j96yr28icsdwlb7enb.png" alt=" " width="800" height="265"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From our Analysis, Discount isn't associated with more Reviews.&lt;br&gt;
Some items despite having discounts, don't even have high reveiws.&lt;br&gt;
For Jumia , they shouldn't really depend on the discounts to give those products high/more reviews.&lt;/p&gt;

&lt;p&gt;Whether highly rated products attract stronger 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%2F3on7gzsm388i6ef2t64r.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%2F3on7gzsm388i6ef2t64r.png" alt=" " width="800" height="333"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From Our Analysis , yes High rated products do attract high review, meaning these products are good and rated well.&lt;/p&gt;

&lt;p&gt;whether price and rating move together.&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%2Fybtmgg6ojgirl135cntj.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%2Fybtmgg6ojgirl135cntj.png" alt=" " width="799" height="319"&gt;&lt;/a&gt;&lt;br&gt;
From our Analysis Price and rating go hand in hand. It helps though but that shouldn't be a dependant. For Items with High ratings they do have hig prices. Which is a good strategy because for thos hight rated items, they make more revenue. &lt;br&gt;
However Jumia should take note on poor rated products , either imporve the items/change suppliers for that specific item, inorder to get high ratings and maybe also increase price for those items.&lt;/p&gt;

&lt;p&gt;which products perform best based on ratings and reviews&lt;br&gt;
By Reviews:120W Cordless Vacuum Cleaners Handheld Electric Vacuum Cleaner&lt;br&gt;
By Ratings:&lt;br&gt;
Anti-skid Absorbent Insulation Foaster for Home Office&lt;br&gt;
Bedroom Simple Floor Hanging clothes rack single pole Hat Rack White.&lt;br&gt;
Classic Black Cat cottonHemp Pillow Case for Home Car.&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%2Flpt45d0cwv0r9x98yezw.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%2Flpt45d0cwv0r9x98yezw.png" alt=" " width="800" height="274"&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%2Fado8ijriugg356uqgj82.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%2Fado8ijriugg356uqgj82.png" alt=" " width="800" height="287"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;which products may need a different pricing or marketing strategy.&lt;br&gt;
5-PCS Stainless Steel Cooking Pot Set With Steamed Slices&lt;br&gt;
Since this item has a poor /the least review, Jumia should atleast reduce the price , since currently it is a meduim category price to abit lower to attract customers or change startegy for marketing it to get more clients to use the products and gauge the ratings. If the ratings will not improve then change the product or supplier for that specific product.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Recommendations:&lt;/strong&gt;&lt;br&gt;
Look beyond discounts as an engagement strategy.&lt;br&gt;
Prioritize quality control for products with many reviews but low ratings.&lt;br&gt;
Review the products with both high discounts and low ratings. Instead of applying further discounts, sellers should investigate whether product quality, customer expectations, or listing accuracy is contributing to the poor ratings.&lt;br&gt;
Encourage customers to leave reviews, particularly for high-selling products with few or no ratings.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This project reinforced an important lesson in data analysis: assumptions do not always hold up when tested against real data. The expectation that larger discounts automatically drive customer engagement, or that price is directly linked to product quality, was not necessarily supported by the data.&lt;/p&gt;

&lt;p&gt;The data-cleaning process was equally important. Handling missing ratings appropriately rather than simply excluding or hiding them helped ensure that the analysis and correlation results remained as reliable and transparent as possible.&lt;/p&gt;

&lt;p&gt;Ultimately, the dashboard transforms raw Jumia product data into insights that can help sellers make more informed decisions around pricing, promotions, product quality, 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%2F0vwyy5nh017hucil4d7d.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%2F0vwyy5nh017hucil4d7d.png" alt=" " width="800" height="266"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>data</category>
      <category>analytics</category>
      <category>tutorial</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Beginner Excel Basics and Data Cleaning</title>
      <dc:creator>Susan kiptoo</dc:creator>
      <pubDate>Sat, 29 Aug 2026 18:41:13 +0000</pubDate>
      <link>https://dev.to/susan_kiptoo/-beginner-excel-basics-and-data-cleaning-3769</link>
      <guid>https://dev.to/susan_kiptoo/-beginner-excel-basics-and-data-cleaning-3769</guid>
      <description>&lt;h2&gt;
  
  
  Introduction to Excel.
&lt;/h2&gt;

&lt;p&gt;Excel is the most basic tool used for comparison, analysing, cleaning and reporting.&lt;br&gt;
It is one of the most important tools used widely especially during data cleaning. Understanding the basic features it has makes data cleaning and transformation easy. We have different features in excel that makes our work easier when aligning, sorting, filtering and deleting what's not needed.&lt;br&gt;
We also do have formulas that makes calculations or comparisons between columns, rows and even worksheets easier.&lt;br&gt;
Basically excel easens work that could take longer.&lt;/p&gt;

&lt;h3&gt;
  
  
  Features in Excel and its importance.
&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%2Fp5adzs8f8zxy3ndjou7h.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%2Fp5adzs8f8zxy3ndjou7h.png" alt=" " width="800" height="79"&gt;&lt;/a&gt;&lt;br&gt;
These are the basic Tabs that are visible when first opening your excel and each have their own importance since they complemnt each other.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;File Tab&lt;/strong&gt;- This is basically for Saving, Exporting, Sharing your data and also for checking your Excel account.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Home Tab&lt;/strong&gt;- This is a tab that contains mostly used features.
They contain: Text features, Alignment,condition formatting, cell styles, sort and filtering, delete and insert feature.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Insert Tab&lt;/strong&gt;- This is for inserting tables,forms and charts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Page Layout Tab&lt;/strong&gt;- This is for designing the page layout for your excel.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Formulas Tab&lt;/strong&gt;- This is a tab that contains different formulas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data Tab&lt;/strong&gt;- This is a Tab that contains feature that is able to assist with updating, sorting and filtering data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;View Tab&lt;/strong&gt;- This Tab assist with the view of the excel sheet data, Most importantly Freeze panes(This helps when scrolling down there is no confusion of the column or row and what it represents)&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%2F2nbpdi55midd1msf0aum.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%2F2nbpdi55midd1msf0aum.png" alt=" " width="800" height="213"&gt;&lt;/a&gt;&lt;br&gt;
Each cell in a column and row has a unique identifier(A1,A2,B1,B2..)&lt;/p&gt;

&lt;h4&gt;
  
  
  Data Cleaning.
&lt;/h4&gt;

&lt;p&gt;N/B: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;With Data cleaning , first identify the inconsistencies in your data and change them so that they all align as expected for each rows and column.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In a large dataset we have both texts and numerical values and with both we have ways of cleaning and transforming them inorder to align and be able to come up with good, realiable insights from the dashboard created after the cleaning and transforming.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;
  
  
  Cleaning Texts Values.
&lt;/h5&gt;

&lt;p&gt;&lt;strong&gt;Names&lt;/strong&gt;&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%2Fpc82g1gioyi4h6a5fhg9.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%2Fpc82g1gioyi4h6a5fhg9.png" alt=" " width="602" height="1278"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To identify the inconsistencies in a specific column:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Highlight the column&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;On home tab, look for filter button.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;After filtering , you will be able to see the incosistencies. In our above example: We are able to identify there are different cases for the names.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;After Indentifying the issue, it is easier to insert another column, and use a function to be able to align all the cases to &lt;strong&gt;PROPER&lt;/strong&gt;&lt;/p&gt;&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%2Fx7ljxa6573f3n3qd4vn8.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%2Fx7ljxa6573f3n3qd4vn8.png" alt=" " width="800" height="1166"&gt;&lt;/a&gt;&lt;br&gt;
&lt;code&gt;=PROPER(B2)&lt;/code&gt;&lt;br&gt;
-Proper is the function.&lt;br&gt;
-B2 is the scpecific cell being referenced.&lt;br&gt;
-After all the cases are aligned to &lt;strong&gt;PROPER&lt;/strong&gt; then you can copy that specific column and paste special then choose paste values .&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Do that for the Names colunm that requires it.(First and last name)&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%2Fr8jmd9ieuc2po7lw8sc7.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%2Fr8jmd9ieuc2po7lw8sc7.png" alt=" " width="624" height="928"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For Other Texts columns we proceed with the same , Highlighting the column and filtering to be able to see what inconsistencies that column has.&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%2Fjc5vrhud2y92bxi3qvn7.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%2Fjc5vrhud2y92bxi3qvn7.png" alt=" " width="563" height="1132"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To align the texts in the column use:&lt;br&gt;
&lt;code&gt;CTRL+H&lt;/code&gt; to identify and replace the text values with the expected values in that column to avoid many descriptions representing a specific group/dept.&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%2Fedudiba67cl8ro8jenfw.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%2Fedudiba67cl8ro8jenfw.png" alt=" " width="800" height="466"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h6&gt;
  
  
  Cleaning Numerical Values.
&lt;/h6&gt;

&lt;p&gt;&lt;strong&gt;DATES&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;After identifying the mixup in your dates :&lt;/li&gt;
&lt;li&gt;Highlight the column&lt;/li&gt;
&lt;li&gt;Right click and choose format cells. This will help you choose the format of the cell you expect.&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%2Fdydvde6nrgxod2fht17e.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%2Fdydvde6nrgxod2fht17e.png" alt=" " width="732" height="998"&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%2Fthxyhgwh20j3zkra4q66.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%2Fthxyhgwh20j3zkra4q66.png" alt=" " width="800" height="646"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CURRENCIES&lt;/strong&gt;&lt;br&gt;
-For some numerical values that appears as text e.g: Currencies, could be because the currency was input manually as a text.&lt;br&gt;
To resolve this:&lt;br&gt;
-After highlighting the column, &lt;code&gt;CTRL+H&lt;/code&gt;, Then identify the values and replace with the expected value.&lt;br&gt;
-In our case we are removing the currency input manually*&lt;em&gt;KES&lt;/em&gt;*&lt;br&gt;
We identify it then replace we leave it as blank.&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%2Fhf9yjidx7jedq2vae4cv.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%2Fhf9yjidx7jedq2vae4cv.png" alt=" " width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Another way to work around it when you want the currency symbol to be visible is by higlighting the column, right click, choose format cell and define the curreny needed.&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%2F7xiazebnc6sifa9ff5v1.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%2F7xiazebnc6sifa9ff5v1.png" alt=" " width="800" height="845"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Using Conditional formatting Feature.
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;We use conditional formatting to identify alot in a data set: &lt;/li&gt;
&lt;li&gt;Highlight cell rules: Duplicates, data less than, between, Greater than, Less than..&lt;/li&gt;
&lt;li&gt;Top/ Bottom Rules&lt;/li&gt;
&lt;li&gt;Colour cells.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Identifying Duplicates
&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%2F1dgxp7phlk4guhrx7vid.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%2F1dgxp7phlk4guhrx7vid.png" alt=" " width="800" height="529"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsthd6leq3y0ptcs56fnq.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%2Fsthd6leq3y0ptcs56fnq.png" alt=" " width="679" height="274"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The color code will identify he duplicates :&lt;br&gt;
-To deal with duplicates mainly depends with the whole data , e.g: If its a data that can be deleted then proceed to delete, if its a specific cell and instead of deleting the whole row, you can delete the specific cell and remain with the rest of the data.&lt;/p&gt;

&lt;h4&gt;
  
  
  Generating Automatic emails .
&lt;/h4&gt;

&lt;p&gt;We use &lt;code&gt;=LOWER(CONCAT(B2,B10,"@luxdevhq.com"))&lt;/code&gt; .&lt;br&gt;
This formula will generate automatic email in lowercase given that the first and last name for the specific people are defined.&lt;/p&gt;

&lt;h5&gt;
  
  
  Aggregate Functions.
&lt;/h5&gt;

&lt;p&gt;-These are the functions that are used for calculations either to get the total, mean, mode..&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We use these formulas:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;=SUM()&lt;/code&gt;- This will calculate the total of a specific column. In the bracket define the cell range you want it to calculate the total.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;=PRODUCT()&lt;/code&gt;- This will help to calculate the multiplication of the cells defined in the cell range.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;=MEDIAN()/ =AVERAGE()&lt;/code&gt;- This helps in calculating the average of the cells defined.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;=MODE()&lt;/code&gt;- This helps to calculate the most visible value in the cell range.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;=MIN()&lt;/code&gt;- This identifies the least value in the cell range.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;=MAX()&lt;/code&gt;- This identifies the largest value in the cell range.&lt;/p&gt;

&lt;h6&gt;
  
  
  Statistical Functions.
&lt;/h6&gt;

&lt;p&gt;&lt;code&gt;=COUNT()&lt;/code&gt;-This counts the numerical values in a cell range.&lt;br&gt;
&lt;code&gt;=COUNTA()&lt;/code&gt;-This counts non numerical values in a cell range.&lt;br&gt;
&lt;code&gt;=COUNTBLANK()&lt;/code&gt;- This counts blank cells in the cell range.&lt;/p&gt;

&lt;h6&gt;
  
  
  # Conditional Calculations.
&lt;/h6&gt;

&lt;p&gt;&lt;code&gt;=COUNTIF(E2:E870,"Females")&lt;/code&gt;- This formula counts cells that only meet one condition. In our case our condition is females. So from the whole cell range it will count the female only.&lt;br&gt;
&lt;code&gt;=COUNTIFS(E2:E870,"Females",F2:F870,"30"&lt;/code&gt;- This formula counts cells that meets more than one condition. In our example here, the first condition is gender (females)and the 2nd condition is age(30).&lt;br&gt;
&lt;code&gt;=SUMIF(E2:E870,"Females",F2:F870&lt;/code&gt;- This Adds values that meet one condition. In Our case we are adding the salary of Females&lt;br&gt;
&lt;code&gt;SUMIFS(E2:E870,I2:I870,"Females,"30"&lt;/code&gt;- This Adds values that meet multiple conditions. In our Case we want the sum of (Females) who's age is (30). Here we are meeting more than one condition.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>datascience</category>
    </item>
    <item>
      <title>GITHUB PROJECT</title>
      <dc:creator>Susan kiptoo</dc:creator>
      <pubDate>Sun, 23 Aug 2026 08:26:45 +0000</pubDate>
      <link>https://dev.to/susan_kiptoo/github-project-501m</link>
      <guid>https://dev.to/susan_kiptoo/github-project-501m</guid>
      <description>&lt;h1&gt;
  
  
  Definitions
&lt;/h1&gt;

&lt;p&gt;Github- is a cloud-based platform for hosting, managing, and collaborating on software projects.&lt;br&gt;
Git- the tool that tracks your code changes on your project.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;After installing your gitbash configure your gitbash by configuring your identity:
&lt;code&gt;git config --global user.name "Your Full Name"&lt;/code&gt; run
&lt;code&gt;git config --global user.email "your_email@example.com"&lt;/code&gt;run&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;-Set your default as main:&lt;br&gt;
&lt;code&gt;git config --global init.defaultBranch main&lt;/code&gt;&lt;br&gt;
This tells Git to use main as the default initial branch for new repositories&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To verify your configuration use:
&lt;code&gt;git config --global --list&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Creating Local folders:
&lt;/h2&gt;

&lt;p&gt;Creating these local folders help in tracking and organizing documents for each folder.&lt;br&gt;
-The Data Folder- helps in organizing and storing data in xls or csv file in a place that is reachable .&lt;br&gt;
-The notebook Folder- helps in storing data while if using python e.g: jupyta notebook &lt;br&gt;
-The scripts folder- help is in storing any scripts data&lt;br&gt;
-Ananlys.py- helps in storing python scripts &lt;br&gt;
When creating these folders we use gitbash to create these folders and files&lt;br&gt;
-README.md- describe ur project in detail but easy term for non technical people to understand&lt;/p&gt;

&lt;p&gt;That entire project can be one Git repository.&lt;br&gt;
Repository- is a project being tracked by Git.``&lt;/p&gt;

&lt;h3&gt;
  
  
  Creating folders and files.
&lt;/h3&gt;

&lt;p&gt;Using Gitbash we use specific codes to create the folders and files:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Identify first where your desktop is in your PC :&lt;br&gt;
&lt;code&gt;cd ls&lt;/code&gt;&lt;br&gt;
This will list all the list in your pc&lt;br&gt;
&lt;code&gt;cd onedrive&lt;/code&gt;&lt;br&gt;
&lt;code&gt;cd desktop&lt;/code&gt;&lt;br&gt;
Here we have already identified where our desktop is located and where we are going to create the files and folders.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Creating the main folder:&lt;br&gt;
&lt;code&gt;cd my-first-github-project&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Creating other folders inside the main folder:&lt;br&gt;
&lt;code&gt;mkdir data&lt;/code&gt;&lt;br&gt;
&lt;code&gt;mkdir notebook&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Creating Files in the main folder:&lt;br&gt;
&lt;code&gt;touch analysis.py&lt;/code&gt;&lt;br&gt;
&lt;code&gt;touch README.md&lt;/code&gt;&lt;br&gt;
-Writing texts on README.md we can use echo, that is if it is a short text&lt;br&gt;
example:&lt;br&gt;
Heading&lt;br&gt;
&lt;code&gt;echo "# Kenyan Hospital Health Records Analysis" &amp;gt; README.md&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Subheading&lt;br&gt;
&lt;code&gt;`&lt;br&gt;
echo "## Project Overview" &amp;gt;&amp;gt; README.md&lt;br&gt;
echo "### Project Summary" &amp;gt;&amp;gt; README.md&lt;br&gt;
`&lt;/code&gt;&lt;br&gt;
When writing long texts , we run a code on gitbsh , which opens a window where we can write all long texts and just save it, which i easier that using "echo"&lt;br&gt;
We will run below code:&lt;br&gt;
&lt;code&gt;nano README.md &lt;/code&gt;&lt;br&gt;
which will open the window, after updating you record click:&lt;br&gt;
"ctrl+O", to save the updated record then "ctrl+X" to log out of that window and back to gitbash to continue with your other work.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Generating SSH Key
When Generating a ssh key run the code that will gerenarate the ssh key, then copy and paste the code on your github  this will link the gitbash and github such that when pushing and pulling the code they will be visible on gitbuh and bash&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;ssh-keygen -t ed25519 -C "your_email@example.com" &lt;/code&gt;&lt;br&gt;
After successfully adding the SSH key it should be displayed as on the attached screenshot:&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%2F7veambpf47fyd9u7amh3.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%2F7veambpf47fyd9u7amh3.png" alt=" " width="800" height="254"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Back to your Gitbash run the following codes to ensure gitbash and github are linked as expected:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git init&lt;/code&gt;= it initializes git repository&lt;br&gt;
&lt;code&gt;git add&lt;/code&gt; = put documents in a folder ready to archive&lt;br&gt;
&lt;code&gt;git commit -m "First commit on Kenyan Hospital Health Records Analysis"&lt;/code&gt; = archive that version with a label&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git push --u origin main&lt;/code&gt; = send the archived version to GitHub from the main branch&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git pull origin main&lt;/code&gt;= Pulls from the updated Github to gitbash for your visibility when listing.&lt;/p&gt;

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