<?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>Forem: Edwin Omondi </title>
    <description>The latest articles on Forem by Edwin Omondi  (@owera).</description>
    <link>https://forem.com/owera</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3717077%2Fd4a8b8c6-077d-45c5-af1b-68f814440987.jpeg</url>
      <title>Forem: Edwin Omondi </title>
      <link>https://forem.com/owera</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/owera"/>
    <language>en</language>
    <item>
      <title>Demystifying SQL Joins &amp; Window Functions</title>
      <dc:creator>Edwin Omondi </dc:creator>
      <pubDate>Sat, 14 Mar 2026 01:55:09 +0000</pubDate>
      <link>https://forem.com/owera/demystifying-sql-joins-window-functions-2mm4</link>
      <guid>https://forem.com/owera/demystifying-sql-joins-window-functions-2mm4</guid>
      <description>&lt;h2&gt;
  
  
  1. SQL Joins
&lt;/h2&gt;

&lt;p&gt;The Structure Query Language (SQL) Join is a command clause that combines records from two or more tables in database. It is a means of combining data fields from two tables by using values common to each table.&lt;/p&gt;

&lt;p&gt;If you work with databases, you'll likely need to use SQL Joins to retrieve data from multiple tables at some point in your work. These impactful clauses allow you to get information from separate tables so that you get the right information you need to make the best possible decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is a Join in Sql?
&lt;/h2&gt;

&lt;p&gt;In Structure Query Language (SQL), a Join is used to connect two or more records within a relational database. As their name suggests, relational databases organize data based on pre-established relationships, which define how data contained in one table relates to data contained within another (or several others).&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.amazonaws.com%2Fuploads%2Farticles%2F48k7z0wio2ycpl3533ul.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.amazonaws.com%2Fuploads%2Farticles%2F48k7z0wio2ycpl3533ul.png" alt=" " width="720" height="517"&gt;&lt;/a&gt;&lt;br&gt;
Fig.1.0&lt;/p&gt;

&lt;p&gt;The Join clause retrieves data from related tables in a database. Because it retrieves data from multiple tables, however, the SQL Join clause is more complex than a simple query that retrieves data from a single table. &lt;/p&gt;

&lt;h2&gt;
  
  
  Types of Sql Joins
&lt;/h2&gt;

&lt;p&gt;There are many different use cases for SQL Joins, and they are crucial when mapping out relationships between tables in your database. &lt;/p&gt;

&lt;p&gt;There are four primary types of SQL Joins that you can use: Inner Join, Left Outer Join, Right Outer Join, and Full Outer Join. Explore these four types of JOINs along with some sample SQL Join clauses below:&lt;/p&gt;

&lt;h2&gt;
  
  
  a) Inner Join
&lt;/h2&gt;

&lt;p&gt;Inner Joins combine two tables based on a shared key. For example, if you have a table with a column called "user id" and each user id is unique to each user, this you could join that table to another table with a "user id" column to find the information associated with each user. This example shows how to use an Inner JOIN clause to join two tables&lt;/p&gt;

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

&lt;p&gt;Fig 1.1&lt;/p&gt;

&lt;p&gt;An Inner Join returns only the rows that have matching values in both tables.&lt;/p&gt;

&lt;p&gt;SELECT c.first_name, c.last_name&lt;br&gt;
    FROM assignment.customers c&lt;br&gt;
    JOIN assignment.sales s&lt;br&gt;
    ON c.customer_id = s.customer_id;&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.amazonaws.com%2Fuploads%2Farticles%2F4vd58yk3irnsa7zfgn72.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.amazonaws.com%2Fuploads%2Farticles%2F4vd58yk3irnsa7zfgn72.png" alt=" " width="800" height="486"&gt;&lt;/a&gt;&lt;br&gt;
Fig 1.2&lt;/p&gt;

&lt;h2&gt;
  
  
  b) Left Outer Join
&lt;/h2&gt;

&lt;p&gt;Left Outer Joins return all rows from the first table and only the rows in the second table that 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.amazonaws.com%2Fuploads%2Farticles%2Faxx4w2tzcoavr9sqke1p.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.amazonaws.com%2Fuploads%2Farticles%2Faxx4w2tzcoavr9sqke1p.png" alt=" " width="372" height="372"&gt;&lt;/a&gt;&lt;br&gt;
Fig 1.3&lt;/p&gt;

&lt;p&gt;A Left Join returns all rows from the left table and the matched rows from the right table. If there is no match, NULL values are returned for columns from the right table.&lt;br&gt;
For example, we would use the previous syntax that joins the ‘film’ and ‘film_category’ tables. However, this time, we would make two changes. First, we would use a left join instead of an inner join. Second, we would exclude the first three rows from the ‘film_category’ 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.amazonaws.com%2Fuploads%2Farticles%2Fehnw6rmpdzoj51kcgbz6.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.amazonaws.com%2Fuploads%2Farticles%2Fehnw6rmpdzoj51kcgbz6.png" alt=" " width="720" height="87"&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.amazonaws.com%2Fuploads%2Farticles%2Fh2gpyrz960uyvkluvtgo.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.amazonaws.com%2Fuploads%2Farticles%2Fh2gpyrz960uyvkluvtgo.png" alt=" " width="295" height="277"&gt;&lt;/a&gt;&lt;br&gt;
Fig 1.4&lt;/p&gt;

