<?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: Elizabeth Njihia</title>
    <description>The latest articles on Forem by Elizabeth Njihia (@elizabeth_njihia).</description>
    <link>https://forem.com/elizabeth_njihia</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%2F3708654%2F5907183b-f893-44d5-abc1-e543392c4755.png</url>
      <title>Forem: Elizabeth Njihia</title>
      <link>https://forem.com/elizabeth_njihia</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/elizabeth_njihia"/>
    <language>en</language>
    <item>
      <title>How to Connect Power BI to PostgreSQL (Local &amp; Cloud) — Complete Beginner to Analyst Guide</title>
      <dc:creator>Elizabeth Njihia</dc:creator>
      <pubDate>Mon, 30 Mar 2026 14:23:11 +0000</pubDate>
      <link>https://forem.com/elizabeth_njihia/how-to-connect-power-bi-to-postgresql-local-cloud-complete-beginner-to-analyst-guide-1213</link>
      <guid>https://forem.com/elizabeth_njihia/how-to-connect-power-bi-to-postgresql-local-cloud-complete-beginner-to-analyst-guide-1213</guid>
      <description>&lt;h1&gt;
  
  
  Introduction.
&lt;/h1&gt;

&lt;p&gt;Every company today collects huge amounts of data — customer purchases, product inventory, website activity, and financial transactions.&lt;br&gt;
But data sitting inside a database doesn't create value on its own.&lt;br&gt;
It becomes powerful only when analysts transform it into insights.&lt;br&gt;
This is where Power BI and SQL databases work together.&lt;br&gt;
In this guide, I’ll walk through how to connect Power BI to PostgreSQL databases, both locally and in the cloud.&lt;br&gt;
&lt;strong&gt;Objectives&lt;/strong&gt;&lt;br&gt;
• &lt;em&gt;What Power BI is and why businesses use it&lt;/em&gt;&lt;br&gt;
• &lt;em&gt;Why SQL databases are the backbone of analytics&lt;/em&gt;&lt;br&gt;
• &lt;em&gt;How to connect Power BI to a local PostgreSQL database&lt;/em&gt;&lt;br&gt;
• &lt;em&gt;How to connect Power BI to Aiven PostgreSQL in the cloud&lt;/em&gt;&lt;br&gt;
• &lt;em&gt;How to create relationships and data models in Power BI&lt;/em&gt;&lt;br&gt;
• &lt;em&gt;Why SQL is one of the most important skills for BI analysts&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  What is Power BI?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Power BI&lt;/strong&gt; is a &lt;em&gt;business intelligence and data visualization tool developed by Microsoft.&lt;/em&gt;&lt;br&gt;
 The power of Power BI lies in its ability to &lt;strong&gt;&lt;em&gt;pull&lt;/em&gt;&lt;/strong&gt; data from &lt;br&gt;
many sources, &lt;strong&gt;&lt;em&gt;clean&lt;/em&gt;&lt;/strong&gt; it, &lt;strong&gt;&lt;em&gt;analyze&lt;/em&gt;&lt;/strong&gt; it, and then &lt;strong&gt;&lt;em&gt;create visuals&lt;/em&gt;&lt;/strong&gt; that are easy to understand and actionable. &lt;br&gt;
It helps analysts convert raw data into:&lt;br&gt;
• interactive dashboards&lt;br&gt;
• business reports&lt;br&gt;
• data visualizations&lt;br&gt;
• performance metrics&lt;/p&gt;

&lt;p&gt;Instead of manually analyzing spreadsheets, Power BI allows companies to connect directly to data sources like:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;SQL databases&lt;/li&gt;
&lt;li&gt;Excel&lt;/li&gt;
&lt;li&gt;APIs&lt;/li&gt;
&lt;li&gt;cloud services&lt;/li&gt;
&lt;li&gt;data warehouses&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Once connected, Power BI can automatically transform the data into charts, dashboards, and insights that update in real time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How Data Flows in a Typical BI System&lt;/strong&gt;&lt;br&gt;
Here is a simple diagram showing how data moves from a database into Power BI dashboards.&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%2F8b5zu4bcm9zwq4mefppk.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%2F8b5zu4bcm9zwq4mefppk.png" alt=" " width="800" height="35"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Businesses rely on this pipeline to turn raw operational data into strategic decisions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why SQL Databases Are Essential for Analytics?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Most companies store their critical data in relational databases, and SQL (Structured Query Language) is the standardized and efficient language used to &lt;strong&gt;access, manage,&lt;/strong&gt; and &lt;strong&gt;analyze&lt;/strong&gt; this data. Its capabilities far exceed those of general-purpose tools like spreadsheets when dealing with large, complex datasets. &lt;br&gt;
SQL databases such as &lt;strong&gt;&lt;em&gt;PostgreSQL, MySQL, Microsoft SQL Server&lt;/em&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;em&gt;Oraclestore&lt;/em&gt;&lt;/strong&gt; information in structured tables.&lt;/p&gt;

&lt;p&gt;Example of tables in a retail system:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Table&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;customers&lt;/td&gt;
&lt;td&gt;customer information&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;products&lt;/td&gt;
&lt;td&gt;product catalog&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;sales&lt;/td&gt;
&lt;td&gt;transaction records&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;inventory&lt;/td&gt;
&lt;td&gt;stock levels&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These tables are connected using keys and relationships, which makes them perfect for analytics.&lt;br&gt;
Example of a Database Structure&lt;/p&gt;

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

&lt;p&gt;This type of structure is exactly what Power BI connects to.&lt;/p&gt;
&lt;h1&gt;
  
  
  Connecting Power BI to a Local PostgreSQL Database.
&lt;/h1&gt;

