<?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: Mburu Kibandi</title>
    <description>The latest articles on DEV Community by Mburu Kibandi (@mburu_kefoi).</description>
    <link>https://dev.to/mburu_kefoi</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%2F4090370%2F8602e211-804a-46a4-a60d-addc6f290344.jpg</url>
      <title>DEV Community: Mburu Kibandi</title>
      <link>https://dev.to/mburu_kefoi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mburu_kefoi"/>
    <language>en</language>
    <item>
      <title>Data Modelling,Relationships &amp; Joins</title>
      <dc:creator>Mburu Kibandi</dc:creator>
      <pubDate>Wed, 16 Sep 2026 07:00:58 +0000</pubDate>
      <link>https://dev.to/mburu_kefoi/data-modellingrelationships-joins-3g2j</link>
      <guid>https://dev.to/mburu_kefoi/data-modellingrelationships-joins-3g2j</guid>
      <description>&lt;h2&gt;
  
  
  1.Data Modelling
&lt;/h2&gt;

&lt;p&gt;Data Modelling refers to the process of structuring and organising tables,columns and relationships in Power BI so that they work together logically.&lt;br&gt;
It typically involves &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Deciding which tables you need and their relationships&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Managing relationships&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Creating schema&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Setting data types ,hierarchies and naming conventions&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Think of data modelling as essentially the foundation of the house where reports,dashboard and DAX  functions are built on top.A weak foundation will ofcourse not sustain whats on top&lt;/p&gt;

&lt;h3&gt;
  
  
  What are the importance of data modelling ?
&lt;/h3&gt;

&lt;p&gt;Data modelling has various importance but first we have to acknowledge it forms the basis of what basically can be done with our data&lt;/p&gt;

&lt;p&gt;A well structured data model ensures filters can propagate correctly across visuals.Filtering an dimension like date or product correctly flows into fact tables giving correct aggregation.A messy data model might silently produce wrong number and you know whats worse? Wrong  analysis.A data analyst can make right insights from the wrong results and this will majorly affect business performance&lt;/p&gt;

&lt;p&gt;Data Analysis Expressions(DAX) majorly depends on the relationships and filter context.If at all your model isn't structured well than DAX  expressions might give wrong outputs.It is even harder to debug if your data isn't structured correctly&lt;/p&gt;

&lt;p&gt;Business continue to grow and with growth comes new tables,measures and reports.A proper structured model will make it easy to add such tables, measures and report builders &lt;/p&gt;

&lt;p&gt;Before diving deep into data modelling let's discuss some concepts that will make our understanding even better &lt;/p&gt;

&lt;h3&gt;
  
  
  Dimension Table
&lt;/h3&gt;

&lt;p&gt;Dimension tables holds descriptive,qualitative details about the entities.Think of it as a table that describe entities,entities in this case being the things you model.Dimension tables like DimCustomer,DimProducts or DimLocation hold text,dates or descriptions.A dimension table usually contains column or columns that act as unique identifier that connects it to a fact table&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Fact Table
&lt;/h3&gt;

&lt;p&gt;A fact table records numeric events or transactions that happened in your business e.g FactSales,FactOrders or FactTransactions. Usually contains number you can add,sum,count or average.A fact table contains dimension key column that relate to dimension 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%2Fociujxllc2z8g76zr1cm.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%2Fociujxllc2z8g76zr1cm.png" alt="Fact Table" width="800" height="698"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A dimension key determines the dimensionality of a table where as dimension values determine the granularity of a fact table.It is almost impossible to state the granularity of a table without knowing the values in a dimension table.Take for instance we have Date and Product Key as our two dimensions table,it is until we know the date values that we can state the granularity of a fact table&lt;/p&gt;

&lt;p&gt;There are no table properties modellers set to set table as either dimension or fact.It is infact determined by model relationships.A common relationship type is one to many where the one side is set to dimension table and many side set to fact table&lt;/p&gt;

&lt;h3&gt;
  
  
  Normalization and Denormalization
&lt;/h3&gt;

&lt;p&gt;Normalization is simply the act of storing data in a way that reduces repetition.Consider a sales table with product key,product characteristics,product name,color and size.A sales table is said to be normalized if it has the product key only as a field.However if it contains products details apart from the key the table is denormalized&lt;/p&gt;

&lt;h3&gt;
  
  
  Data Modelling Approaches
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Flat Table
&lt;/h4&gt;

&lt;p&gt;All data is combined into one single simple table.Here there are no relationships whatsoever as everything lives in one place.It is extremely simple to understand&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%2Fufu4h6wc7tk9a9jxsmrv.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%2Fufu4h6wc7tk9a9jxsmrv.png" alt="flattable" width="800" height="489"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Where it may be appropriate
&lt;/h4&gt;

&lt;p&gt;Even though a flat table is a single unnormalized table containing all attributes in one place BI tools like Excel,PowerBI process single tables faster than complex joins across multiple relationships&lt;/p&gt;

&lt;p&gt;Aggregations like sum,count,group by run across such datasets without expensive JOIN operations &lt;/p&gt;

&lt;p&gt;It is also the best model for Low-Volume datasets where relational normalizations adds unnecessary setup overhead.Standalone projects and small projects don't need relationships whereas you can have all information in one place&lt;/p&gt;

&lt;h4&gt;
  
  
  Advantages &amp;amp; Disadvantages
&lt;/h4&gt;