&lt;p&gt;The result clearly conveys that there are null values in the first three category_id entries. This is because the first three rows in the ‘film_category’ table are excluded before the left join occurs&lt;/p&gt;

&lt;h2&gt;
  
  
  c) Right Outer Join
&lt;/h2&gt;

&lt;p&gt;Right Joins are logically the opposite of Left Joins—they return all rows from the second table, and only the rows in the first table that 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.amazonaws.com%2Fuploads%2Farticles%2Fbt68pakoa853nj171bml.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.amazonaws.com%2Fuploads%2Farticles%2Fbt68pakoa853nj171bml.png" alt=" " width="370" height="370"&gt;&lt;/a&gt;&lt;br&gt;
Fig 1.5&lt;/p&gt;

&lt;p&gt;A RIGHT JOIN returns all rows from the right table and the matched rows from the left table. If there is no match, NULL values are returned for columns from the left table.&lt;br&gt;
For example, we would use the previous syntax. However, this time, we would make two changes. First, we would use a right join instead of a left join.&lt;/p&gt;

&lt;h2&gt;
  
  
  d) Full Join
&lt;/h2&gt;

&lt;p&gt;Full Joins combine both left and right joins by returning all rows from both tables, as long as there is at least one match between them&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Window Functions
&lt;/h2&gt;

&lt;p&gt;Window functions, also known as windowing or analytic functions, are a category of functions in SQL that perform calculations across a specified range of rows related to the current row within a result set. These functions operate on a “window” of rows defined by an OVER() clause. Window functions are often used in conjunction with the ORDER BY clause to define the window.&lt;/p&gt;

&lt;p&gt;Now, let’s look at some common window functions&lt;/p&gt;

&lt;h2&gt;
  
  
  SQL Aggregate functions
&lt;/h2&gt;

&lt;p&gt;SQL Aggregate Functions allow summarizing large sets of data into meaningful results, making it easier to analyze patterns and trends across many records. They return a single output value after processing multiple rows in a table.&lt;/p&gt;

&lt;p&gt;Perform calculations like totals, averages, minimum or maximum values on data.&lt;br&gt;
Ignore NULL values in most functions except COUNT(*), improving result accuracy.&lt;br&gt;
Work with clauses such as GROUP BY, HAVING and ORDER BY for analysis.&lt;br&gt;
Example: First, we create a demo SQL database and table, on which we use the Aggregate functions.&lt;/p&gt;

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

&lt;p&gt;Below are the most frequently used aggregate functions in SQL.&lt;/p&gt;

&lt;h2&gt;
  
  
  a). Count()
&lt;/h2&gt;

&lt;p&gt;It is used to count the number of rows in a table. It helps summarize data by giving the total number of entries. It can be used in different ways depending on what you want to count:&lt;/p&gt;

&lt;p&gt;COUNT(*): Counts all rows.&lt;br&gt;
COUNT(column_name): Counts non-NULL values in the specified column.&lt;br&gt;
COUNT(DISTINCT column_name): Counts unique non-NULL values in the column.&lt;br&gt;
Query:&lt;/p&gt;

&lt;p&gt;COUNT(*) returns the total number of rows in the table, including rows with NULL values.&lt;br&gt;
COUNT(Salary) counts only the rows where Salary is not NULL.&lt;br&gt;
COUNT(DISTINCT Salary) counts unique non-NULL salary values, ignoring duplicates.&lt;/p&gt;

&lt;h2&gt;
  
  
  b). SUM()
&lt;/h2&gt;

&lt;p&gt;It is used to calculate the total of a numeric column. It adds up all non-NULL values in that column for Example, SUM(column_name) returns sum of all non-NULL values in the specified column.&lt;/p&gt;

&lt;p&gt;SUM(Salary) adds all non-NULL salary values to get the total salary amount.&lt;br&gt;
SUM(DISTINCT Salary) adds only unique non-NULL salary values, avoiding duplicates.&lt;br&gt;
NULL values are ignored in both SUM calculations.&lt;/p&gt;

&lt;h2&gt;
  
  
  c). AVG()
&lt;/h2&gt;

&lt;p&gt;It is used to calculate average value of a numeric column. It divides sum of all non-NULL values by the number of non-NULL rows for Example, AVG(column_name) returns average of all non-NULL values in the specified column.&lt;/p&gt;

&lt;p&gt;AVG(Salary) calculates the average of all non-NULL salary values.&lt;br&gt;
AVG(DISTINCT Salary) computes the average only from unique non-NULL salary values.&lt;br&gt;
Both ignore NULL values when performing the calculation.&lt;/p&gt;

&lt;h2&gt;
  
  
  d). MIN() and MAX()
&lt;/h2&gt;

&lt;p&gt;The MIN() and MAX() functions return the smallest and largest values, respectively, from a column.&lt;/p&gt;

&lt;p&gt;MAX(Salary) returns the highest non-NULL salary value from the Employee table.&lt;br&gt;
MIN(Salary) returns the lowest non-NULL salary value from the Employee table.&lt;br&gt;
Both functions ignore NULL values while determining the result.&lt;/p&gt;