&lt;p&gt;Before connecting Power BI to PostgreSQL, you must install the &lt;strong&gt;&lt;em&gt;PostgreSQL connector (Npgsql driver).&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
Once installed, the process is simple.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1&lt;/strong&gt; — &lt;strong&gt;&lt;em&gt;Open Power BI Desktop&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
Launch Power BI Desktop.&lt;br&gt;
You will see the main interface where reports and dashboards are created.&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%2Flj408i3yrlrt8gyh1rlf.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%2Flj408i3yrlrt8gyh1rlf.png" alt=" " width="800" height="415"&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%2Fqlrrwvl0ppdda3nu38uv.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%2Fqlrrwvl0ppdda3nu38uv.png" alt=" " width="800" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2&lt;/strong&gt; — &lt;strong&gt;Click "Get Data"&lt;/strong&gt;&lt;br&gt;
From the top ribbon:&lt;br&gt;
Home → &lt;strong&gt;Get Data&lt;/strong&gt;&lt;br&gt;
This opens the list of available data sources.&lt;br&gt;
Get Data window showing multiple connectors&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%2Fy9fisn0ri7ng11cequjw.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%2Fy9fisn0ri7ng11cequjw.png" alt=" " width="800" height="397"&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%2F89jtswbgstty2qoz9zlg.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%2F89jtswbgstty2qoz9zlg.png" alt=" " width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3&lt;/strong&gt; — &lt;strong&gt;&lt;em&gt;Select PostgreSQL Database&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
In the connector list:&lt;/p&gt;

&lt;p&gt;Search → &lt;strong&gt;&lt;em&gt;PostgreSQL Database&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
Select → &lt;strong&gt;&lt;em&gt;Connect&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
PostgreSQL connector selection window&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%2Fsyppl296kg7757jaaiwq.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%2Fsyppl296kg7757jaaiwq.png" alt=" " width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4&lt;/strong&gt; — &lt;strong&gt;&lt;em&gt;Enter Database Details&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
Now you must enter the connection details.&lt;br&gt;
Example:&lt;br&gt;
Server: &lt;code&gt;localhost:5432&lt;/code&gt;&lt;br&gt;
Database: &lt;code&gt;sales_db&lt;/code&gt;&lt;br&gt;
Explanation:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;localhost&lt;/td&gt;
&lt;td&gt;database running on your computer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5432&lt;/td&gt;
&lt;td&gt;default PostgreSQL port&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;sales_db&lt;/td&gt;
&lt;td&gt;name of database&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Power BI will then ask for authentication:&lt;br&gt;
&lt;strong&gt;Authentication Type&lt;/strong&gt;: &lt;strong&gt;&lt;em&gt;Database&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Username&lt;/strong&gt;: &lt;strong&gt;&lt;em&gt;postgres&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Password&lt;/strong&gt;:  ********&lt;br&gt;
After entering the credentials, &lt;em&gt;click&lt;/em&gt; &lt;strong&gt;Connect.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5&lt;/strong&gt; — &lt;strong&gt;Select Tables&lt;/strong&gt;&lt;br&gt;
Power BI will open the Navigator Window.&lt;br&gt;
You can now choose the tables you want to load.&lt;br&gt;
Example of tables:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;customers&lt;/li&gt;
&lt;li&gt;products&lt;/li&gt;
&lt;li&gt;sales&lt;/li&gt;
&lt;li&gt;inventory
&lt;strong&gt;Click&lt;/strong&gt; Load to import them into Power BI.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;
  
  
  Connecting Power BI to a Cloud PostgreSQL Database (Aiven)
&lt;/h1&gt;

&lt;p&gt;Many modern companies store their databases in the cloud. A popular service is &lt;strong&gt;Aiven&lt;/strong&gt; PostgreSQL, which provides fully managed databases. Connecting to cloud databases requires secure encrypted connections.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;step 1&lt;/strong&gt;: &lt;strong&gt;&lt;em&gt;Prep your Aiven Credentials&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
Before opening Power BI, you need your "Connection Information" from the Aiven Console.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Log in&lt;/strong&gt; to &lt;code&gt;Aiven.io&lt;/code&gt; and select your PostgreSQL service.&lt;/li&gt;
&lt;li&gt;On the Overview tab, look for the &lt;strong&gt;Connection information&lt;/strong&gt; section.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Download&lt;/strong&gt; the CA Certificate: &lt;strong&gt;Click&lt;/strong&gt; the download button for &lt;code&gt;ca.pem.&lt;/code&gt; (You will need this to avoid the "Remote certificate is invalid" error.)&lt;/li&gt;
&lt;li&gt;Keep this tab open; you’ll need the Host, Port, User, and Password.
Example:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Host: pg-39c2286-kaburanjihia445-cb8d.f.aivencloud.com
Port: 19050
Database: defaultdb
User: avnadmin
Password: ********
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


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

&lt;p&gt;&lt;strong&gt;step 2&lt;/strong&gt;: &lt;strong&gt;&lt;em&gt;Install the Npgsql Connector&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
Power BI requires a specific driver to talk to PostgreSQL.&lt;br&gt;
&lt;strong&gt;Download&lt;/strong&gt; the Npgsql GAC Installer (e.g., version 4.0.10 is widely stable for PBI).&lt;br&gt;
During installation, crucial step: Ensure you check the box for "Install to GAC".&lt;br&gt;
&lt;strong&gt;Restart&lt;/strong&gt; your computer after installation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;step 3&lt;/strong&gt;: &lt;strong&gt;&lt;em&gt;Trust the Aiven Certificate (Windows)&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
Because Aiven uses a self-signed CA, Windows needs to trust it.&lt;br&gt;
Find your downloaded &lt;code&gt;ca.pem file.&lt;/code&gt; Rename it to &lt;code&gt;aiven.crt&lt;/code&gt; if Windows doesn't recognize it.&lt;br&gt;
&lt;strong&gt;Double-click&lt;/strong&gt; the file -&amp;gt; Install Certificate -&amp;gt; Local Machine.&lt;br&gt;
Place it in the following store: &lt;strong&gt;Trusted Root Certification Authorities.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;step 4&lt;/strong&gt;: &lt;strong&gt;&lt;em&gt;Connect in Power BI Desktop&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Open&lt;/strong&gt; Power BI Desktop and &lt;strong&gt;click&lt;/strong&gt; Get Data &amp;gt; PostgreSQL database.&lt;br&gt;
In the Server:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enter the Host and Port from Aiven in this format: &lt;code&gt;your-host.aivencloud.com:12345&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Database: Usually &lt;code&gt;defaultdb.&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Advanced Options: In the "Additional connection string parameters," type:
&lt;code&gt;sslmode=verify-ca;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;OK&lt;/strong&gt;. When prompted for credentials, select the Database tab (not Windows) and enter your Aiven Username and Password.&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.amazonaws.com%2Fuploads%2Farticles%2Fjk1s0fsfjpwyzlmqdcwk.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%2Fjk1s0fsfjpwyzlmqdcwk.png" alt=" " width="800" height="389"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;step 5&lt;/em&gt;&lt;/strong&gt;: &lt;strong&gt;Handling the Cloud (Power BI Service)&lt;/strong&gt;&lt;br&gt;
If you publish this report to the web, the connection might fail because Aiven’s firewall blocks the Power BI Service.&lt;br&gt;
Install a Standard Power BI Gateway on a VM or local machine. This acts as the secure "tunnel" between Aiven and the cloud.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Loading Tables into Power BI&lt;/strong&gt;&lt;br&gt;
Once connected, Power BI &lt;strong&gt;loads the tables&lt;/strong&gt; into the data model.&lt;/p&gt;

