<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Githinji Victor Maina</title>
    <description>The latest articles on DEV Community by Githinji Victor Maina (@githinji_victormaina_627).</description>
    <link>https://dev.to/githinji_victormaina_627</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%2F3708663%2Fedc255e8-100c-445c-b393-3610422c8b5e.jpg</url>
      <title>DEV Community: Githinji Victor Maina</title>
      <link>https://dev.to/githinji_victormaina_627</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/githinji_victormaina_627"/>
    <language>en</language>
    <item>
      <title>🚀 SQL Joins and Window Functions Explained (With Real Examples for Data Analysts)</title>
      <dc:creator>Githinji Victor Maina</dc:creator>
      <pubDate>Wed, 04 Mar 2026 11:21:36 +0000</pubDate>
      <link>https://dev.to/githinji_victormaina_627/sql-joins-and-window-functions-explained-with-real-examples-for-data-analysts-l4c</link>
      <guid>https://dev.to/githinji_victormaina_627/sql-joins-and-window-functions-explained-with-real-examples-for-data-analysts-l4c</guid>
      <description>&lt;p&gt;Learn SQL Joins and Window Functions with clear explanations, real examples, ranking queries, running totals, and performance tips.&lt;/p&gt;

&lt;p&gt;If you’re serious about SQL, whether for Data Analysis, Backend Development, or Database Engineering ,you must understand two advanced concepts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SQL Joins&lt;/li&gt;
&lt;li&gt;SQL Window Functions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These features turn simple queries into powerful analytical tools.&lt;/p&gt;

&lt;p&gt;This guide explains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;All major types of SQL JOINs&lt;/li&gt;
&lt;li&gt;How window functions actually work&lt;/li&gt;
&lt;li&gt;The difference between GROUP BY and window functions&lt;/li&gt;
&lt;li&gt;Ranking, running totals, moving averages&lt;/li&gt;
&lt;li&gt;Performance considerations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🔎 &lt;strong&gt;What Are SQL Joins?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;SQL JOINs allow you to combine data from multiple tables using a related column.&lt;/p&gt;

&lt;p&gt;Relational databases store data in separate tables to reduce redundancy. Joins reconstruct meaningful relationships.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example tables:&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%2F4tqalko2dg0smk9sx663.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%2F4tqalko2dg0smk9sx663.png" alt=" " width="711" height="95"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Relationship:&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%2F0ply19lwkl5dhavl6end.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%2F0ply19lwkl5dhavl6end.png" alt=" " width="707" height="45"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;1️⃣ &lt;strong&gt;INNER JOIN (Most Common SQL Join)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Returns only matching rows in both 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%2F5mruxlu3uahpt35eo1eh.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%2F5mruxlu3uahpt35eo1eh.png" alt=" " width="714" height="95"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use Case:&lt;/strong&gt;&lt;br&gt;
Get customers who have placed orders.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt;&lt;br&gt;
Rows without matches are excluded.&lt;/p&gt;

&lt;p&gt;2️⃣ &lt;strong&gt;LEFT JOIN (Keep All Rows from Left Table)&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%2Fvsq00qgug5ai5eu0ayep.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%2Fvsq00qgug5ai5eu0ayep.png" alt=" " width="717" height="95"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;ol&gt;
&lt;li&gt;All customers&lt;/li&gt;
&lt;li&gt;NULL for customers without orders&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Use Case:&lt;/strong&gt;&lt;br&gt;
Find inactive customers.&lt;/p&gt;

&lt;p&gt;3️⃣ &lt;strong&gt;RIGHT JOIN&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Opposite of LEFT JOIN.&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%2F8aertm28j1oo4r1h3g2t.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%2F8aertm28j1oo4r1h3g2t.png" alt=" " width="735" height="87"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Less common because LEFT JOIN can usually replace it.&lt;/p&gt;

&lt;p&gt;4️⃣ &lt;strong&gt;FULL OUTER JOIN&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Returns all rows from both 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%2Fog2zt2lk4exvr42s5mmn.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%2Fog2zt2lk4exvr42s5mmn.png" alt=" " width="709" height="89"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Unmatched customers&lt;/p&gt;

&lt;p&gt;Unmatched orders&lt;/p&gt;