</description>
      <category>sql</category>
      <category>database</category>
      <category>datascience</category>
      <category>productivity</category>
    </item>
    <item>
      <title>How Analysts Translate Messy Data, DAX, and Dashboards into Action Using Power BI</title>
      <dc:creator>Edwin Omondi </dc:creator>
      <pubDate>Mon, 09 Feb 2026 19:59:56 +0000</pubDate>
      <link>https://forem.com/owera/how-analysts-translate-messy-data-dax-and-dashboards-into-action-using-power-bi-3m14</link>
      <guid>https://forem.com/owera/how-analysts-translate-messy-data-dax-and-dashboards-into-action-using-power-bi-3m14</guid>
      <description>&lt;h2&gt;
  
  
  What is Microsoft Power BI?
&lt;/h2&gt;

&lt;p&gt;Microsoft Power BI is a data visualization platform primarily for business intelligence purposes. &lt;/p&gt;

&lt;p&gt;PowerBI stands for Power Business Intelligence and refers to a collection of software services, tools, and connectors that help you transform data from multiple sources into actionable insights.&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.amazonaws.com%2Fuploads%2Farticles%2F5sp84897n1rr3dnz0eoq.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.amazonaws.com%2Fuploads%2Farticles%2F5sp84897n1rr3dnz0eoq.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
Fig. 1.0 Power BI Interface&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.amazonaws.com%2Fuploads%2Farticles%2Fgzago3425ylrrlz1sjoh.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.amazonaws.com%2Fuploads%2Farticles%2Fgzago3425ylrrlz1sjoh.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
Fig. 1.1 Power BI Blank Report&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Power BI used for?
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Data Visualization &amp;amp; reporting
&lt;/h2&gt;

&lt;p&gt;Create reports and dashboards that present data sets in multiple ways using visuals&lt;/p&gt;

&lt;p&gt;Turn data into a wide range of different visuals, including pie charts, decomposition trees, gauge charts, KPIs, combo charts, bar and column charts, and ribbon charts. &lt;/p&gt;

&lt;h2&gt;
  
  
  Data Integration
&lt;/h2&gt;

&lt;p&gt;Connect various data sources, such as Excel sheets, on-site data warehouses, and cloud-based data storage, and then transform them into business insights&lt;/p&gt;

&lt;p&gt;Integrate Power BI with websites&lt;/p&gt;

&lt;h2&gt;
  
  
  Business Intelligence
&lt;/h2&gt;

&lt;p&gt;Track key performance indicators (KPIs) and metrics in real time. &lt;/p&gt;

&lt;p&gt;Use built-in AI and machine learning to make business predictions based on historical data&lt;/p&gt;

&lt;h2&gt;
  
  
  Collabortion &amp;amp; Sharing
&lt;/h2&gt;

&lt;p&gt;Provide company-wide access to data, data visualization tools, and insights to create a data-driven work culture&lt;/p&gt;

&lt;p&gt;Collaborate on workspaces and shared datasets&lt;/p&gt;

&lt;h2&gt;
  
  
  Financial Analysis
&lt;/h2&gt;

&lt;p&gt;Create financial statements and balance sheets &lt;/p&gt;

&lt;p&gt;Analyze sales performance and profit &lt;/p&gt;

&lt;h2&gt;
  
  
  Marketing Sales
&lt;/h2&gt;

&lt;p&gt;Integrate Power BI with the CRM system to analyze customer data and use insights to improve customer experience &lt;/p&gt;

&lt;p&gt;Analyze market trends and customer behavior to discover opportunities.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step by Step Guide on how Analysts transform messy data to real business acton
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Step 1: Understanding the Business Question:
&lt;/h2&gt;

&lt;p&gt;What problem are we trying to solve?&lt;br&gt;
What decisons needs to be made?&lt;/p&gt;

&lt;p&gt;Examples: &lt;br&gt;
Why are sales dropping?&lt;br&gt;
Which region is underperforming?&lt;br&gt;
Are costs growing faster than revenue?&lt;/p&gt;

&lt;p&gt;This step is crucial. Without a clear question, dashboards are just pretty charts. &lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Bring messy data into Power BI:
&lt;/h2&gt;

&lt;p&gt;Data usually comes from many places: Excel, databases, databses &amp;amp; online systems - CRM, ERP&lt;/p&gt;

&lt;p&gt;In Power BI, analysts load all the data together, then check for missing, duplicate, or incorrect values.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Open Power Query - Where Cleaning Happens
&lt;/h2&gt;

&lt;p&gt;Why this step matters&lt;br&gt;
Power Query is where analysts prepare data once, so reports stay clean forever.&lt;/p&gt;

&lt;p&gt;Power BI clicks&lt;/p&gt;

&lt;p&gt;Click Transform Data&lt;/p&gt;

&lt;p&gt;Power Query Editor opens&lt;/p&gt;

&lt;p&gt;Typical cleaning actions&lt;/p&gt;

&lt;p&gt;Remove duplicates&lt;/p&gt;

&lt;p&gt;Select all columns → Home → Remove Rows → Remove Duplicates&lt;/p&gt;