&lt;p&gt;Example tables:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Table&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;customers&lt;/td&gt;
&lt;td&gt;customer data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;products&lt;/td&gt;
&lt;td&gt;product catalog&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;sales&lt;/td&gt;
&lt;td&gt;transactions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;inventory&lt;/td&gt;
&lt;td&gt;stock levels&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Consequently&lt;/strong&gt; ,Power BI automatically detects relationships between tables. For Example :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;customers.customer_id → sales.customer_id
products.product_id → sales.product_id
products.product_id → inventory.product_id
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here is a Power BI Data Model Diagram;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fauxtmol0r9c1c9ndwyb6.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%2Fauxtmol0r9c1c9ndwyb6.png" alt=" " width="800" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These relationships allow Power BI to correctly calculate metrics such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;total revenue&lt;/li&gt;
&lt;li&gt;product sales&lt;/li&gt;
&lt;li&gt;customer purchases&lt;/li&gt;
&lt;li&gt;stock levels&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once the data model is ready, analysts can create visuals such as:&lt;br&gt;
• Total Sales&lt;br&gt;
• Revenue by Product&lt;br&gt;
• Top Customers&lt;br&gt;
• Inventory Levels&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why SQL Skills Are Critical for Power BI Analysts&lt;/strong&gt;&lt;br&gt;
Even though Power BI is visual, SQL is still one of the most valuable skills for analysts. SQL helps analysts retrieve and prepare data efficiently. Example of SQL Queries;&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Retrieve data&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;sales&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;em&gt;Filter records&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;sales&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;sale_date&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="s1"&gt;'2025-01-01'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;em&gt;Aggregations&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;product_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;SUM&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;total_sales&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;sales&lt;/span&gt;
&lt;span class="k"&gt;GROUP&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;product_id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;em&gt;Join tables&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="k"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;amount&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;customers&lt;/span&gt; &lt;span class="k"&gt;c&lt;/span&gt;
&lt;span class="k"&gt;JOIN&lt;/span&gt; &lt;span class="n"&gt;sales&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;
&lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="k"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;customer_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;customer_id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Using SQL before loading data into Power BI helps:&lt;br&gt;
• reduce dataset size&lt;br&gt;
• clean messy data&lt;br&gt;
• improve dashboard performance&lt;/p&gt;

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

&lt;p&gt;By connecting Power BI to PostgreSQL databases — both locally and in the cloud — analysts can:&lt;/p&gt;

&lt;p&gt;• access structured data&lt;br&gt;
• build accurate data models&lt;br&gt;
• create interactive dashboards&lt;br&gt;
• support data-driven decision making&lt;/p&gt;

&lt;p&gt;✨ Data stored in databases becomes valuable only when someone transforms it into insights.&lt;/p&gt;

</description>
      <category>powerbi</category>
      <category>sql</category>
      <category>postgressql</category>
      <category>dataanalytics</category>
    </item>
    <item>
      <title>Mastering Joins and Window Functions in SQL</title>
      <dc:creator>Elizabeth Njihia</dc:creator>
      <pubDate>Mon, 02 Mar 2026 16:29:28 +0000</pubDate>
      <link>https://forem.com/elizabeth_njihia/mastering-joins-and-window-functions-in-sql-2oil</link>
      <guid>https://forem.com/elizabeth_njihia/mastering-joins-and-window-functions-in-sql-2oil</guid>
      <description>&lt;h2&gt;
  
  
  Introduction.
&lt;/h2&gt;

&lt;p&gt;If you’re working with data — especially in tools like Power BI, Excel, or databases like MySQL or PostgreSQL — understanding Joins and Window Functions is a game changer. These two concepts help you combine data and analyze it in powerful ways without losing detail. Here is an article to guide you through joins and window functions.&lt;/p&gt;