&lt;h4&gt;
  
  
  Advantages
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Extremely simple to understand&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No relationships or filter propagation issues&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Easy and fast to build initially&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Disadvantages
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Massive Data Redundancy&lt;br&gt;
&lt;em&gt;Data Redundancy&lt;/em&gt; It usually refers to data stored repetitively like for example descriptive attributes being repeated across many rows.Redundancy always poses high risk of updating anomalies not forgetting how wasteful of space it can be&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Repeating data across many rows makes it very difficult to maintain because updating just one piece of information may require changing thousands of rows&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It is impossible just to reuse dimensions across multiple fact tables since all information is baked in one table&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;At some point the file becomes very large because combining data enlarges the model&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Power BI Performance &amp;amp; Model Complexity
&lt;/h4&gt;

&lt;p&gt;Flat tables are generally the worst performing structure in Power BI at any meaningful scale.Even though VertiPaq compresses columns having all columns in one table reduces compression compared to separating them into fact and dimensional tables&lt;/p&gt;

&lt;p&gt;The irony is the model is harder to analyze meaningfully and yet all characteristics are in one table.This blurs analytical clarity even though they are no relationships to manage&lt;/p&gt;

&lt;p&gt;With a flat table you miss on DAX time intelligence functions&lt;/p&gt;

&lt;h4&gt;
  
  
  Snowflake Schema
&lt;/h4&gt;

&lt;p&gt;A snowflake schema is a data warehouse design where dimension tables are split into sub tables that are normalized. In this design we have multiple related tables as opposed to one flat table.Name comes from its diagram that resembles a snowflake with one central fact table branching out its dimensions&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%2Fs5hkvairsi0ebfgevz9q.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%2Fs5hkvairsi0ebfgevz9q.png" alt="Snowflake" width="799" height="531"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Above is a structure of a snowflake model with &lt;em&gt;DimProductcategory&lt;/em&gt; as a subtable from DimProduct. Just to elaborate on how it is structured here is an example of its schema&lt;br&gt;
DimProduct: Product ID,Product Name,Category Name,SubCategory ID&lt;br&gt;
DimSubCategory: SubCategory ID, SubCategory Name,Category ID&lt;br&gt;
DimCategory: Category ID,category Name&lt;/p&gt;

&lt;h4&gt;
  
  
  Where it may be appropriate
&lt;/h4&gt;

&lt;p&gt;When dimension tables have million of rows,normalizing reduces redundancy saving on significant disk space&lt;/p&gt;

&lt;p&gt;When managing complex category trees,a normalized structure provides a single source of truth so updates can only happen in one place&lt;/p&gt;

&lt;p&gt;Sometimes you inherit a schema that exists in a normalized source system&lt;/p&gt;

&lt;p&gt;When building a central data warehouse that serves multiple BI platforms beyond Power BI,normalization ensures data consistency across all reporting tools&lt;/p&gt;

&lt;h4&gt;
  
  
  Advantages &amp;amp; Disadvantages
&lt;/h4&gt;

&lt;h4&gt;
  
  
  Advantages
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Reduced data redundancy eliminating risk of update anomalies&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Easier maintenance of hierarchical data&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Clear representation of hierarchical relationships&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Disadvantages
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;More complex joins or relationships - Queries and filters need to go through many hops thus resulting in slower time in execution&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Slower query performance - Commands must transverse multiple hops inorder to get to descriptive attributes &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;With more tables,more relationships the model becomes larger and complex to navigate and maintain.It also becomes harder for report builders to understand at a glance&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Power BI performance &amp;amp; Model complexity
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;DAX Complexity - Snowflake dimension may require multiple related calls making formulas more complex&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;More tables and more relationships make it harder to read ,maintain and troubleshoot &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Filter context has to flow through additional relationships increasing chances of misconfigured cross filter directions&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Star Schema
&lt;/h4&gt;

&lt;p&gt;A data warehouse design model where a single central fact table connects directly to multiple surrounding dimension tables usually forming a star shape.A fact table usually sits at the centre of the model consisting of foreign keys that connect dimension tables.The dimension table is usually denormalized into single tables to reduce on joins unlike the snowflake design&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%2F85xvmwmzwzowkd0wfotg.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%2F85xvmwmzwzowkd0wfotg.png" alt="Star Schema" width="800" height="554"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Where it is may be appropriate
&lt;/h4&gt;

&lt;p&gt;In almost every Power BI model,it is the most appropriate model structure for reporting and analytics&lt;/p&gt;

&lt;p&gt;Where simplicity and performance are priorities over storage optimization&lt;br&gt;
When building models that are DAX heavy &lt;/p&gt;

&lt;p&gt;When end users need to self serve with visuals and slicers without navigating a complex web of relationships&lt;/p&gt;

&lt;h4&gt;
  
  
  Advantages &amp;amp; Disadvantages
&lt;/h4&gt;

&lt;h4&gt;
  
  
  Advantages
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Simple intuitive structure making it easy for report builders to navigate and understand&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fewer relationships/joins - Each dimension is a single hop from the fact table,filter propagation is simply just direct&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Faster query performance&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Disadvantages
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Data Redundancy - Descriptive attributes are repeated across many rows&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Less 'pure' from a normalization standpoint&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Power BI Performance &amp;amp; Model Complexity
&lt;/h4&gt;

&lt;p&gt;Far simpler to read,maintain and debugg. Filter context flows from dimension to fact tables without the need of transversing multiple hops&lt;/p&gt;

&lt;p&gt;DAX formulas and measures are easy to execute because the related attributes are just one relationship away &lt;/p&gt;

&lt;p&gt;Star Schemas are the optimal structure for VertiPaq,because dimension tables are flattened ,Vertopaq compresses repeated columns efficiently,the storage penalty you'd expect in a traditional database barely applies&lt;/p&gt;

&lt;h2&gt;
  
  
  2.Relationships
&lt;/h2&gt;