&lt;p&gt;Fix data types&lt;/p&gt;

&lt;p&gt;Click column header → choose Date / Whole Number / Decimal&lt;/p&gt;

&lt;p&gt;Handle missing values&lt;/p&gt;

&lt;p&gt;Replace with “Unknown” or infer logically&lt;/p&gt;

&lt;p&gt;Fix obvious errors&lt;/p&gt;

&lt;p&gt;Flag negative prices&lt;/p&gt;

&lt;p&gt;Cap extreme discounts&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Create a Staging Table - Clean Base
&lt;/h2&gt;

&lt;p&gt;What this means&lt;br&gt;
A staging table is just a cleaned version of raw data.&lt;/p&gt;

&lt;p&gt;Why do analysts do this&lt;/p&gt;

&lt;p&gt;Protects original data&lt;/p&gt;

&lt;p&gt;Makes future refreshes safe&lt;/p&gt;

&lt;p&gt;Avoids breaking dashboards later&lt;/p&gt;

&lt;p&gt;Power BI action&lt;/p&gt;

&lt;p&gt;Rename query to something like Sales_Staging&lt;/p&gt;

&lt;p&gt;Apply all cleaning steps&lt;/p&gt;

&lt;p&gt;Click Close &amp;amp; Apply&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Add Calculated Columns - Row-Level Logic
&lt;/h2&gt;

&lt;p&gt;Now analysts add meaning row by row.&lt;/p&gt;

&lt;p&gt;Examples: Revenue, Cost, Profit, Lead time&lt;/p&gt;

&lt;p&gt;Power BI clicks&lt;/p&gt;

&lt;p&gt;Go to Data View&lt;/p&gt;

&lt;p&gt;Click New Column&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6: Build a Clean Data Model
&lt;/h2&gt;

&lt;p&gt;What analysts check&lt;/p&gt;

&lt;p&gt;Are tables connected correctly?&lt;/p&gt;

&lt;p&gt;Do relationships make sense?&lt;/p&gt;

&lt;p&gt;Power BI clicks&lt;/p&gt;

&lt;p&gt;Go to Model View&lt;/p&gt;

&lt;p&gt;Create relationships:&lt;/p&gt;

&lt;p&gt;Date → Sales&lt;/p&gt;

&lt;p&gt;Product → Sales&lt;/p&gt;

&lt;p&gt;Region → Sales&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 7: Write DAX Measures
&lt;/h2&gt;

&lt;p&gt;This is where analysis becomes dynamic.&lt;/p&gt;

&lt;p&gt;Why measures matter&lt;br&gt;
They change automatically when you filter by:&lt;/p&gt;

&lt;p&gt;Date, Region, Product, Channel&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 8: Turn Measures Into Visuals
&lt;/h2&gt;

&lt;p&gt;Now you build visuals with purpose.&lt;/p&gt;

&lt;p&gt;Example 1: Is revenue growing?&lt;/p&gt;

&lt;p&gt;Line chart&lt;/p&gt;

&lt;p&gt;X-axis → Month&lt;/p&gt;

&lt;p&gt;Values → Total Revenue&lt;/p&gt;

&lt;p&gt;Example 2: Who performs better?&lt;/p&gt;

&lt;p&gt;Bar chart&lt;/p&gt;

&lt;p&gt;Axis → Region&lt;/p&gt;

&lt;p&gt;Values → Total Profit&lt;/p&gt;

&lt;p&gt;Example 3: Are discounts hurting margins?&lt;/p&gt;

&lt;p&gt;Scatter chart&lt;/p&gt;

&lt;p&gt;X → Discount %&lt;/p&gt;

&lt;p&gt;Y → Margin %&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 9: Add Slicers
&lt;/h2&gt;

&lt;p&gt;Why slicers matter&lt;br&gt;
They allow users to ask their own questions.&lt;/p&gt;

&lt;p&gt;Power BI clicks&lt;/p&gt;

&lt;p&gt;Select Slicer&lt;/p&gt;

&lt;p&gt;Drag fields like:&lt;/p&gt;

&lt;p&gt;Region&lt;/p&gt;

&lt;p&gt;Date&lt;/p&gt;

&lt;p&gt;Product Category&lt;/p&gt;

&lt;p&gt;Salesperson&lt;/p&gt;

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

&lt;p&gt;Big Picture &lt;/p&gt;

&lt;p&gt;Messy Data → Clean Data → DAX → Dashboard → Decision&lt;/p&gt;