&lt;p&gt;5️⃣ &lt;strong&gt;SELF JOIN in SQL&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Join a table to itself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt; Customers with the same membership tier.&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%2Fbgabh13f894yrj1l9680.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%2Fbgabh13f894yrj1l9680.png" alt=" " width="720" height="106"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⚡ &lt;strong&gt;SQL Window Functions Explained&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Window functions perform calculations across related rows without collapsing them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This is the major difference:&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%2F0t6quekho2c9oje5yq74.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%2F0t6quekho2c9oje5yq74.png" alt=" " width="737" height="146"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;1️⃣ &lt;strong&gt;ROW_NUMBER() – Ranking Without Ties&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%2Ffnibgxme08kj3u507u2r.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%2Ffnibgxme08kj3u507u2r.png" alt=" " width="715" height="93"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use Case:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Pagination&lt;/li&gt;
&lt;li&gt;Top-N queries&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;2️⃣ &lt;strong&gt;RANK() vs DENSE_RANK() (Common Interview Question)&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%2Fn4nq12hxw6ygv3ehk8zb.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%2Fn4nq12hxw6ygv3ehk8zb.png" alt=" " width="713" height="112"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;If two rows tie for first place:&lt;/p&gt;

&lt;p&gt;RANK() → 1, 1, 3&lt;/p&gt;

&lt;p&gt;DENSE_RANK() → 1, 1, 2&lt;/p&gt;

&lt;p&gt;3️⃣ &lt;strong&gt;PARTITION BY (Like GROUP BY, But Smarter)&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%2Ftgivve4et7dvhidpyslm.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%2Ftgivve4et7dvhidpyslm.png" alt=" " width="726" height="112"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This shows:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Each individual order&lt;/p&gt;

&lt;p&gt;The total spending per customer&lt;/p&gt;

&lt;p&gt;Without grouping away details&lt;/p&gt;

&lt;p&gt;4️⃣ &lt;strong&gt;Running Total (Cumulative Sum)&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%2F7s8uwzi229a12vebtgkr.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%2F7s8uwzi229a12vebtgkr.png" alt=" " width="717" height="130"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Used in:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sales dashboards&lt;/li&gt;
&lt;li&gt;Revenue tracking&lt;/li&gt;
&lt;li&gt;Financial analysis&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;5️⃣ &lt;strong&gt;Moving Average (Advanced Window Function)&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%2Fo4bx6qaokjzbl1l1zcz1.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%2Fo4bx6qaokjzbl1l1zcz1.png" alt=" " width="718" height="129"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Perfect for:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Time-series analysis&lt;/li&gt;
&lt;li&gt;Trend detection&lt;/li&gt;
&lt;li&gt;Forecasting&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🆚 &lt;strong&gt;Joins vs Window Functions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;They solve different problems:&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%2Fjqissltoo3u0g3y6ur29.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%2Fjqissltoo3u0g3y6ur29.png" alt=" " width="722" height="166"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example combining both:&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%2F4wsly5iyynfe1ayowetb.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%2F4wsly5iyynfe1ayowetb.png" alt=" " width="731" height="151"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;JOIN connects tables&lt;/li&gt;
&lt;li&gt;GROUP BY aggregates&lt;/li&gt;
&lt;li&gt;Window function ranks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🧠 &lt;strong&gt;When Should You Use Window Functions?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use them when you need:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ranking&lt;/li&gt;
&lt;li&gt;Running totals&lt;/li&gt;
&lt;li&gt;Percentiles&lt;/li&gt;
&lt;li&gt;Per-row analytics&lt;/li&gt;
&lt;li&gt;Aggregates without losing detail&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Avoid them when:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A simple GROUP BY is enough&lt;/li&gt;
&lt;li&gt;Dataset is massive and not indexed properly&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;⚙️ &lt;strong&gt;Performance Tips&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Index join columns&lt;/li&gt;
&lt;li&gt;Avoid unnecessary joins&lt;/li&gt;
&lt;li&gt;Use EXPLAIN plans&lt;/li&gt;
&lt;li&gt;Partition carefully&lt;/li&gt;
&lt;li&gt;Avoid large window frames when unnecessary&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🎯 &lt;strong&gt;Final Takeaway&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you understand SQL JOINs, you can connect data.&lt;/p&gt;