&lt;p&gt;A relationship in Power BI is a defined link between two tables based on one common column.It essentially tells Power BI that this is how these tables are connected and here is how to match them.When data is distributed across multiple tables,Power BI needs to know that Customer ID in Sales table refers to Customer ID in Customer table&lt;br&gt;
We establish relationships by matching primary key in the &lt;em&gt;dimensional table&lt;/em&gt; to the foreign key in the &lt;em&gt;fact table&lt;/em&gt;.Creating relationships between tables allows calculations and aggregations to work across tables so that multiple columns can be used from separate tables&lt;/p&gt;

&lt;p&gt;Before we discuss the different types of relationships we need to understand various terms associated with relationships&lt;/p&gt;

&lt;p&gt;Cardinality is basically how you establish relationships based on numerical count of matching rows.There are four different types of cardinalities&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;One to one relationship&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;One to many relationship&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Many to one relationship&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Many to many relationship&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Primary key is a unique identifier column in a table.It has no duplicates,one key usually represent one value where as foreign key is a primary key in a different table&lt;br&gt;
We can take for example CustomerID as a primary key in DimCustomer.Each value in the CustomerID column represents a unique customer &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%2Fn8afrl3ygp9roioow2jt.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%2Fn8afrl3ygp9roioow2jt.png" alt="Primary Key" width="553" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Above is an image demonstrating primary keys.Basically no other customer apart from Amina Hassan can be identified with customerID 1.Now we need to understand that even though primary key appears once ,foreign keys can appear more than once in a table.Suppose we have a sales table showing the number of sales transactions, we can have Amina Id's appearing more than once,twice because yes Amina can make more than one transaction&lt;br&gt;
In a nutshell a foreign key will just refer you to the primary table&lt;/p&gt;

&lt;p&gt;Active &amp;amp; Inactive relationships.Power BI allows only one active relationship between two tables a time.If you have more than one relationship between two tables then only one will be active and the other will be inactive .You will need to activate the other relationship by your own&lt;/p&gt;

&lt;p&gt;Referential integrity is a relational database concept that ensures relationships between tables remain valid and consistent.It ensures every foreign key in a fact table matches primary key in the referenced table&lt;/p&gt;

&lt;p&gt;Knowing all these concepts we can go one and discuss the different type of relationships&lt;/p&gt;

&lt;h3&gt;
  
  
  One to One Relationship
&lt;/h3&gt;

&lt;p&gt;For a one to one relationship both columns connected have common and unique values.Take for instance an employee table and an employee details table. You can only have one employee with his/her details,you cant have one employee having different details&lt;/p&gt;

&lt;h3&gt;
  
  
  One to Many Relationship
&lt;/h3&gt;

&lt;p&gt;A single row in one table matching multiple rows in a different table.Suppose we have a Customer table and Sales table,one customer can make two,three different transactions&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%2Fg5cbggbdh6t8g8fe8rqa.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%2Fg5cbggbdh6t8g8fe8rqa.png" alt="One to Many Relationship" width="800" height="505"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can clearly see from the above image that we can have one product being sold severally in the sales table&lt;/p&gt;

&lt;h3&gt;
  
  
  Many to One Relationship
&lt;/h3&gt;

&lt;p&gt;It is usually the reverse of one to many relationship,many rows from one table having a match with one row in  another 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%2Fbsuha7bq9581rxjn38k7.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%2Fbsuha7bq9581rxjn38k7.png" alt="Many to One" width="799" height="493"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Many to Many Relationship
&lt;/h3&gt;

&lt;p&gt;Here we have many rows from one table matching many rows from another table.We can have one specific doctor having very many different patients he/she treats and one patient having many doctors he/she visits&lt;/p&gt;

&lt;h3&gt;
  
  
  2.1 Filter Direction
&lt;/h3&gt;

&lt;p&gt;Now,you need to understand that when you creating relationships you invoke different types of filtering.How filtering behaves depends on the type of relationship&lt;br&gt;
When you do create a one to one relationship or one to many,you do apply single cross filter direction which filters in one direction where as both cross filter filter in both directions&lt;/p&gt;

&lt;p&gt;Lets say you do filter a product from DimProduct which is connected to FactSales then you are going to have one aggregated result showing the total sales made from that product.This is a classical example of single cross filter direction&lt;/p&gt;

&lt;p&gt;Bi-directional relationship/Both filter direction could result in ambiguous filter propagation.Power BI requires there be exactly one path for a filter to travel.Filtering in both directions create multiple paths and Power BI wont know which one to use.Even if we do have Power BI filtering in both directions successful incase the numbers look wrong,debugging becomes such a hustle because instead of checking a single filter path,you'll need to check in both direction&lt;/p&gt;

&lt;h3&gt;
  
  
  3.Joins
&lt;/h3&gt;

&lt;p&gt;Joining basically in layman terms can be defined as combining two datasets.Merge is the same as join in relational databases,for merging datasets with each other you need to have joining fields.Unlike relationship tab in Power BI which doesn't allow you to create relationships based on two columns,merging do allow &lt;/p&gt;

&lt;h3&gt;
  
  
  What are the different types of join
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: The type of join is actually very important because you get very different result set based on different set of join.&lt;br&gt;
When you join two datasets together first table is considered the LEFT table and the second table is considered the RIGHT table&lt;/p&gt;

&lt;h4&gt;
  
  
  Left Outer Join
&lt;/h4&gt;

&lt;p&gt;It is usually the default type of join.If you don't specify the type of join,your PC will always default to Left outer join.For this kind of join it returns all rows from the first/left table and returns all matching rows from the right table.For the non matching rows it returns 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%2F0wwezqurgfp343tb6vof.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%2F0wwezqurgfp343tb6vof.png" alt="Left Join" width="800" height="606"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Right Outer Join
&lt;/h4&gt;