&lt;p&gt;That’s the analyst workflow.&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>beginners</category>
      <category>productivity</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Schemas &amp; Data Modelling in Power BI</title>
      <dc:creator>Edwin Omondi </dc:creator>
      <pubDate>Sun, 01 Feb 2026 20:59:38 +0000</pubDate>
      <link>https://forem.com/owera/schemas-data-modelling-in-power-bi-5gln</link>
      <guid>https://forem.com/owera/schemas-data-modelling-in-power-bi-5gln</guid>
      <description>&lt;p&gt;![ ](&lt;a href="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4em6iuxplrbtrwmusi74.jpg" rel="noopener noreferrer"&gt;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4em6iuxplrbtrwmusi74.jpg&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Data Modelling in Power BI
&lt;/h3&gt;

&lt;p&gt;Data modelling is the process of structuring your tables and defining relationships so Power BI can:&lt;/p&gt;

&lt;p&gt;Aggregate data correctly&lt;/p&gt;

&lt;p&gt;Filter data efficiently&lt;/p&gt;

&lt;p&gt;Produce accurate measures&lt;/p&gt;

&lt;p&gt;Perform fast, even with large datasets&lt;/p&gt;

&lt;p&gt;Think of it as designing the blueprint of your report before decorating it with visuals.&lt;/p&gt;

&lt;h2&gt;
  
  
  Star Schema Overview
&lt;/h2&gt;

&lt;p&gt;Star schema is a mature modeling approach widely adopted by relational data warehouses. &lt;/p&gt;

&lt;p&gt;It requires modelers to classify their model tables as either dimension or fact.&lt;/p&gt;

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

&lt;p&gt;Dimension tables describe business entities—the things you model. Entities can include products, people, places, and concepts, including time itself. &lt;br&gt;
The most consistent table in a star schema is the date dimension table. A dimension table contains a key column (or columns) that acts as a unique identifier, and other columns. Other columns support filtering and grouping your data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fact Tables
&lt;/h2&gt;

&lt;p&gt;Fact tables store observations or events, and can be sales orders, stock balances, exchange rates, temperatures, and more.&lt;br&gt;
 A fact table contains dimension key columns that relate to dimension tables and numeric measure columns. &lt;br&gt;
The dimension key columns determine the dimensionality of a fact table, while the dimension key values determine the granularity of a fact table. For example, consider a fact table designed to store sales targets that has two dimension key columns, Date and ProductKey. &lt;br&gt;
It's easy to understand that the table has two dimensions. The granularity, however, can't be determined without considering the dimension key values. &lt;br&gt;
In this example, consider that the values stored in the Date column are the first day of each month. &lt;br&gt;
In this case, the granularity is at the month-product level.&lt;/p&gt;

&lt;p&gt;Generally, dimension tables contain a relatively small number of rows. Fact tables, on the other hand, can contain many rows and continue to grow over time.&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.amazonaws.com%2Fuploads%2Farticles%2Fi59rb9smqo7152910fj3.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.amazonaws.com%2Fuploads%2Farticles%2Fi59rb9smqo7152910fj3.png" alt=" " width="800" height="543"&gt;&lt;/a&gt;&lt;br&gt;
Fig. 1.1&lt;/p&gt;

&lt;h2&gt;
  
  
  Normalization vs. denormalization
&lt;/h2&gt;

&lt;p&gt;To understand some star schema concepts described in this article, it's important to know two terms: normalization and denormalization.&lt;/p&gt;

&lt;p&gt;Normalization is the term used to describe data that's stored in a way that reduces repetitious data. Consider a table of products that has a unique key value column, like the product key, and other columns that describe product characteristics, like product name, category, color, and size. A sales table is considered normalized when it stores only keys, like the product key. In the following image, notice that only the ProductKey column records the product.&lt;/p&gt;

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

&lt;p&gt;If, however, the sales table stores product details beyond the key, it's considered denormalized. In the following image, notice that the ProductKey and other product-related columns record the product.&lt;/p&gt;

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

&lt;p&gt;When you source data from an export file or data extract, it's likely that it represents a denormalized set of data. In this case, use Power Query to transform and shape the source data into multiple normalized tables.&lt;/p&gt;

&lt;p&gt;As described in this article, you should strive to develop optimized Power BI semantic models with tables that represent normalized fact and dimension data. However, there's one exception where a snowflake dimension might be denormalized in order to produce a single model table.&lt;/p&gt;

&lt;h2&gt;
  
  
  Star schema relevance to Power BI semantic models
&lt;/h2&gt;

&lt;p&gt;Star schema design and many related concepts introduced in this article are highly relevant to developing Power BI models that are optimized for performance and usability.&lt;/p&gt;

&lt;p&gt;Consider that each Power BI report visual generates a query that's sent to the Power BI semantic model. Generally, queries filter, group, and summarize model data. A well-designed model, then, is one that provides tables for filtering and grouping, and tables for summarizing. This design fits well with star schema principles:&lt;/p&gt;

&lt;h2&gt;
  
  
  Dimension tables enable filtering and grouping.
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Fact tables enable summarization.
&lt;/h2&gt;

&lt;p&gt;There's no table property that modelers set to set the table type as dimension or fact. It's in fact determined by the model relationships. A model relationship establishes a filter propagation path between two tables, and it's the cardinality property of the relationship that determines the table type. A common relationship cardinality is one-to-many or its inverse many-to-one. The "one" side is always a dimension table while the "many" side is always 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.amazonaws.com%2Fuploads%2Farticles%2F83wvqa1sd8l4kwzgf7l1.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.amazonaws.com%2Fuploads%2Farticles%2F83wvqa1sd8l4kwzgf7l1.png" alt=" " width="800" height="543"&gt;&lt;/a&gt;&lt;br&gt;
Fig. 1.4&lt;/p&gt;

&lt;p&gt;A well-structured model design includes tables that are either dimension tables or fact tables. Avoid mixing the two types together for a single table. We also recommend that you strive to deliver the right number of tables with the right relationships in place. It's also important that fact tables always load data at a consistent grain.&lt;/p&gt;

&lt;p&gt;Lastly, it's important to understand that optimal model design is part science and part art. Sometimes you can break with good guidance when it makes sense to do so.&lt;/p&gt;

&lt;h2&gt;
  
  
  Snowflake Dimension
&lt;/h2&gt;

&lt;p&gt;A snowflake dimension is a set of normalized tables for a single business entity. For example, Adventure Works classifies products by category and subcategory. Products are assigned to subcategories, and subcategories are in turn assigned to categories. In the Adventure Works relational data warehouse, the product dimension is normalized and stored in three related tables&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6iqusx0phsufwhhttek1.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.amazonaws.com%2Fuploads%2Farticles%2F6iqusx0phsufwhhttek1.png" alt=" " width="756" height="548"&gt;&lt;/a&gt;&lt;br&gt;
Fig. 1.5&lt;br&gt;
If you use your imagination, you can picture the normalized tables positioned outwards from the fact table, forming a 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.amazonaws.com%2Fuploads%2Farticles%2Fvtqbv5624jboyqk9x4nw.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.amazonaws.com%2Fuploads%2Farticles%2Fvtqbv5624jboyqk9x4nw.png" alt=" " width="756" height="621"&gt;&lt;/a&gt;&lt;br&gt;
Fig. 1.6&lt;br&gt;
In Power BI Desktop, you can choose to mimic a snowflake dimension design (perhaps because your source data does) or combine the source tables to form a single, denormalized model table. Generally, the benefits of a single model table outweigh the benefits of multiple model tables. The most optimal decision can depend on the volumes of data and the usability requirements for the model.&lt;/p&gt;

&lt;p&gt;When you choose to mimic a snowflake dimension design:&lt;/p&gt;

&lt;p&gt;Power BI loads more tables, which is less efficient from storage and performance perspectives. These tables must include columns to support model relationships, and it can result in a larger model size.&lt;br&gt;
Longer relationship filter propagation chains need to be traversed, which might be less efficient than filters applied to a single table.&lt;br&gt;
The Data pane presents more model tables to report authors, which can result in a less intuitive experience, especially when snowflake dimension tables contain only one or two columns.&lt;br&gt;
It's not possible to create a hierarchy that comprises columns from more than one table.&lt;br&gt;
When you choose to integrate into a single model table, you can also define a hierarchy that encompasses the highest and lowest grain of the dimension. Possibly, the storage of redundant denormalized data can result in increased model storage size, particularly for large dimension 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.amazonaws.com%2Fuploads%2Farticles%2Ft2ciaiyopma64z4xslp1.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.amazonaws.com%2Fuploads%2Farticles%2Ft2ciaiyopma64z4xslp1.png" alt=" " width="756" height="668"&gt;&lt;/a&gt;&lt;br&gt;
Fig 1.7&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>productivity</category>
      <category>discuss</category>
      <category>learning</category>
    </item>
    <item>
      <title>Introduction to MS Excel for Data Analytics</title>
      <dc:creator>Edwin Omondi </dc:creator>
      <pubDate>Sun, 25 Jan 2026 20:27:58 +0000</pubDate>
      <link>https://forem.com/owera/introduction-to-ms-excel-for-data-analytics-5f6k</link>
      <guid>https://forem.com/owera/introduction-to-ms-excel-for-data-analytics-5f6k</guid>
      <description>&lt;p&gt;**&lt;/p&gt;

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

&lt;p&gt;:&lt;br&gt;
**Microsoft Excel is one of the most used software applications of all time. &lt;br&gt;
You can use Excel to enter all sorts of data and perform financial, mathematical, or statistical calculations.&lt;/p&gt;

&lt;p&gt;**Data Analysis Process:&lt;br&gt;
This is the science of analyzing a particular set of data to be used by an organization in making informed decisions. &lt;/p&gt;

&lt;p&gt;There are various types of Data Analytics.&lt;br&gt;
&lt;strong&gt;a) Descriptive Data&lt;/strong&gt; - looks at historical data to summarize what already happened (Past Data - establish trends and patterns)&lt;br&gt;
&lt;strong&gt;b) Diagnostic Data&lt;/strong&gt; - this dwells in finding reasons behind outcomes. (causes and relationship - identify factors affecting results)&lt;br&gt;
&lt;strong&gt;c) Predictive Analytics&lt;/strong&gt; - uses existing data to forecast future outcomes (future possibilities -make informed decisions)&lt;br&gt;
&lt;strong&gt;d) Prescriptive Analytics&lt;/strong&gt; - recommends actions based on data insights (decision making - suggests best actions)&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Data analysis involves the following processes;&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
Data Collection &lt;br&gt;
Data Processing &lt;br&gt;
Data Ceaning&lt;br&gt;
Data Analysis &lt;br&gt;
Data Communication&lt;/p&gt;