&lt;p&gt;If you understand SQL Window Functions, you can analyze data deeply.&lt;/p&gt;

&lt;p&gt;Master both, and you move from writing queries to building analytics systems.&lt;/p&gt;

</description>
      <category>sql</category>
      <category>database</category>
      <category>datascience</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Data Storytelling in Power BI: Moving Beyond "Correct" to "Useful"</title>
      <dc:creator>Githinji Victor Maina</dc:creator>
      <pubDate>Sun, 08 Feb 2026 10:31:03 +0000</pubDate>
      <link>https://dev.to/githinji_victormaina_627/data-storytelling-in-power-bi-moving-beyond-correct-to-useful-28p2</link>
      <guid>https://dev.to/githinji_victormaina_627/data-storytelling-in-power-bi-moving-beyond-correct-to-useful-28p2</guid>
      <description>&lt;p&gt;In the world of data analytics, there's a massive gap between a correct calculation and a useful insight. You can write the most efficient, elegant DAX measure in the world, but if your stakeholders can’t use it to make a call, that data stays operationally silent.&lt;/p&gt;

&lt;p&gt;As analysts, our real job is translation. We take the chaos of raw data, apply the logic of DAX, and produce a narrative that actually drives business action. Here is how I approach mastering that translation layer in Power BI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Translation Is the Real Goal&lt;/strong&gt;&lt;br&gt;
Businesses don't actually care about star schemas or filter context—they care about outcomes.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The problem:&lt;/strong&gt; Raw data is almost always siloed, inconsistent, and messy.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The goal:&lt;/strong&gt; Turn that mess into answers for high-stakes questions: Which product line should we kill? Where is our marketing spend being wasted?&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without a clear translation process, dashboards become "data graves", places where information goes to be admired but never acted upon.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Three Pillars of Translation&lt;/strong&gt;&lt;br&gt;
To move from messy data to business action, I focus on three distinct phases.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. The Clean-Up (Power Query)&lt;/strong&gt;&lt;br&gt;
Before you can apply any logic, the data has to be structured and reliable. This is where we quietly do the heavy lifting that determines if the final insights are even trustworthy.&lt;/p&gt;

&lt;p&gt;Typical tasks I focus on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Removing the noise:&lt;/strong&gt; Stripping out columns that don’t contribute to the analytical goal.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Standardization:&lt;/strong&gt; Making sure "USA," "U.S.," and "United States" are treated as the same entity.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Validation:&lt;/strong&gt; Fixing broken data types and handling missing values before they break your visuals.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. The Logic Layer (DAX)&lt;/strong&gt;&lt;br&gt;
Think of DAX as the grammar of your data story. It defines how your metrics behave across filters, time periods, and business rules.&lt;/p&gt;

&lt;p&gt;I generally focus on these patterns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Time intelligence:&lt;/strong&gt; Handling YTD, MoM, and YoY comparisons to show growth or decline.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Conditional logic:&lt;/strong&gt; Automatically segmenting customers into categories like "high risk" or "low risk."&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Dynamic measures:&lt;/strong&gt; Ensuring metrics respond correctly to whatever slicers a user touches.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without solid DAX, a dashboard might look interactive, but it won't answer the "why" behind the numbers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. The Action Layer (The Dashboard)&lt;/strong&gt;&lt;br&gt;
Dashboards aren't just reports, they’re decision interfaces. An effective Power BI dashboard should:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Put the KPIs front and center.&lt;/li&gt;
&lt;li&gt;Use a clear visual hierarchy to guide the user's eye.&lt;/li&gt;
&lt;li&gt;Keep cognitive load low so the user isn't overwhelmed.&lt;/li&gt;
&lt;li&gt;Signal exactly where action is needed.
I often use traffic-light indicators (red, yellow, green) because they help users instantly grasp performance health and urgency.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;A Real-World Example: Reducing Customer Churn&lt;/strong&gt;&lt;br&gt;
Imagine you’re looking at a telecom dataset with thousands of rows of call-usage data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Messy Data&lt;/strong&gt;&lt;br&gt;
You start with mismatched timestamps, missing customer IDs, and service plan names that don't match up across tables.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The DAX Translation&lt;/strong&gt;&lt;br&gt;
Instead of just counting customers, we define "at-risk" users,those who haven't made a call in over 30 days but still have an active subscription.&lt;/p&gt;