&lt;p&gt;It returns all rows from the right table and matching rows 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%2Fscpfkbt2pnuzmvkm4vvy.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%2Fscpfkbt2pnuzmvkm4vvy.png" alt="Right Join" width="800" height="592"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Full Outer Join
&lt;/h4&gt;

&lt;p&gt;A type of join that returns all rows from both the left and right table whether they do match or not.It acts as a combination of both Left and Right Join.Matching rows are shown as a single row and for non matching the rows have nulls&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%2Fhi7h3ggcd29f8xtk3sab.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%2Fhi7h3ggcd29f8xtk3sab.png" alt="Full Outer Join" width="800" height="592"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Inner Join
&lt;/h4&gt;

&lt;p&gt;Keeps records that match from both tables.It drops any rows that don't match &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%2F6aavni4l1pfwcyf90j68.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%2F6aavni4l1pfwcyf90j68.png" alt="Inner Join" width="800" height="373"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;h4&gt;
  
  
  Left ANTI
&lt;/h4&gt;

&lt;p&gt;Keeps records from the left table that have no matching rows with 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%2Fx0r95t5xd4cgy3sgo01e.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%2Fx0r95t5xd4cgy3sgo01e.png" alt="Left ANTI" width="800" height="261"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Right ANTI
&lt;/h4&gt;

&lt;p&gt;Keeps records from the right table that have no matching rows with 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%2Fcaeldz4xpnboo2aua2td.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%2Fcaeldz4xpnboo2aua2td.png" alt="Right ANTI" width="800" height="318"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  How do i perform these joins
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;In Power BI,under home tab choose transform data&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;After launching Power Query,still under home tab on the farmost right side click on Merge Queries&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;From the dropdown select on Merge Queries as New&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You can choose your the tables you want to join and from the tables choose the joining fields&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Choose the kind of join from the Join Kind dropdown&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%2F9xwqk9ewzr6tt57o0zb1.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%2F9xwqk9ewzr6tt57o0zb1.png" alt="Joining" width="800" height="728"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  3.1 Power Query Joins VS Power BI Relationships
&lt;/h3&gt;

&lt;p&gt;Although both power query and power BI relationships let you "connect" tables, they work at completely different stages and they do give different results.A power query join will let you combine this tables physically because we have seen that when you join these tables you end up with one combined table but for a relationship the tables remain two distinct tables that have been connected to a special key&lt;/p&gt;

&lt;p&gt;Power Query joins are performed during the ETL(&lt;em&gt;Extract,Transform &amp;amp; Load)&lt;/em&gt; process or simply before you load data,this might be because you might need to transform this 'combined' table before loading it.On the other hand Power BI relationships happen in the model view when you have already loaded data&lt;/p&gt;

&lt;h4&gt;
  
  
  When do you choose merging over relationship ?
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;When you want a combined flat table where you can create visuals or report from this one table&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Sometimes you just can't afford to have other dimensional tables whereas you can just merge them&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Merging allows joining two separate fields especially when a single column is not enough.For example let's have region &amp;amp; year&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  How can excessive merging affect the structure of a data model
&lt;/h4&gt;

&lt;p&gt;Merging almost everything into one combined table destroys your schema and result to one bloated flat table.Here you lose the independent filtering because the dimension tables that were on there own have now been merged.It also becomes very hard to maintain because now you have data being combined into one and so correcting errors must be done on the one big table as opposed to one single dimension table&lt;/p&gt;

&lt;p&gt;Some Power BI tools do have their autodetect new relationships on and so when you do merge tables maybe perform left join,right join,inner join together with the anti joins your Power BI will try to relate them even when the merged tables are very different from related tables.In such instances you see you going to have relationships even when tables are not related&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%2Fb9ehou2o05i1yzjrohyg.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%2Fb9ehou2o05i1yzjrohyg.png" alt="section six" width="800" height="589"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A perfect description is shown above&lt;/p&gt;

&lt;h4&gt;
  
  
  Why should we keep fact and dimensional tables separate?
&lt;/h4&gt;

&lt;p&gt;By now one should clearly understand that having these two types of tables separately,Power BI is going to have the DAX functions working way much better and easier.Filtering from one table is also going to more efficient and easier and to expound more on filtering,you can reuse tables such that you can have  one dimension table used to filter two different tables&lt;/p&gt;

&lt;p&gt;Imagine a situation where by you just to correct one table and other related information becomes updated.It is very easy to maintain when you do have dimension tables separated from fact tables&lt;/p&gt;

&lt;p&gt;Power Bi performance is also great when you have these tables separated.You are having VertiPaq working super great with star schemas compressing these repeated files making querying way much efficient&lt;/p&gt;

&lt;h3&gt;
  
  
  4.Recommended Power Bi Visual
&lt;/h3&gt;

&lt;p&gt;For a business intelligence project,I'm going to have to go with &lt;br&gt;
star schema because with a star schema your query and report performance is going to simpler and faster because relationships are closer as compared to a snowflake schema where there are many hops&lt;/p&gt;

&lt;p&gt;Just for the same reason of having relationships one step away from each other,DAX functions perform better than the snowflake schema.When talking about querying and DAX simplicity we don't even need to include flat tables because it is the worst hands down &lt;/p&gt;

&lt;p&gt;Apart from data redundancy that snowflake schemas performs better,star schema ace all other aspects of a good model,i.e maintaining a star schema is way much simpler,its model performance and complexity is way much better and even for the issue of data redundancy Power Bi vertipaq compresses these repeated values making it better than the traditional ones&lt;/p&gt;

&lt;h3&gt;
  
  
  5.Conclusion
&lt;/h3&gt;