&lt;p&gt;*&lt;strong&gt;&lt;em&gt;Tools used for Data Analysis&lt;br&gt;
*&lt;/em&gt;&lt;/strong&gt;Excel &lt;br&gt;
Power BI&lt;br&gt;
SQL&lt;br&gt;
Python&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;**Data Analysis in Excel:&lt;/em&gt;*&lt;br&gt;
&lt;em&gt;_&lt;/em&gt;&lt;em&gt;*&lt;em&gt;a) Sort *&lt;/em&gt;&lt;/em&gt;-_ you can sort your Excel data by one or multiple columns. You can sort in either ascending or descending order. &lt;br&gt;
 &lt;em&gt;Sort By One Column&lt;/em&gt;:&lt;br&gt;
To sort by one column in Excel, execute the following steps; &lt;br&gt;
**Click any cell in the column you want to sort&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.amazonaws.com%2Fuploads%2Farticles%2Fxmp6ywizeerj2m2zbnhi.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.amazonaws.com%2Fuploads%2Farticles%2Fxmp6ywizeerj2m2zbnhi.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
Fig. 1 Sorting by One Column&lt;/p&gt;

&lt;p&gt;To sort in ascending order, on the Data tab, in the sort &amp;amp; filter group, click AZ&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.amazonaws.com%2Fuploads%2Farticles%2F91yakdubum8ayryr8ahu.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.amazonaws.com%2Fuploads%2Farticles%2F91yakdubum8ayryr8ahu.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
Fig. 2 Sorting by Ascending Order&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;b) Filter&lt;/strong&gt;&lt;/em&gt; - Filter your Excel data to display records that meet a certain criteria. &lt;/p&gt;