&lt;p&gt;Code snippet&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%2Fyjpjkj1p6up62sp5bom5.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%2Fyjpjkj1p6up62sp5bom5.png" alt=" " width="686" height="278"&gt;&lt;/a&gt;&lt;br&gt;
This measure is built to respect filter context, making sure the calculation is right for every individual customer in the view.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Action&lt;/strong&gt;&lt;br&gt;
When you put this on a map, the dashboard might reveal a cluster of at-risk users in a specific area, like Kiambu County. This allows marketing to stop guessing and launch a localized retention campaign that actually saves those accounts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Common Traps to Avoid&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;1. "More Data = More Value"&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;The Mistake:&lt;/strong&gt; Throwing every available field into a report. The Reality: This just causes cognitive overload. If a user has to hunt for the insight, your translation has failed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Ignoring Context in DAX&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;The Mistake:&lt;/strong&gt; Writing static measures that don't react to filters. The Reality: DAX's power comes from filter context. Your measures have to adapt as users drill down into regions, dates, or categories.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best Practices I Live By&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Design for the 5-Second Rule:&lt;/strong&gt; A user should grasp the main point of a visual within five seconds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Annotate your DAX:&lt;/strong&gt; Use comments (//) to document your logic. You'll thank yourself during maintenance six months from now.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Focus on trends, not just totals:&lt;/strong&gt; A single number is just a fact; a trend over time is a narrative.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Final Thoughts&lt;/strong&gt;&lt;br&gt;
The ability to translate messy data into action is what separates a technician from a consultant. When you focus on clean structures, sound logic, and decision-driven design, you turn Power BI from a simple reporting tool into a strategic asset.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What part of the workflow do you find the most challenging; the initial data cleaning or getting the DAX logic right? Let’s talk about it in the comments.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>datascience</category>
      <category>beginners</category>
      <category>dax</category>
      <category>powerbi</category>
    </item>
    <item>
      <title>Why Your Power BI Reports Feel Slow (And How to Fix It)</title>
      <dc:creator>Githinji Victor Maina</dc:creator>
      <pubDate>Mon, 02 Feb 2026 14:29:04 +0000</pubDate>
      <link>https://dev.to/githinji_victormaina_627/why-your-power-bi-reports-feel-slow-and-how-to-fix-it-58mf</link>
      <guid>https://dev.to/githinji_victormaina_627/why-your-power-bi-reports-feel-slow-and-how-to-fix-it-58mf</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction:&lt;/strong&gt; &lt;br&gt;
It’s Not Just About Pretty Charts If you’re anything like me, when you first open Power BI, the temptation is to jump straight into the canvas and start dragging and dropping charts. We want to see the insights immediately. But this week, I learned that the real magic doesn't happen on the report canvas, it happens in the Model View.&lt;/p&gt;

&lt;p&gt;We’ve been working with hospital and crop production datasets, and it became clear very quickly: if you don’t structure your data correctly "under the hood," your report will be a nightmare to build and painfully slow to load. This structure is what we call &lt;strong&gt;Data Modelling.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Building Blocks:&lt;/strong&gt; Facts and Dimensions Before we talk about schemas, we have to talk about the two types of tables that live in a model. When I first looked at our hospital data, it was easy to get overwhelmed. But data modelling simplifies this by splitting things into two buckets:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Fact Tables (The "What"):&lt;/strong&gt; These are the busy tables. They capture things that happen. In our hospital example, a Patient Admission is a fact. It has dates, patient IDs, and numbers we can count. These tables are usually long and narrow because events happen constantly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Dimension Tables (The "Who, Where, and When"):&lt;/strong&gt; These tables describe the facts. They give context. For example, a Patients table tells us the name and age of the person admitted. A Locations table tells us which county the crops were grown in.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;The Star of the Show:&lt;/strong&gt; The Star Schema This is the gold standard in Power BI. Imagine a star shape. In the center, you have your massive Fact Table (like Crop_Yields). Radiating out from it, like points on a star, are your Dimension Tables (like Counties, Crop_Types, Years).&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%2Fyxsl2fymijojip788o4l.webp" 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%2Fyxsl2fymijojip788o4l.webp" alt=" " width="800" height="589"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Visualizing the workflow: This is the process I followed to manually set up relationships for the hospital dataset.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why do we like this?&lt;/strong&gt; Because it’s efficient. When you filter by a specific "County," Power BI only has to make one hop from the Dimension table to the Fact table to give you the numbers. It’s simple, clean, and fast.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Snowflake Schema:&lt;/strong&gt; The &lt;strong&gt;Complicated Cousin&lt;/strong&gt; Sometimes, your dimensions have dimensions. For example, imagine you have a Products table, which links to a Sub-Category table, which links to a Category table. Visually, this looks like a snowflake branching out. While this saves space in a database, it’s annoying for Power BI. To get an answer, the software has to run through a chain of relationships. It’s like playing a game of "Telephone" ,it takes longer and uses more processing power. The Verdict? Avoid snowflaking if you can. Flatten your dimensions to keep that Star shape.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Should You Care?&lt;/strong&gt; You might be thinking, "Can't I just load one giant table with everything in it?" You could, but you shouldn't.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Performance:&lt;/strong&gt; A good model makes your report snappy. A bad one makes users wait ten seconds for a graph to load.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;DAX Simplicity:&lt;/strong&gt; We started looking at DAX aggregation and filter functions this week. If your model is a mess, your DAX formulas have to be incredibly complex to work around it. A clean Star Schema allows you to write simple, elegant DAX.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt; Data modelling is the invisible foundation of a great report. It’s the difference between a dashboard that works and one that crashes. As I continue diving into DAX and visualization, I’m realizing that time spent fixing the model is never time wasted.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>From Chaos to Clarity: How I Built a Dynamic Sales Dashboard in Excel</title>
      <dc:creator>Githinji Victor Maina</dc:creator>
      <pubDate>Sun, 25 Jan 2026 22:55:05 +0000</pubDate>
      <link>https://dev.to/githinji_victormaina_627/title-from-chaos-to-clarity-how-i-built-a-dynamic-sales-dashboard-in-excel-458</link>
      <guid>https://dev.to/githinji_victormaina_627/title-from-chaos-to-clarity-how-i-built-a-dynamic-sales-dashboard-in-excel-458</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;br&gt;
In the world of data science, we often get excited about Python, SQL, and Machine Learning. But the truth is, the world runs on spreadsheets. Microsoft Excel remains the most widely used tool for business intelligence and rapid prototyping.&lt;/p&gt;

&lt;p&gt;For my latest project at the Lux Tech Academy, I was challenged to take a raw, messy sales dataset and transform it into a "Mastery Dashboard." The goal? To answer complex business questions like "Which sales reps are giving away too much discount?" and "What happens to our profit if inflation hits 10%?"&lt;/p&gt;

&lt;p&gt;Here is how I built it,from data cleaning to advanced scenario modeling.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: The Clean Up (Data Preparation)&lt;/strong&gt;&lt;br&gt;
Real-world data is never clean. My dataset had 600+ rows of transactional data, but it was full of errors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Missing Data:&lt;/strong&gt; I found blank entries for cities and salespersons. I used Excel's Go To Special &amp;gt; Blanks feature to identify and fill these gaps efficiently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Negative Prices:&lt;/strong&gt; Some unit prices were negative (a common data entry error). I fixed this using the =ABS() function to convert them to positive values.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lead Time:&lt;/strong&gt; To measure shipping efficiency, I created a new column LeadTimeDays using the formula =RequiredDate - OrderDate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: The Logic (Advanced Formulas)&lt;/strong&gt;&lt;br&gt;
To get real insights, raw data isn't enough. I needed to calculate profitability. I used structural formulas to derive:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gross Revenue:&lt;/strong&gt; Price × Quantity × (1 - Discount)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Margin %:&lt;/strong&gt; Gross Profit / Gross Revenue&lt;/p&gt;

&lt;p&gt;This allowed me to see not just how much we were selling, but how much money we were actually making.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: The "What-If" Machine (Scenario Modeling)&lt;/strong&gt;&lt;br&gt;
This was the most powerful part of the project. I didn't want a static report; I wanted a tool that could predict the future.&lt;/p&gt;

&lt;p&gt;I built a Scenario Control Panel that allows a user to type in an "Inflation Rate" or a "Discount Cap." By linking my data columns to these input cells using absolute references (e.g., $AF$2), the entire dataset updates instantly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scenario A:&lt;/strong&gt; If inflation rises by 5%, our costs adjust automatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scenario B:&lt;/strong&gt; If we cap discounts at 20%, we can see exactly how much revenue we save.&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%2Fhepiwh5czgg1gztfsa8p.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%2Fhepiwh5czgg1gztfsa8p.png" alt=" " width="666" height="820"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Visualizing the Story (The Dashboard)&lt;/strong&gt;&lt;br&gt;
Finally, I brought it all together in an interactive dashboard.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Slicers:&lt;/strong&gt; I added buttons to filter data by Channel (Retail vs. Online) and Product Category.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;KPI Cards:&lt;/strong&gt; Big, bold numbers at the top show Total Revenue, Margin %, and On-Time Delivery rates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Outlier Detection:&lt;/strong&gt; I built a chart specifically to catch Sales Reps who were giving discounts higher than 20%, helping management spot revenue leakage.&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%2Fj8f7ulmpcz355esjomcl.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%2Fj8f7ulmpcz355esjomcl.png" alt=" " width="800" height="406"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br&gt;
This project reinforced that Excel is more than just rows and columns—it is a powerful decision-support system. By combining data cleaning, logic formulas, and interactive dashboarding, I was able to turn a CSV file into a business solution.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>dataanalytics</category>
    </item>
    <item>
      <title>A Beginner’s Guide to Git Bash and GitHub: Pushing, Pulling, and Version Control</title>
      <dc:creator>Githinji Victor Maina</dc:creator>
      <pubDate>Sun, 18 Jan 2026 09:43:52 +0000</pubDate>
      <link>https://dev.to/githinji_victormaina_627/a-beginners-guide-to-git-bash-and-github-pushing-pulling-and-version-control-45fm</link>
      <guid>https://dev.to/githinji_victormaina_627/a-beginners-guide-to-git-bash-and-github-pushing-pulling-and-version-control-45fm</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;br&gt;
If you are starting your journey in tech, you have probably heard the words "Git" and "GitHub" thrown around constantly. Maybe you have even installed them but aren't quite sure how they actually work.&lt;/p&gt;

&lt;p&gt;In this guide, I will walk you through the absolute essentials: how to set up your environment, track changes, and push your code to the internet. By the end of this article, you will understand the core workflow that professional developers use every day.&lt;/p&gt;

&lt;p&gt;What is Version Control?&lt;/p&gt;

&lt;p&gt;Before we type any commands, we need to understand Version Control.&lt;/p&gt;

&lt;p&gt;Imagine you are writing a university essay. You might have files like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Essay_Final.docx&lt;/li&gt;
&lt;li&gt;Essay_Final_v2.docx&lt;/li&gt;
&lt;li&gt;Essay_Final_REALLY_DONE.docx&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is messy. Git solves this by tracking changes to a single file over time. It allows you to save "snapshots" (called commits) of your project history. If you make a mistake, you can simply revert to an earlier snapshot.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Git: The tool installed on your laptop (Local).&lt;/li&gt;
&lt;li&gt;GitHub: The website where you upload your code (Remote).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Configuration (The One-Time Setup)&lt;/strong&gt;&lt;br&gt;
Since you have already installed Git Bash, the first thing you must do is introduce yourself to Git. This ensures that every "save" you make is tagged with your name.&lt;/p&gt;

&lt;p&gt;Open Git Bash and run these two commands:&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%2F00dcxio6e589u3cjd18j.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%2F00dcxio6e589u3cjd18j.png" alt=" " width="639" height="114"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To check if it worked, type:&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%2Fqp529fii12avde9cbc1c.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%2Fqp529fii12avde9cbc1c.png" alt=" " width="655" height="118"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Initializing a Repository&lt;/strong&gt;&lt;br&gt;
To start tracking a project, you need to initialize it. Open Git Bash in your project folder and run:&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%2Frn6jw6q2ilz0u6ikbw2p.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%2Frn6jw6q2ilz0u6ikbw2p.png" alt=" " width="642" height="101"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This command creates a hidden .git folder. It tells Git: "Start watching this directory for changes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: The Staging Area &amp;amp; Committing&lt;/strong&gt;&lt;br&gt;
Git doesn't save changes automatically. You have to tell it exactly what to save. This is a two-step process:  &lt;strong&gt;Staging and Committing.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Check Status&lt;/strong&gt;&lt;br&gt;
First, let's see which files Git has noticed are new or changed:&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%2Fx2jlavclt68lb3uyagd0.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%2Fx2jlavclt68lb3uyagd0.png" alt=" " width="631" height="94"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If your text is red, it means the file is not yet staged.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Stage Changes (git add)&lt;/strong&gt;&lt;br&gt;
Think of this as putting a letter in an envelope. You are preparing the file to be sent.&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%2Fgc9yyvg79h4ro4axoion.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%2Fgc9yyvg79h4ro4axoion.png" alt=" " width="647" height="99"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(The &lt;strong&gt;.&lt;/strong&gt; tells Git to add ALL changed files at once).&lt;br&gt;
&lt;strong&gt;3. Commit Changes (git commit)&lt;/strong&gt;&lt;br&gt;
Now, we seal the envelope. This saves the snapshot permanently.&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%2Fo0jueq0g9i0qyht9qmq8.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%2Fo0jueq0g9i0qyht9qmq8.png" alt=" " width="638" height="95"&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%2Fcbe3u4mxvp5a2d9rd4yd.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%2Fcbe3u4mxvp5a2d9rd4yd.png" alt=" " width="736" height="815"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Connecting to GitHub&lt;/strong&gt;&lt;br&gt;
Now that your code is saved locally, let's put it on the internet.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to GitHub.com and create a new repository (click the + icon).&lt;/li&gt;
&lt;li&gt;Copy the URL provided (it looks like &lt;a href="https://github.com/username/repo.git" rel="noopener noreferrer"&gt;https://github.com/username/repo.git&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Back in your terminal, link your local folder to GitHub:&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%2Fb3ovnhiqpi3udkxf7vxk.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%2Fb3ovnhiqpi3udkxf7vxk.png" alt=" " width="626" height="107"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pushing Code&lt;/strong&gt;&lt;br&gt;
"Pushing" uploads your commits from your computer to GitHub.&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%2Fggjs4eyx8i2tr9vign4a.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%2Fggjs4eyx8i2tr9vign4a.png" alt=" " width="632" height="99"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;origin:&lt;/strong&gt; The nickname for your online repository.&lt;br&gt;
&lt;strong&gt;main:&lt;/strong&gt; The branch you are working on.&lt;/p&gt;

&lt;p&gt;If you refresh your GitHub page, you will now see your files!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5: Pulling Changes&lt;/strong&gt;&lt;br&gt;
If you work on a team, or if you edit a file directly on the GitHub website, your laptop will be "behind" the online version.&lt;br&gt;
To update your local computer, we use Pull:&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%2Fhmq8o4qh520h5mosarhy.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%2Fhmq8o4qh520h5mosarhy.png" alt=" " width="633" height="101"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This downloads the latest changes and merges them into your code automatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bonus: Branching Basics&lt;/strong&gt;&lt;br&gt;
As you get advanced, you won't always work on the **main **code directly. You will use Branches.&lt;br&gt;
A branch is like a parallel universe where you can test new features without breaking the main project.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a branch: git branch feature-login&lt;/li&gt;
&lt;li&gt;Switch to it: git checkout feature-login&lt;/li&gt;
&lt;li&gt;Merge it back: git merge feature-login&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Summary of Commands&lt;/strong&gt;&lt;br&gt;
Here is a cheat sheet for your daily workflow:&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br&gt;
Version control is a superpower for developers. It saves you from losing work and helps you collaborate with others. Start by mastering add, commit, and push, and you will be well on your way to becoming a professional developer.&lt;br&gt;
&lt;strong&gt;Happy Coding!&lt;/strong&gt;&lt;/p&gt;

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