&lt;p&gt;🔗&lt;strong&gt;What Are Joins?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;&lt;em&gt;Join&lt;/em&gt;&lt;/strong&gt; &lt;em&gt;combines rows from two or more tables based on a related column.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Importance of joins.&lt;/strong&gt;&lt;br&gt;
Most databases are structured into multiple tables to avoid duplication. To analyze the data meaningfully, you need to bring those tables together.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Types of Joins&lt;/strong&gt;&lt;br&gt;
1️⃣ &lt;strong&gt;&lt;em&gt;INNER JOIN&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Returns only the matching records in both tables.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Example;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;customers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;orders&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;order_date&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;customers&lt;/span&gt;
&lt;span class="k"&gt;INNER&lt;/span&gt; &lt;span class="k"&gt;JOIN&lt;/span&gt; &lt;span class="n"&gt;orders&lt;/span&gt;
&lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;customers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;customer_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;orders&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;customer_id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nv"&gt;`
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Meaning: &lt;em&gt;Only customers who have placed orders will appear.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;2️⃣ &lt;strong&gt;&lt;em&gt;LEFT JOIN (LEFT OUTER JOIN)&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Returns all records from the left table and matching records from the right table.&lt;/em&gt;&lt;br&gt;
Example;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;customers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;orders&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;order_date&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;customers&lt;/span&gt;
&lt;span class="k"&gt;LEFT&lt;/span&gt; &lt;span class="k"&gt;JOIN&lt;/span&gt; &lt;span class="n"&gt;orders&lt;/span&gt;
&lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;customers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;customer_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;orders&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;customer_id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Meaning: &lt;em&gt;All customers appear — even those who never placed orders (their order columns will be NULL).&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;3️⃣ &lt;strong&gt;&lt;em&gt;RIGHT JOIN&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Returns all records from the right table and matching records from the left.&lt;/em&gt;&lt;br&gt;
Example;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;customers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;orders&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;order_date&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;customers&lt;/span&gt;
&lt;span class="k"&gt;RIGHT&lt;/span&gt; &lt;span class="k"&gt;JOIN&lt;/span&gt; &lt;span class="n"&gt;orders&lt;/span&gt;
&lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;customers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;customer_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;orders&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;customer_id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;4️⃣ &lt;strong&gt;&lt;em&gt;FULL OUTER JOIN&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Returns all records when there is a match in either table.&lt;/em&gt;&lt;br&gt;
Example;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;customers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;orders&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;order_date&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;customers&lt;/span&gt;
&lt;span class="k"&gt;FULL&lt;/span&gt; &lt;span class="k"&gt;OUTER&lt;/span&gt; &lt;span class="k"&gt;JOIN&lt;/span&gt; &lt;span class="n"&gt;orders&lt;/span&gt;
&lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;customers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;customer_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;orders&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;customer_id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🧠 Summary&lt;br&gt;
&lt;code&gt;INNER JOIN&lt;/code&gt; → &lt;em&gt;Only matching rows&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;LEFT JOIN&lt;/code&gt; → &lt;em&gt;Everything on the left + matches&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;RIGHT JOIN&lt;/code&gt; → &lt;em&gt;Everything on the right + matches&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;FULL JOIN&lt;/code&gt;→ &lt;em&gt;Everything from both&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;🪟 &lt;strong&gt;What Are Window Functions?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Window functions&lt;/strong&gt; perform &lt;em&gt;calculations across a set of rows related to the current row — without collapsing the result into a single row like GROUP BY does.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Basic Structure of a Window Function&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; 
    &lt;span class="k"&gt;column&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;window_function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="n"&gt;OVER&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="k"&gt;PARTITION&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="k"&gt;column&lt;/span&gt;
        &lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="k"&gt;column&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;em&gt;FROM table;&lt;br&gt;
Key Parts:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;OVER()&lt;/code&gt; → &lt;em&gt;defines the window&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;PARTITION BY&lt;/code&gt; → &lt;em&gt;divides data into groups&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ORDER BY&lt;/code&gt; → &lt;em&gt;defines order within the group&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Common Window Functions&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
1️⃣ &lt;strong&gt;ROW_NUMBER()&lt;/strong&gt;&lt;br&gt;
Assigns a unique number to each row.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; 
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;salary&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;ROW_NUMBER&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="n"&gt;OVER&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;salary&lt;/span&gt; &lt;span class="k"&gt;DESC&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;rank_position&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;employees&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use case: &lt;em&gt;Ranking employees by salary.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;2️⃣ &lt;strong&gt;RANK()&lt;/strong&gt;&lt;br&gt;
Similar to ROW_NUMBER but allows ties.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; 
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;salary&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;RANK&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="n"&gt;OVER&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;salary&lt;/span&gt; &lt;span class="k"&gt;DESC&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;salary_rank&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;employees&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;3️⃣ &lt;strong&gt;DENSE_RANK()&lt;/strong&gt;&lt;br&gt;
Like RANK but doesn’t skip numbers after ties.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; 
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;salary&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;DENSE_RANK&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="n"&gt;OVER&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;salary&lt;/span&gt; &lt;span class="k"&gt;DESC&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;dense_rank&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;employees&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;4️⃣ &lt;strong&gt;SUM() OVER()&lt;/strong&gt;&lt;br&gt;
Calculates running totals or grouped totals without grouping the table.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; 
    &lt;span class="n"&gt;department&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;salary&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="k"&gt;SUM&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;salary&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;OVER&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;PARTITION&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;department&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;dept_total_salary&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;employees&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;This keeps every row but adds department totals.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;5️⃣ &lt;strong&gt;Running Total&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; 
    &lt;span class="n"&gt;order_date&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="k"&gt;SUM&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;OVER&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;order_date&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;running_total&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;orders&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🧠 summary&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;They calculate across related rows.&lt;/li&gt;
&lt;li&gt;They do not reduce rows.&lt;/li&gt;
&lt;li&gt;They add analytical power without losing detail.&lt;/li&gt;
&lt;li&gt;Perfect for ranking, running totals, comparisons.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Window functions increase insight, not width or height.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;🗣️ &lt;strong&gt;Insights&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Think of Joins as connecting puzzle pieces. Each table is a piece of information. When you join them, you build the full picture.&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Think of Window Functions as giving each row awareness of its neighbors. Instead of summarizing the table, you let each row “see” the other rows around it.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Joins = relationship builders&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Window functions = insight enhancers&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Together, they form the backbone of advanced SQL analytics.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Visualization;&lt;/strong&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%2F0ad7lh4xttvihan82xol.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%2F0ad7lh4xttvihan82xol.png" alt=" " width="800" height="1200"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>sql</category>
      <category>webdev</category>
      <category>datascience</category>
      <category>analytics</category>
    </item>
    <item>
      <title>Where Data Meets Decisions</title>
      <dc:creator>Elizabeth Njihia</dc:creator>
      <pubDate>Sat, 07 Feb 2026 22:00:25 +0000</pubDate>
      <link>https://forem.com/elizabeth_njihia/where-data-meets-decisions-clf</link>
      <guid>https://forem.com/elizabeth_njihia/where-data-meets-decisions-clf</guid>
      <description>&lt;h2&gt;
  
  
  How Analysts Translate Messy Data, DAX, and Dashboards into Action Using Power BI.
&lt;/h2&gt;