&lt;p&gt;Click any single cell inside a data set &lt;br&gt;
On the data tab, in the sort &amp;amp; filter group, click filter &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.amazonaws.com%2Fuploads%2Farticles%2Fr4bxd165ytkaod52r51j.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.amazonaws.com%2Fuploads%2Farticles%2Fr4bxd165ytkaod52r51j.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
Fig. 3 Filter&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;c) Conditional Formatting&lt;/strong&gt;&lt;/em&gt; - Use Conditional formatting in Excel to automatically highlight cells based on their content. Apply a rule or use a formula to determine which cells to format&lt;/p&gt;

&lt;p&gt;_Highlight Cells Rules _&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.amazonaws.com%2Fuploads%2Farticles%2Flfdni8frs9am1t5rba2j.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.amazonaws.com%2Fuploads%2Farticles%2Flfdni8frs9am1t5rba2j.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
Fig. 4 Conditional Formatting&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;d) Pivot Tables&lt;/strong&gt;&lt;/em&gt; - Pivot Tables are one of Excel's most powerful features. A pivot table allows you to extract the significance from a large, detailed data set. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Insert a Pivot Table&lt;/em&gt; - to insert a pivot table&lt;br&gt;
Click on any single cell inside the data set &lt;br&gt;
On the data set, in the tables group, click Pivot 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.amazonaws.com%2Fuploads%2Farticles%2Fhutjxxqrtecdy8lewito.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.amazonaws.com%2Fuploads%2Farticles%2Fhutjxxqrtecdy8lewito.png" alt=" " width="800" height="450"&gt;&lt;/a&gt; &lt;br&gt;
Fig. 5 Pivot Tables &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;e) Pivot Charts&lt;/em&gt;&lt;/strong&gt; - this is one of the most powerful pivot table features Excel has to offer. &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.amazonaws.com%2Fuploads%2Farticles%2Fmz9c5z2lxss7o7rw29i4.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.amazonaws.com%2Fuploads%2Farticles%2Fmz9c5z2lxss7o7rw29i4.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
Fig. 6 Pivot Chart &lt;/p&gt;

</description>
      <category>beginners</category>
      <category>learning</category>
      <category>datascience</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Understanding Git for Beginners: Version Control, Tracking Changes, Push &amp; Pull Explained</title>
      <dc:creator>Edwin Omondi </dc:creator>
      <pubDate>Sat, 17 Jan 2026 21:14:02 +0000</pubDate>
      <link>https://forem.com/owera/understanding-git-for-beginners-version-control-tracking-changes-push-pull-explained-e96</link>
      <guid>https://forem.com/owera/understanding-git-for-beginners-version-control-tracking-changes-push-pull-explained-e96</guid>
      <description>&lt;p&gt;*&lt;em&gt;What Is Version Control?&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
Version control is a system that helps you keep track of changes made to files over time.&lt;/p&gt;

&lt;p&gt;Instead of manually saving multiple copies of a project with different names, version control allows you to:&lt;/p&gt;

&lt;p&gt;Save different versions of your work&lt;/p&gt;

&lt;p&gt;See what changed and when&lt;/p&gt;

&lt;p&gt;Restore older versions if something goes wrong&lt;/p&gt;

&lt;p&gt;Work confidently without fear of losing progress&lt;/p&gt;

&lt;p&gt;In simple terms, version control acts like a history book for your project.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;What Is Git?&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
Git is a version control system used by developers to manage changes in their projects.&lt;/p&gt;

&lt;p&gt;Git works on your local computer and helps you:&lt;/p&gt;

&lt;p&gt;Monitor file changes&lt;/p&gt;

&lt;p&gt;Save progress in organized steps&lt;/p&gt;

&lt;p&gt;Keep a clear record of your work&lt;/p&gt;