&lt;p&gt;Good data modelling isn't about the clever transformations,it is about designing something Power BI engine can optimize. It is not how complex your model looks but how efficient it runs.From choosing the best modelling approach to knowing when to use different filter directions,different kinds of joins you need to ensure your system runs perfectly&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>data</category>
      <category>database</category>
    </item>
    <item>
      <title>Building an Interactive Excel Dashboard For E-Commerce Product Analysis:A Case Study of Jumia Products</title>
      <dc:creator>Mburu Kibandi</dc:creator>
      <pubDate>Mon, 07 Sep 2026 11:52:57 +0000</pubDate>
      <link>https://dev.to/mburu_kefoi/building-an-interactive-excel-dashboard-for-e-commerce-product-analysisa-case-study-of-jumia-2jgk</link>
      <guid>https://dev.to/mburu_kefoi/building-an-interactive-excel-dashboard-for-e-commerce-product-analysisa-case-study-of-jumia-2jgk</guid>
      <description>&lt;h2&gt;
  
  
  Project Introduction
&lt;/h2&gt;

&lt;p&gt;An analysis project turning Jumia product data into useful pricing,promotion and customer-engagement insights.The project will help us understand how price,promotions and customer feedback influence product performance.&lt;/p&gt;

&lt;h3&gt;
  
  
  Project Objectives
&lt;/h3&gt;

&lt;p&gt;By the end of  this project we should be able to understand and explain :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Whether large discounts are associated with more reviews&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Whether highly rated products attract stronger engagement&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Which products perform best based on ratings and reviews&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Whether price and rating move together&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Which products may need a different strategy or marketing&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Dataset And Data Quality Audit
&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%2Fdrxezth95kkioirusmow.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%2Fdrxezth95kkioirusmow.png" alt="Raw Data" width="800" height="888"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Our dataset above is made up of 6 columns namely;Product,Current Price,Old Price,Discount,Ratings and Reviews.It consist of 116 different rows.&lt;/p&gt;

&lt;p&gt;The data had no blanks for product,current price,discount and old price fields.It instead had a total of 58 blanks for both ratings and reviews.There were 3 exact duplicates reducing blank count to 55 for both ratings and reviews.&lt;/p&gt;

&lt;p&gt;They were no ratings above 5 or below 0 neither were they discounts outside the range of 0-100&lt;/p&gt;

&lt;h3&gt;
  
  
  Cleaning and Preparation Decisions.
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Cleaning
&lt;/h4&gt;

&lt;p&gt;Kudos to our data scientists because generally our data was clean except for minor changes.We did trim the product field removing extra spaces before the products.&lt;/p&gt;

&lt;p&gt;Current and old prices had their fields formatted as text so we went ahead to remove KSh,removed commas and extra spaces and formatted as currency aligning both fields to the right&lt;/p&gt;

&lt;p&gt;For the ratings field we removed 'out of 5' as generally ratings are always from 0 to 5.For the blank rows in ratings and reviews, we decided to totally leave them as blank as opposed to filling them as zeros because ideally zero would have translated to poor rather than "Not Reviewed" or "Not rated"&lt;/p&gt;

&lt;p&gt;Generally for the bigger part of cleaning work was actually getting to change the fields data type.&lt;/p&gt;

&lt;h4&gt;
  
  
  Preparations
&lt;/h4&gt;

&lt;p&gt;Enriching data to me is always the first step to analysis.Data enrichment will provide enhanced analytical depth,higher data accuracy and integrity and  improved decision making&lt;/p&gt;