&lt;p&gt;In theory, data should be clean, complete, and ready for analysis. In reality, business data is messy. It comes from multiple sources, contains missing values, inconsistent formats, and unclear definitions.&lt;br&gt;
This is where Power BI analysts create value.&lt;br&gt;
Their role is not just to build dashboards, but to &lt;strong&gt;translate messy data into insights that drive real business decisions&lt;/strong&gt;. This article explains how analysts use &lt;strong&gt;Power Query, data modelling, DAX, and dashboards&lt;/strong&gt; in Power BI to move from raw data to action.&lt;/p&gt;
&lt;h2&gt;
  
  
  1. Use of power of power query.
&lt;/h2&gt;

&lt;p&gt;Before any dashboard or calculation is built, analysts start by cleaning and preparing data using &lt;strong&gt;Power Query&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  Common issues in a data set;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Missing values such as &lt;code&gt;"Not provided"&lt;/code&gt; or blanks&lt;/li&gt;
&lt;li&gt;Numbers stored as text&lt;/li&gt;
&lt;li&gt;Duplicate records&lt;/li&gt;
&lt;li&gt;Inconsistent date and currency formats&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Example: Cleaning a Reviews Column
&lt;/h3&gt;

&lt;p&gt;Imagine a product reviews dataset where some rows contain text like &lt;code&gt;"Not provided"&lt;/code&gt; instead of numbers.&lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;Power Query&lt;/strong&gt;, an analyst would:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Replace &lt;code&gt;"Not provided"&lt;/code&gt; with &lt;code&gt;null&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Change the column data type to &lt;em&gt;Whole Number&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;📌 Business impact:&lt;br&gt;
Clean data ensures leaders trust the dashboard. Decisions based on inaccurate data can lead to lost revenue, poor forecasting, or wrong strategy.&lt;/p&gt;
&lt;h2&gt;
  
  
  2.Data modelling.
&lt;/h2&gt;

&lt;p&gt;After cleaning the data, analysts design a &lt;strong&gt;data model&lt;/strong&gt; that mirrors how the business operates.&lt;/p&gt;

&lt;p&gt;Most Power BI reports use a &lt;strong&gt;star schema&lt;/strong&gt;, which includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fact tables&lt;/strong&gt; (Sales, Orders, Reviews)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dimension tables&lt;/strong&gt; (Products, Customers, Date)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Example: Sales Star Schema
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Fact Sales table contains Order ID, Product ID, Quantity, Revenue&lt;/li&gt;
&lt;li&gt;Dim Product contains Product Name, Category, Brand&lt;/li&gt;
&lt;li&gt;Dim Date contains Date, Month, Quarter, Year&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Relationships are created from dimension tables to the fact table using keys.&lt;/p&gt;

&lt;p&gt;📌 Business impact: A well-designed model improves report performance and ensures KPIs calculate correctly across visuals.&lt;/p&gt;
&lt;h2&gt;
  
  
  3. DAX application.
&lt;/h2&gt;