&lt;p&gt;Experiment safely with new ideas&lt;/p&gt;

&lt;p&gt;Every time you save your progress in Git, it creates a snapshot of your project. These snapshots allow you to move back and forth between different versions.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;What Is GitHub and How Is It Related to Git?&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
GitHub is an online platform where Git projects are stored.&lt;/p&gt;

&lt;p&gt;While Git works on your computer, GitHub:&lt;/p&gt;

&lt;p&gt;Stores your project online&lt;/p&gt;

&lt;p&gt;Acts as a backup for your work&lt;/p&gt;

&lt;p&gt;Allows multiple people to work on the same project&lt;/p&gt;

&lt;p&gt;Makes collaboration possible from anywhere in the world&lt;/p&gt;

&lt;p&gt;Think of Git as the tool you use locally, and GitHub as the cloud where your work is shared and saved.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;How Git Tracks Changes&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
Git does not automatically save everything you do. Instead, it follows a structured process that gives you full control.&lt;/p&gt;

&lt;p&gt;There are three main stages in Git:&lt;/p&gt;

&lt;p&gt;_1. Working Area&lt;br&gt;
_&lt;br&gt;
This is where you make changes to your files. Nothing is saved yet.&lt;/p&gt;

&lt;p&gt;_2. Staging Area&lt;br&gt;
_&lt;br&gt;
Here, you choose which changes you want Git to remember. This step allows you to review your work before saving it.&lt;/p&gt;

&lt;p&gt;_3. Saved Version (Commit)&lt;br&gt;
_&lt;br&gt;
Once changes are saved, Git records them as a version in your project history.&lt;/p&gt;

&lt;p&gt;This process helps prevent mistakes and keeps your project organized.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;What Does “Tracking Changes” Mean?&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
Tracking changes means Git keeps a detailed record of:&lt;/p&gt;

&lt;p&gt;What files were changed&lt;/p&gt;

&lt;p&gt;What was added or removed&lt;/p&gt;

&lt;p&gt;When the change happened&lt;/p&gt;

&lt;p&gt;Who made the change&lt;/p&gt;

&lt;p&gt;This makes it easy to:&lt;/p&gt;

&lt;p&gt;Understand your project’s history&lt;/p&gt;

&lt;p&gt;Find errors&lt;/p&gt;

&lt;p&gt;Work with others without confusion&lt;/p&gt;

&lt;p&gt;For beginners, this is one of Git’s most powerful features.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;What Does “Push” Mean in Git?&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
Push means sending your saved work from your computer to GitHub.&lt;/p&gt;

&lt;p&gt;When you push your work:&lt;/p&gt;

&lt;p&gt;Your project is backed up online&lt;/p&gt;

&lt;p&gt;Others can see your updates&lt;/p&gt;

&lt;p&gt;Your changes become part of the shared project&lt;/p&gt;

&lt;p&gt;You can think of pushing as uploading your work to the cloud.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;What Does “Pull” Mean in Git?&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
Pull means bringing changes from GitHub down to your computer.&lt;/p&gt;

&lt;p&gt;Pulling is useful when:&lt;/p&gt;

&lt;p&gt;You are working on more than one device&lt;/p&gt;

&lt;p&gt;Other people have updated the project&lt;/p&gt;

&lt;p&gt;You want the latest version of the work&lt;/p&gt;

&lt;p&gt;Pulling ensures your local project stays up to date.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Push vs Pull (Simple Explanation)&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
Push sends changes from your computer to GitHub&lt;/p&gt;

&lt;p&gt;Pull brings changes from GitHub to your computer&lt;/p&gt;

&lt;p&gt;Together, they keep everything synchronized.&lt;/p&gt;

&lt;p&gt;Why Version Control Is Important for Beginners&lt;/p&gt;

&lt;p&gt;Version control helps beginners by:&lt;/p&gt;

&lt;p&gt;Preventing loss of work&lt;/p&gt;

&lt;p&gt;Encouraging experimentation&lt;/p&gt;

&lt;p&gt;Making mistakes easier to fix&lt;/p&gt;

&lt;p&gt;Teaching professional development practices&lt;/p&gt;

&lt;p&gt;Preparing you for real-world team projects&lt;/p&gt;

&lt;p&gt;Even solo developers benefit greatly from using Git.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Common Beginner Misunderstandings&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
Git does not automatically save your work&lt;/p&gt;

&lt;p&gt;Pushing and pulling are different actions&lt;/p&gt;

&lt;p&gt;Git and GitHub are not the same thing&lt;/p&gt;

&lt;p&gt;You do not need to be an expert to use Git&lt;/p&gt;

&lt;p&gt;Understanding these early makes learning easier.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Final Insights:&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
Git may seem overwhelming at first, but the core ideas are simple:&lt;/p&gt;

&lt;p&gt;Git tracks changes&lt;/p&gt;

&lt;p&gt;Version control saves history&lt;/p&gt;

&lt;p&gt;Push uploads your work&lt;/p&gt;

&lt;p&gt;Pull updates your work&lt;/p&gt;

&lt;p&gt;You don’t need to know everything at once. Learning Git step by step will make your development journey smoother and more professional.&lt;/p&gt;

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