&lt;p&gt;For our Jumia dataset, we did add numerous fields to help make our analysis easier.We checked for any abnormalities in our data and had them recorded&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Is our current price greater than our old price for any rows ?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Do we have rows that have missing values for discount,do we have rows that have discount outside the range of 0-100 ?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Do we have rows that have missing values for ratings,do we have any ratings outside the range of 0-5 ?&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The above questions resulted to three additional fields for checking prices,discount and ratings.We went ahead to categorise prices,ratings and discount such that &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;For every rate given below 3,excel was to return poor,between 3 and 4 were classified as average and excellent for rates above 4&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;We had low discount being any value below 20%,medium discount being values ranging between 20% and 40% and high discount as values from 40%&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For prices, we did create a threshhold to be able to group the prices.We had first quartile as the maximum for low prices and our third quartile as our minimum for high prices&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%2Fwoz3p1wxi13xdmpn2v28.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%2Fwoz3p1wxi13xdmpn2v28.png" alt="Cleaned Data" width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;These are some of the excel formulas we used to do cleaning and preparation of our data&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=TRIM()
=IF(OR([@Ratings]&amp;lt;0,[@Ratings]&amp;gt;5,ISBLANK[@Ratings]),"Check Rating","Ok")
=IF(OR([@Current Price] &amp;gt; [@Old Price]),"Check Price',"Ok")
=IF(OR([@Discount]&amp;lt;0%,[@Discount]&amp;gt;100%,ISBLANK[@Discount]),"Check Discount","Ok")

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

&lt;/div&gt;



&lt;p&gt;For categorising our prices,discount and ratings we used&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=IF(ISBLANK([@Ratings]),"Missing Rating",IF([@Ratings]&amp;lt;3,"Poor",IF([@Ratings]&amp;lt;4,"Average","Excellent")))
=IF[@Discount),"Missing Discount",IF([@Discount]&amp;lt;20%,"Low Discount",IF([@Discount]&amp;lt;40%,"Medium Discount","High Discount"))
=IF([@Current Price]&amp;lt;Price_Q1,"Low Prices",IF([@Current Price]&amp;lt;Price_Q3,"Medium Prices","High Prices"
Price_Q1=QUARTILE.INC(tblproducts[Current Price],1)
Price_Q3=QUARTILE.INC(tblproducts[Current Price],3)

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

&lt;/div&gt;



&lt;h4&gt;
  
  
  Engagement and performance flags
&lt;/h4&gt;

&lt;p&gt;We did define a rule using percentile and created flags for &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;high discount and low rating&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;high discount and low engagement&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;many reviews and average rating; and &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;strong engagement and excellent rating&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For high discount,strong engagement,low engagement and rating we used the following formulas to create our threshold&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;strong_engage =PERCENTILE.INC(tblproducts[@Review],0.75)
low_engage    =PERCENTILE.INC(tblproducts[@Review],0.25)
high_discount =PERCENTILE.INC(tblproducts[@Discount],0.75)
low_discount  =PERCENTILE.INC(tblproducts[@Discount],0.25)
average       =AVERAGE(tblproducts[@Rating])
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Our thresholds helped us find if there were products with high discount and low rating,high discount and low engagement or even many reviews and average rating.&lt;/p&gt;

&lt;h3&gt;
  
  
  PivotTables And Analysis
&lt;/h3&gt;

&lt;p&gt;A pivot table is simply a data tool used to instantly group,aggregate and transform data.Pivottables can actually be used to create pivotcharts that are used for visualizations.Visualization is actually a summary of our analysis&lt;/p&gt;

&lt;p&gt;For our Jumia dataset we did create different pivottables such as rating mix,discount mix,price vs  rating,engagement by discount and discount vs reviews.These pivottables actually helped us to findings and some recommendations&lt;/p&gt;

&lt;p&gt;We did analyse correlation between discount vs reviews,ratings vs reviews and current price vs rating.Unfortunately there were only weak correlations for all three meaning none of them variables change together.It is important to note that correlation is not causation.&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%2Fa31gx9ylc93xtd8zfu5q.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%2Fa31gx9ylc93xtd8zfu5q.png" alt="Analysis" width="800" height="429"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here is also a picture of our 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%2F4u103g5yvl4cxkl16nhg.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%2F4u103g5yvl4cxkl16nhg.png" alt="Dashboard" width="800" height="435"&gt;&lt;/a&gt;&lt;br&gt;
You notice that on the far left side of our dashboard we have table like structures that are not necessarily charts.They are called slicers and generally used to filter data.You might actually need more than one slicer for your dashboard and it is also important to note that you need to have them connected in order for one change to affect all charts&lt;/p&gt;

&lt;h4&gt;
  
  
  How do you connect slicers ?
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Right click the slicer&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A dropdown appears that you click on report connections&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You then proceed to select all pivottables you created&lt;br&gt;
&lt;strong&gt;Note&lt;/strong&gt;&lt;br&gt;
It is very important to note that if when creating your pivottables, you did click on add data to this data model in order to create on the existing worksheet,then your slicers simply won't work.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Findings And Recommendations
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Findings
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;A lot of products had their rates as missing.For those that were rated,most of them that were rated were rated excellent then averagely and lastly poor&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Only 5 products had high discount and received both low ratings and low engagements.It is evident that Jumia did not use discounts to offload terrible products&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Most highly rated products are products with high prices&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No correlation between discount and reviews,weak correlation between both price and ratings and ratings and reviews and since the coefficients were near zero,we do conclude that linear correlation failed because data was clustered tightly together&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Products with medium discount received the most reviews of 351,products with high discount received 334 reviews and products with low discount received 38 reviews&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Recommendations
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Maintain the good quality,good customer services for the highly rated products&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Products that were outliers in our study should be investigated and vendors should get to know why those products received low ratings and low engagements&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;We also need to know the kind of reviews(good or bad) our customer gives back to be able to enrich what we can find from our data.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;[ (&lt;a href="https://github.com/MburuKefoi/Jumia_Product_Performance_Dashboard" rel="noopener noreferrer"&gt;https://github.com/MburuKefoi/Jumia_Product_Performance_Dashboard&lt;/a&gt;) ]&lt;/p&gt;

&lt;p&gt;In an effort to keep this article fun and short,above is my link to the file so that you can check it out &lt;/p&gt;

</description>
      <category>analysis</category>
      <category>data</category>
      <category>datascience</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Excel For Data Analytics</title>
      <dc:creator>Mburu Kibandi</dc:creator>
      <pubDate>Sun, 30 Aug 2026 07:05:43 +0000</pubDate>
      <link>https://dev.to/mburu_kefoi/excel-for-data-analytics-gmd</link>
      <guid>https://dev.to/mburu_kefoi/excel-for-data-analytics-gmd</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Excel is a spreadsheet operator developed by Microsoft and used by different operating systems.It features a wide variety of tools from computational tools to graphical tools,infact Excel 2016 has up to 484 functions used to perform different tasks.It is undoubtedly one of the most powerful applications used in Data Analytics&lt;/p&gt;

&lt;h3&gt;
  
  
  Features of Excel
&lt;/h3&gt;

&lt;p&gt;Data in Excel is stored in a spreadsheet.A spreadsheet is a table made up of rows and columns.A collection of many spreadsheets form a workbook. &lt;/p&gt;

&lt;p&gt;A row in a spreadsheet is labelled with numbers i.e 1,2,3 whereas a column is letter labelled from A,B,C...&lt;/p&gt;

&lt;p&gt;The intersection of rows and columns form cells where information is stored,a cell in excel is therefore identified by the row and column header e.g A1,C5. This cell name is usually displayed in the name box,shown at the top left of your screen&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%2Fzigm85d0grqyihyhlecm.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%2Fzigm85d0grqyihyhlecm.png" alt="Excel Workbook 1" width="800" height="399"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you open your workbook,you are met with a command bar interface at the top of your window that we call ribbons.Ribbons categorises tools into logical operations for easy access of formatting tools,data management tools and graphical tools.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ribbon Structure&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Tabs: Top level headers on top of your screen (File,Home,Insert,Draw...)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Groups:Tabs' sub-sections that appears when you click on tabs,they usually display various tools i.e Font,Alignment,Data Types,Sort&amp;amp;Filter&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Command Buttons:A variety of buttons that execute commands when clicked upon.Some buttons will reveal lists of selectable choices one can choose from e.g Font Size,Number Format,Conditional Formatting&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h4&gt;
  
  
  What are Data Types ?
&lt;/h4&gt;

&lt;p&gt;Data Types refer to simply the type of text one can input in a cell.Excel typically allows different types of data types as discussed below&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Text(String) : Alphanumeric characters or words.Excel aligns text data type to the left by default&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Number : Salaries,Age,Quantities or Counts.Excel aligns numeric data types to the right.We have different number formats in excel that changes how values look in your screen i.e Currencies,General,Date&amp;amp;Time&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Date &amp;amp; Time : Another data type used to record dates.Dates in excel are stored sequentially from 1st January 1900 which is recorded as one,the reason behind being to make mathematical operations fast&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Formulas : Different type of functions used to perform computational and logical operations.It is easier to use SUM formulae to find totals than manually having to add them together.To write a formulae ,you start by an equal sign&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Boolean : Logical operations that return True or False&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Data imported as a csv file generally requires some cleaning.Once or twice you may find some clean data that requires no cleaning.Data cleaning involves you checking for the correct data type,expanding your fields or filling in some blanks.Cleaning your data prepares it for different formatting.&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%2Fn9suytivqxarhv7373k5.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%2Fn9suytivqxarhv7373k5.png" alt="Raw Data " width="784" height="648"&gt;&lt;/a&gt;&lt;br&gt;
Above is an image showing how raw data often looks like.&lt;/p&gt;

&lt;p&gt;The best way of cleaning your data is by first checking up for errors. Looking at our data we can see that current and old price fields both have the numbers aligned to the left as text as opposed to the right.It is also evident that review and ratings fields do have blanks.Apart from those minor errors our data is majorly clean&lt;/p&gt;

&lt;p&gt;We can start by highlighting the whole workbook then under home tab,look for format,usually a dropdown will appear if you click on it and then you can choose Autofit Column Width to expand our fields.Ideally we can do this manually by having our "cross-like" pointer between fields but it will take a lot of time&lt;/p&gt;

&lt;p&gt;Just after formatting your column width,highlight your workbook and under home tab,apply filter&lt;br&gt;
Your excel should primarily look like this&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%2Fwhvxnw3higiz8y4iaw47.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%2Fwhvxnw3higiz8y4iaw47.png" alt="Cleaning " width="800" height="410"&gt;&lt;/a&gt;&lt;br&gt;
You can change the headings to be bold and add some background colour to make it more visible.&lt;/p&gt;

&lt;p&gt;First things first,we need to remove duplicates from our dataset,we will highlight our workbook and under data tab choose remove duplicates from data tools.Excel will pop up a message of how many unique values are left.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt; : The easiest way of highlighting the whole workbook is by clicking on the triangle on top of your first row&lt;/p&gt;

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

&lt;p&gt;Here are some quick steps on how to clean your current and old price fields&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Highlight column "Current Price" by clicking on your column header&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ctrl + H will pop up Find and Replace dialog box,where you can ask your PC to find KSh and for now do not replace with anything.Leave the replace input box empty.Click on Replace All to Replace&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Highlight column "Current Price"&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Under Home tab,Find the Group Number and click on the arrow,change the type of your number to currency then choose 'KES' as Kenyan symbol&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your column should have your data aligned to the left.Redo the same for Old Price field&lt;/p&gt;

&lt;p&gt;For reviews and ratings,here is how to best clean your data&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Click on the filter symbol&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Sort your data from largest to smallest,sorting your data prompts your PC to have the cells with errors to come first,this often is the easiest method for finding errors because some datasets can be very large &lt;br&gt;
For our data sorting doesn't have the blanks coming first ,so&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Highlight the column "Reviews"&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ctrl + H for the Find and Replace dialog box,leave the find input box as blank and type Unknown in the replace input box&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Do the same for ratings and discount fields&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%2Fzu7p9n8ltb5m6kvohjzm.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%2Fzu7p9n8ltb5m6kvohjzm.png" alt="Cleaned" width="799" height="390"&gt;&lt;/a&gt;&lt;br&gt;
Above is our cleaned data&lt;/p&gt;

&lt;p&gt;This data has been generally clean and did not need too much changes.For some dataset with numerous fields,cleaning will surely take some time.For instance,some data will have different words to mean the same thing e.g NYC and New York City in  different cells.We can even encounter misspellings.It is important we correct to have one word to have one meaning all through&lt;/p&gt;

&lt;p&gt;For such cases we;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Ctrl + H for the Find and Replace dialog box and type New York City in the find input box and replace it with NYC&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click on Replace All to Replace.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some datasets will have names of people in different cases.You may find some surnames are written in uppercase where as the first names are written in lowercase.We need to change the names to proper cases and here we will invoke text functions&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Text Functions&lt;/strong&gt;&lt;br&gt;
We have different text functions that transform data differently&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Upper : Upper function will change the data to uppercase.Usually written as "=UPPER(cell address)"&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Lower : Lower function will change data to lowercase.Usually written "=LOWER(cell address)"&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Proper : Proper function changes your data to proper case,where the first letter of your word is capital and the rest small e.g John.To invoke this function "=PROPER(cell address)" &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Incase you find yourself where you have to format names then follow these steps&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Highlight the column,right click and insert two new columns &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Type out the respective formula you want in one column&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Copy the result of column1 and paste special to column2&lt;br&gt;
We choose the option of pasting values inorder to be able to delete the column the formula we are referencing otherwise when we don't paste values and delete the column we are referencing,our new column will return an error. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Data Validation
&lt;/h3&gt;

&lt;p&gt;Data validation helps to restrict what data can be entered.It is usually useful when data entry has not been done.Data validation tool is under the Data tab&lt;br&gt;
To validate data,&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Highlight the column&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Under data tab,select data validation,a dropdown of options usually appears and you can choose data validation&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A dialog box pops up that has two input boxes,Allow and Data.You can choose list from the list that appears when you click on the arrow at the end of the allow input box and type the entries you want allowed in the source input box.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click Ok &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%2Fzokwcalsxfnemrzmnx0w.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%2Fzokwcalsxfnemrzmnx0w.png" alt="Data Validation" width="800" height="711"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;In a nutshell,data cleaning is just finding errors,removing duplicates and missing values in a dataset to make it accurate and ready for analysis.Excel does this perfectly&lt;/p&gt;

</description>
    </item>
    <item>
      <title>A GitHub Project Using Git</title>
      <dc:creator>Mburu Kibandi</dc:creator>
      <pubDate>Sun, 23 Aug 2026 06:48:06 +0000</pubDate>
      <link>https://dev.to/mburu_kefoi/a-github-project-using-git-20dc</link>
      <guid>https://dev.to/mburu_kefoi/a-github-project-using-git-20dc</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GitHub&lt;/strong&gt; is a developer platform that allows developers to create,store and manage their code.It provides access control,bug tracking and task management for every project. &lt;strong&gt;Git&lt;/strong&gt; is a system used to handle everything from small to large projects. &lt;strong&gt;GitHub&lt;/strong&gt; uses &lt;strong&gt;Git&lt;/strong&gt; as its distributed version control.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step by step guide
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Creating a folder
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;In your git version,type&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;pwd(print working directory)&lt;br&gt;
pwd will basically tell you the absolute path for your directory.It is usually essential to know in order to be able to navigate to the right directory&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frn84w84v1s38bofguqs6.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%2Frn84w84v1s38bofguqs6.png" alt="pwd command" width="306" height="64"&gt;&lt;/a&gt;&lt;br&gt;
  From the image above,my pc path is from C to Users to HP&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;In order to navigate to the right directory we are going to run the cd command.Cd which stands for change directory will change your directory to your preferred directory.In this case we will cd to desktop where we store our files&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In the Desktop directory we can now create a folder that we intend to push to GitHub.Git uses the command mkdir(make directory) to create a folder.Lets name the folder "My GitHub Project"&lt;br&gt;
&lt;em&gt;(When you check your File Explorer you will find a new folder named My GitHub Project)&lt;/em&gt;&lt;br&gt;
We wish to create another folder 'data',this folder should be a subfolder inside My GitHub Project.To do this,we cd to the parent folder and then run the mkdir command &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For our GitHub project, we need a README markdown file that normally gives a brief explanation of what the project is about.It is usually the face of the project.To create a README file we run the command touch README.md&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;We want to add a brief description of what the project is about.&lt;br&gt;
To add the description we are going to use the echo command,below is a screenshoot of how to write the command&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%2Fluv4n9307sne304tqw50.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%2Fluv4n9307sne304tqw50.png" alt="echo commands" width="799" height="247"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;NOTE:&lt;/strong&gt; &lt;br&gt;
We use a single greater sign to overwrite what we have in the README file and use double greater sign to add to what is in the file&lt;br&gt;
Below is an image of what we've done till now&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%2Fbrfx3c0f255cye8izs59.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%2Fbrfx3c0f255cye8izs59.png" alt="key" width="800" height="905"&gt;&lt;/a&gt;&lt;br&gt;
The cat(concatenate) command read files and print them directly as they appear&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To copy data that should be analysed we can run&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;cp ~/Downloads/MOCK_DATA.csvdata/&lt;/code&gt;&lt;br&gt;
where &lt;br&gt;
"/Downloads/MOCK_DATA.csv" is the source and data/ is the destination&lt;/p&gt;

&lt;h5&gt;
  
  
  Pushing to GitHub
&lt;/h5&gt;

&lt;p&gt;We now have our folder and we can now push it to GitHub&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Run the command git init that creates an empty repository in git,it allows git to start watching file changes,tracking history and managing branches&lt;br&gt;
When you run the git init command the PC returns "Initialized empty repository..."&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;We then run git status command,a command that shows what git sees&lt;br&gt;
The PC returns "nothing added to commit but untracked files present"&lt;br&gt;
We now run &lt;br&gt;
&lt;code&gt;git add .&lt;/code&gt;&lt;br&gt;
git add prepares changes for the next commit&lt;br&gt;
Now when you run&lt;br&gt;
&lt;code&gt;git commit -m "Add commit message"&lt;/code&gt;&lt;br&gt;
Git now saves changes to the git repository&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The next step is to check our branch and ensure its under main branch.If your run git branch and the PC returns master,then you have to rename it to main by running&lt;br&gt;
&lt;code&gt;git branch -m main&lt;/code&gt;&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%2Fnosc507b55tvc5v2j0bp.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%2Fnosc507b55tvc5v2j0bp.png" alt="git commands" width="800" height="543"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Log in your GitHub and create a repository and copy your SSH key,then navigate back to your git version and the following commands&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%2Fihcdirf6r35lxfcbkqb7.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%2Fihcdirf6r35lxfcbkqb7.png" alt="pushing to github" width="767" height="215"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can finally run &lt;code&gt;git push -u origin main&lt;/code&gt; and enter your GitHub passphrase to push to GitHub.&lt;/li&gt;
&lt;/ul&gt;

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