&lt;p&gt;Raw data answers &lt;em&gt;what happened&lt;/em&gt;. &lt;strong&gt;DAX&lt;/strong&gt; helps analysts explain &lt;em&gt;why it happened&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Analysts use DAX to create:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;KPIs and metrics&lt;/li&gt;
&lt;li&gt;Time-based analysis&lt;/li&gt;
&lt;li&gt;Categories and performance bands&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Example: Key DAX Measures
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Total Revenue&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Total Revenue = SUM(FactSales[Revenue])
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Average Rating (ignoring missing values)&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Average Rating = AVERAGE(Reviews[Rating])
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Discount Category&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Discount Category =
SWITCH(
    TRUE(),
    [Discount %] &amp;lt; 0.2, "Low Discount",
    [Discount %] &amp;lt; 0.4, "Medium Discount",
    "High Discount"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;📌 Business impact: Leaders can segment products, track trends, and evaluate performance using logic that matches business rules.&lt;/p&gt;

&lt;h2&gt;
  
  
  4.Dashboard creation.
&lt;/h2&gt;

&lt;p&gt;A Power BI dashboard should answer questions instantly, not just display numbers.&lt;/p&gt;

&lt;p&gt;Effective dashboards:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Highlight KPIs at the top&lt;/li&gt;
&lt;li&gt;Use the right visual for each question&lt;/li&gt;
&lt;li&gt;Allow filtering using slicers&lt;/li&gt;
&lt;li&gt;Tell a clear story&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example: Product Performance Dashboard
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Visuals used:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;KPI cards for Total Revenue, Average Rating, Total Reviews&lt;/li&gt;
&lt;li&gt;Bar chart showing Revenue by Product Category&lt;/li&gt;
&lt;li&gt;Scatter plot showing Discount % vs Reviews&lt;/li&gt;
&lt;li&gt;Line chart showing Rating trends over time&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Insights generated:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Products with high discounts but low reviews may have quality issues&lt;/li&gt;
&lt;li&gt;Declining rating trends signal customer satisfaction problems&lt;/li&gt;
&lt;li&gt;Top-performing categories guide inventory and marketing decisions&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5. Evaluation of insights.
&lt;/h2&gt;

&lt;p&gt;The true value of Power BI lies in how insights influence decisions.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Marketing teams&lt;/strong&gt; adjust campaigns based on customer behavior&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sales teams&lt;/strong&gt; focus on high-performing products&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Management&lt;/strong&gt; monitors KPIs in real time&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Power BI connects technical analysis directly to business strategy.&lt;/p&gt;

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

&lt;p&gt;Power BI is more than charts and visuals. Analysts use it to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clean and structure messy data&lt;/li&gt;
&lt;li&gt;Build models that reflect real business processes&lt;/li&gt;
&lt;li&gt;Apply business logic using DAX&lt;/li&gt;
&lt;li&gt;Deliver dashboards that support confident decision-making&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Note:&lt;strong&gt;Power BI helps you listen to data, make sense of it, and move smart.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>data</category>
      <category>analytics</category>
    </item>
    <item>
      <title>Data Modelling and schemas in power BI.</title>
      <dc:creator>Elizabeth Njihia</dc:creator>
      <pubDate>Mon, 02 Feb 2026 13:58:14 +0000</pubDate>
      <link>https://forem.com/elizabeth_njihia/data-modelling-and-schemas-in-power-bi-94g</link>
      <guid>https://forem.com/elizabeth_njihia/data-modelling-and-schemas-in-power-bi-94g</guid>
      <description>&lt;h2&gt;
  
  
  Introduction.
&lt;/h2&gt;

&lt;p&gt;Mastering data modeling is the "&lt;em&gt;secret sauce&lt;/em&gt;" that separates a slow, confusing Power BI report from one that is lightning-fast and dead-accurate. If your visuals are lagging or your numbers don't seem to add up, the problem usually isn't the visual it’s the model. This article explains schemas and data modelling in Power BI using simple understandable language.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Is Data Modelling in Power BI?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Data modelling&lt;/strong&gt; is the process of Organizing data into tables and defining relationships between those tables.&lt;/p&gt;

&lt;p&gt;A good data model helps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reports run faster&lt;/li&gt;
&lt;li&gt;Calculations give correct results&lt;/li&gt;
&lt;li&gt;Dashboards remain easy to maintain&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Fact tables vs Dimension tables
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Fact Tables&lt;/strong&gt;: These store the numbers. Think of them as a list of events.&lt;/p&gt;

&lt;p&gt;Note: &lt;em&gt;They are usually very long (millions of rows) and contain Foreign Keys to connect to other tables.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dimension Tables&lt;/strong&gt;: These provide the context. They answer the "Who, What, Where, and When."&lt;br&gt;
Examples: &lt;em&gt;Product names, Customer details, Store locations...&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Note: &lt;em&gt;They are usually wider (many descriptive columns) but shorter than fact tables.&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;The star schema is the most recommended data model in Power BI.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;One central fact table&lt;/li&gt;
&lt;li&gt;Multiple dimension tables&lt;/li&gt;
&lt;li&gt;All dimensions connect directly to the fact table&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It looks like a star ⭐.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Why Star Schema Is Best&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Easy to understand&lt;/li&gt;
&lt;li&gt;Faster report performance&lt;/li&gt;
&lt;li&gt;Works best with DAX&lt;/li&gt;
&lt;li&gt;Fewer relationship error&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Snowflake Schema
&lt;/h2&gt;

&lt;p&gt;A snowflake schema is a more complex version of the star schema.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Structure:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dimension tables are split into multiple related tables&lt;/li&gt;
&lt;li&gt;Dimensions connect to other dimensions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Snowflake Schema Example:&lt;br&gt;
Instead of one Product table:&lt;/p&gt;

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

&lt;p&gt;This reduces data duplication but increases complexity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Downsides of Snowflake Schema
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;More relationships&lt;/li&gt;
&lt;li&gt;Slower performance&lt;/li&gt;
&lt;li&gt;Harder to debug errors&lt;/li&gt;
&lt;li&gt;More complex DAX formulas&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In Power BI, star schema is usually preferred over snowflake schema.&lt;/p&gt;

&lt;h2&gt;
  
  
  Relationships in Power BI
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Relationships define how tables are connected.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Common Relationship Types;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One-to-Many (most common)&lt;/li&gt;
&lt;li&gt;Many-to-One&lt;/li&gt;
&lt;li&gt;Many-to-Many &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;One-to-Many Relationship&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
Example: One Product → Many Sales records&lt;/p&gt;

&lt;p&gt;Product ID appears once in the Product table but many times in the Sales table.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Many-to-Many Relationship&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
Occurs when: Both tables contain duplicate keys&lt;/p&gt;

&lt;p&gt;This type can cause:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Incorrect totals&lt;/li&gt;
&lt;li&gt;Confusing result&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Direction&lt;/strong&gt;: Always aim for Single Direction filtering (from the Dimension to the Fact table). Bi-directional filtering can cause "ambiguity," where Power BI gets confused about how to apply filters, leading to incorrect numbers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why data modelling is critical.
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Performance&lt;/em&gt;&lt;/strong&gt;: Power BI’s engine (VertiPaq) is designed to compress and scan columns in a Star Schema. Large flat tables eat up memory and make slicers feel sluggish.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Accuracy&lt;/em&gt;&lt;/strong&gt;: Proper modeling prevents "double counting." If your relationships are messy, a simple &lt;code&gt;SUM&lt;/code&gt; might return a number way higher than reality.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;DAX Simplicity&lt;/em&gt;&lt;/strong&gt;: Writing formulas (DAX) is much easier when your model is clean. A Star Schema makes time-intelligence functions (like "Sales Year-over-Year") work instantly.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Common Data Modelling Mistakes.
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Using too many fact tables&lt;/li&gt;
&lt;li&gt;Mixing fact and dimension data in one table&lt;/li&gt;
&lt;li&gt;Creating unnecessary many-to-many relationships&lt;/li&gt;
&lt;li&gt;Using snowflake schemas when star schemas work better&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Data modelling is the &lt;strong&gt;foundation&lt;/strong&gt; of every Power BI report.&lt;br&gt;
&lt;em&gt;By using fact and dimension tables, applying a star schema, and creating proper relationships, you ensure your reports are fast, accurate, and scalable.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Great visuals start with great models — design your data right, and Power BI will do the rest&lt;/em&gt;&lt;/strong&gt; 📊✨&lt;/p&gt;

</description>
      <category>data</category>
      <category>developer</category>
      <category>datascience</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Introduction to MS Excel: Simple guidelines to understand excel.</title>
      <dc:creator>Elizabeth Njihia</dc:creator>
      <pubDate>Sun, 25 Jan 2026 16:14:11 +0000</pubDate>
      <link>https://forem.com/elizabeth_njihia/introduction-to-ms-excel-simple-guidelines-to-understand-excel-372h</link>
      <guid>https://forem.com/elizabeth_njihia/introduction-to-ms-excel-simple-guidelines-to-understand-excel-372h</guid>
      <description>&lt;h1&gt;
  
  
  Introduction.
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Microsoft Excel&lt;/strong&gt; is a popular spreadsheet tool by Microsoft that helps users &lt;strong&gt;&lt;em&gt;store&lt;/em&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;em&gt;organize&lt;/em&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;em&gt;analyze&lt;/em&gt;&lt;/strong&gt;, and &lt;strong&gt;&lt;em&gt;display data using rows and columns&lt;/em&gt;&lt;/strong&gt;. You don’t need programming skills to start analyzing data with Excel. With simple features like tables, formulas, sorting, and charts, Excel helps you understand data and make decisions based on it.&lt;/p&gt;

&lt;p&gt;This article introduces how MS Excel can be used for basic data analytics, using simple explanations and practical examples.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Data Analytics.
&lt;/h2&gt;

&lt;p&gt;The process of examining raw data to uncover hidden patterns, trends, and insights, which are then used to make informed, data-driven decisions. It involves &lt;strong&gt;&lt;em&gt;collecting, cleaning, and organizing data&lt;/em&gt;&lt;/strong&gt; to transform it into actionable information for solving problems or forecasting future trends.&lt;/p&gt;

&lt;h2&gt;
  
  
  what find in excel.
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Rows &lt;em&gt;(horizontal – labeled with numbers)&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Columns &lt;em&gt;(vertical – labeled with letters)&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cells &lt;em&gt;(where rows and columns meet, e.g., A1)&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Each cell can store text, numbers, or formulas.&lt;/em&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%2Fyq1i69e23ahs30yqgwyf.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%2Fyq1i69e23ahs30yqgwyf.png" alt=" " width="526" height="169"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Example of a dataset:
&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.amazonaws.com%2Fuploads%2Farticles%2Fb591avlvvf8h8mk7lrw0.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%2Fb591avlvvf8h8mk7lrw0.png" alt=" " width="547" height="196"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Turning Data into a Table
&lt;/h2&gt;

&lt;p&gt;Tables ensure ease in analysis.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Steps to follow;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select your data&lt;/li&gt;
&lt;li&gt;Press &lt;strong&gt;Ctrl + T&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;OK&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

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

&lt;h3&gt;
  
  
  Benefits of tables:
&lt;/h3&gt;

&lt;p&gt;-Automatic filters&lt;br&gt;
-Better formatting&lt;br&gt;
-Easier analysis&lt;/p&gt;

&lt;h2&gt;
  
  
  Data sorting.
&lt;/h2&gt;

&lt;p&gt;This is the process of arranging rows of data in a specific, meaningful order. Example: Sort scores from highest to lowest to see top performers.&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Steps to follow;&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
1.Click anywhere in the Score column&lt;br&gt;
2.Go to Data → &lt;em&gt;Sort Z to A&lt;/em&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%2Fev6oro4a5o6rlawuxce4.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%2Fev6oro4a5o6rlawuxce4.png" alt=" " width="800" height="188"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Filtering helps you view specific data only.&lt;br&gt;
Example: View only students who scored above 70.&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Steps:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
1.&lt;strong&gt;Click&lt;/strong&gt; the filter arrow in the Score column&lt;br&gt;
2.Choose Number Filters → &lt;em&gt;Greater Than&lt;/em&gt;&lt;br&gt;
3.Enter 70&lt;/p&gt;

&lt;h2&gt;
  
  
  FORMULAS and FUNCTIONS.
&lt;/h2&gt;

&lt;p&gt;Formulas allow Excel to calculate values automatically.&lt;br&gt;
&lt;strong&gt;Arithmetic/Basics:&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;=A1+B1, =A1-B1, =A1*B1, =A1/B1&lt;/code&gt; (Basic operators)&lt;br&gt;
&lt;code&gt;=SUM(A1:A10)&lt;/code&gt;: Adds a range of cells.&lt;br&gt;
&lt;code&gt;=AVERAGE(A1:A10)&lt;/code&gt;: Calculates the mean of a range.&lt;br&gt;
&lt;code&gt;=PRODUCT(A1:A10)&lt;/code&gt;: Multiplies cells.&lt;br&gt;
&lt;code&gt;=COUNT(A1:A10)&lt;/code&gt;: Counts cells containing numbers.&lt;br&gt;
&lt;code&gt;=ROUND(A1, 2)&lt;/code&gt;: Rounds a number to a specific digit.&lt;br&gt;
&lt;strong&gt;Logical &amp;amp; Conditional:&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;=IF(condition, value_if_true, value_if_false)&lt;/code&gt;: Checks a condition.&lt;br&gt;
&lt;code&gt;=SUMIF(range, criteria, [sum_range])&lt;/code&gt;: Sums cells based on a condition.&lt;br&gt;
&lt;code&gt;=COUNTIF(range, criteria)&lt;/code&gt;: Counts cells based on a condition.&lt;br&gt;
&lt;strong&gt;Lookup &amp;amp; Reference:&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;=VLOOKUP(lookup_value, table_array, col_index_num, [range_lookup])&lt;/code&gt;: Finds data in a table.&lt;/p&gt;

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

&lt;p&gt;This highlights important data visually.&lt;br&gt;
Example: Highlight scores below 70 in red.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Steps:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select the Score column&lt;/li&gt;
&lt;li&gt;Go to Home → &lt;em&gt;Conditional Formatting&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Choose Highlight Cell Rules → &lt;em&gt;Less Than&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Enter 70&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Use of Pivot Table
&lt;/h2&gt;

&lt;p&gt;A &lt;em&gt;Pivot Table&lt;/em&gt; is used to summarize and analyze large amounts of data quickly. It &lt;em&gt;helps&lt;/em&gt; you see &lt;strong&gt;patterns, totals&lt;/strong&gt; and &lt;strong&gt;averages&lt;/strong&gt; without writing formulas.&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Steps in creating a pivot table;&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
1.Select your data&lt;br&gt;
2.Go to Insert → &lt;strong&gt;PivotTable&lt;/strong&gt;&lt;br&gt;
3.Click &lt;strong&gt;OK&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Excel creates a new sheet with Pivot Table fields.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Example Use Case;&lt;br&gt;
Using the student scores data, a Pivot Table can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Show average score per subject&lt;/li&gt;
&lt;li&gt;Show total scores per subject&lt;/li&gt;
&lt;li&gt;Count how many students took each subject&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How to do it:&lt;/strong&gt;&lt;br&gt;
1.Drag Subject to Rows&lt;br&gt;
2.Drag Score to Values&lt;br&gt;
3.Choose Average or Sum&lt;/p&gt;

&lt;h3&gt;
  
  
  Importance of pivot tables.
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;No formulas needed&lt;/li&gt;
&lt;li&gt;Fast data summarization&lt;/li&gt;
&lt;li&gt;Easy to update&lt;/li&gt;
&lt;li&gt;Ideal for reports and analysis&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Creating Charts.
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Charts help you visualize data, making it easier to understand trends.&lt;/em&gt;&lt;br&gt;
Example: Column Chart for Scores.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Steps:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
1.Select the data&lt;br&gt;
2.Go to Insert → &lt;strong&gt;Column Chart&lt;/strong&gt;&lt;br&gt;
3.Choose a chart style&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Excel Is Good for Beginners in Data Analytics:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Easy to learn&lt;/li&gt;
&lt;li&gt;No coding required&lt;/li&gt;
&lt;li&gt;Widely used in schools and workplaces&lt;/li&gt;
&lt;li&gt;Great for small datasets&lt;/li&gt;
&lt;li&gt;Strong visualization tools&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Microsoft Excel is a powerful and beginner-friendly tool for data analytics. With basic features like tables, formulas, sorting, filtering, and charts, you can analyze data and gain useful insights without technical complexity. If you are starting your journey in data analytics, Excel is a perfect place to begin.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Good luck in your journey of analytics.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>datascience</category>
      <category>data</category>
    </item>
    <item>
      <title>Mastering Git: A Beginner-friendly guide to Version Control.</title>
      <dc:creator>Elizabeth Njihia</dc:creator>
      <pubDate>Sun, 18 Jan 2026 07:47:20 +0000</pubDate>
      <link>https://forem.com/elizabeth_njihia/mastering-git-a-beginner-friendly-guide-to-version-control-1oo5</link>
      <guid>https://forem.com/elizabeth_njihia/mastering-git-a-beginner-friendly-guide-to-version-control-1oo5</guid>
      <description>&lt;h1&gt;
  
  
  Introduction.
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Git&lt;/strong&gt; is a version control system used to track changes in files over time. It is commonly used in software development to manage code, keep a history of changes, and work safely on projects.&lt;/p&gt;

&lt;p&gt;This article is written from a beginner’s perspective and is intended for readers who are new to coding and Git. It explains what Git is, why it is useful, and introduces basic Git commands with simple explanations.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is git.
&lt;/h2&gt;

&lt;p&gt;It is an open source for version control system used to track changes in a code during software development.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why git is useful.
&lt;/h2&gt;

&lt;p&gt;Some of the uses are;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Saving ones progress&lt;/li&gt;
&lt;li&gt;Push the code to GitHub&lt;/li&gt;
&lt;li&gt;Pull updates from a repository&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Repository&lt;/strong&gt; is where Git stores your project and its history.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common git commands in summary.
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;git init&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Initializes a new Git repository.&lt;/li&gt;
&lt;li&gt;Tracks your project&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;git status&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Shows the current state of your project&lt;/li&gt;
&lt;li&gt;Helps you know what files are changed or ready to commit&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;git add&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stages changes for commit&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;git add .&lt;/code&gt;&lt;br&gt;
&lt;code&gt;git add &amp;lt;filename&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;git commit&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Records changes in Git history&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Importance of commit messages&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Maintains a clear and collaborative software development process.&lt;/li&gt;
&lt;li&gt;Serve as a permanent historical record.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example of a simple commit message&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git commit -m "Update ReadMe File"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;git pull&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fetches and updates code from a remote repository&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;git push&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Uploads your commits to a remote repository&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;How it helps keep your work backed up&lt;/p&gt;

&lt;h3&gt;
  
  
  In details:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;git init&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The &lt;em&gt;git init&lt;/em&gt; command is used to start version control in a project. It tells Git to begin tracking changes inside a folder. When this command is run, Git creates a hidden &lt;em&gt;.git directory&lt;/em&gt; where it stores all version history and configuration.&lt;/p&gt;

&lt;p&gt;You usually use git init once, at the beginning of a project.&lt;br&gt;
&lt;code&gt;git init&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;git status&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The &lt;em&gt;git status&lt;/em&gt; command shows the current state of the project. It tells you which files have been changed, which files are staged for commit, and whether your local branch is up to date.&lt;/p&gt;

&lt;p&gt;This command is useful because it helps you understand what Git is doing at any moment.&lt;br&gt;
&lt;code&gt;git status&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;git add&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The &lt;em&gt;git add&lt;/em&gt; command is used to stage changes. Staging allows you to choose which file changes should be included in the next commit.&lt;/p&gt;

&lt;p&gt;Git does not automatically save every change you make. You must explicitly tell Git what to track using &lt;em&gt;git add&lt;/em&gt;.&lt;br&gt;
&lt;code&gt;git add .&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;git commit&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The &lt;em&gt;git commit&lt;/em&gt; command saves staged changes into Git’s history. Each commit represents a snapshot of the project at a specific point in time.&lt;/p&gt;

&lt;p&gt;A commit includes a message that explains what changes were made. Clear commit messages make it easier to understand the project history later.&lt;br&gt;
&lt;code&gt;git commit -m "Update homepage layout"&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;git pull&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The &lt;em&gt;git pull&lt;/em&gt; command retrieves the latest changes from a remote repository and merges them into your local project. It ensures your local copy stays up to date.&lt;/p&gt;

&lt;p&gt;This command is especially important when working with others or when using GitHub.&lt;br&gt;
&lt;code&gt;git pull&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;git push&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The &lt;em&gt;git push&lt;/em&gt; command sends your local commits to a remote repository. This makes your changes available to others and acts as a backup of your work.&lt;/p&gt;

&lt;p&gt;You typically push after committing your changes.&lt;br&gt;
&lt;code&gt;git push&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Lessons learnt.
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Always check the git status&lt;/li&gt;
&lt;li&gt;Commit often&lt;/li&gt;
&lt;li&gt;Pull before pushing&lt;/li&gt;
&lt;li&gt;Git helps avoid losing code&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Practice makes perfect therefore if you are new like myself let's build up confidence by practicing daily. If experienced refine your work flow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Enjoy coding!🥳&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>git</category>
      <category>github</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
