<?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: Jason Ndalamia</title>
    <description>The latest articles on Forem by Jason Ndalamia (@jason_ndalamia).</description>
    <link>https://forem.com/jason_ndalamia</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%2F3709633%2Fef3e745b-a431-436f-8952-a9f4bf18dba8.jpg</url>
      <title>Forem: Jason Ndalamia</title>
      <link>https://forem.com/jason_ndalamia</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/jason_ndalamia"/>
    <language>en</language>
    <item>
      <title>Beyond the Basics: 5 Game-Changing Secrets of SQL Joins and Window Functions</title>
      <dc:creator>Jason Ndalamia</dc:creator>
      <pubDate>Mon, 02 Mar 2026 07:05:39 +0000</pubDate>
      <link>https://forem.com/jason_ndalamia/beyond-the-basics-5-game-changing-secrets-of-sql-joins-and-window-functions-2m5e</link>
      <guid>https://forem.com/jason_ndalamia/beyond-the-basics-5-game-changing-secrets-of-sql-joins-and-window-functions-2m5e</guid>
      <description>&lt;h2&gt;
  
  
  1. Introduction: The Data Relationships Hook
&lt;/h2&gt;

&lt;p&gt;Think of a database as a digital filing cabinet. In this architecture, information is organized into drawers—or schemas—such as HR, Finance, or Sales. Within these drawers sit the documents, which represent our individual tables.&lt;/p&gt;

&lt;p&gt;While this structure ensures clean organization, real-world business intelligence rarely lives in a single drawer. To answer strategic questions, you must bridge the gaps between disparate tables without creating a "data mess". Whether you are joining sales records with inventory levels or HR data with finance budgets, mastering these relationships is what separates a basic query-writer from a Senior Architect. This guide distills complex SQL operations into high-impact takeaways, focusing on maintaining relational integrity while scaling your analysis.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. The Horizontal vs. Vertical Divide: Joins vs. Unions
&lt;/h2&gt;

&lt;p&gt;The most fundamental distinction in data architecture is how you choose to expand your result set.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Joins&lt;/strong&gt; combine tables &lt;em&gt;horizontally&lt;/em&gt;. They add columns based on a shared key (like a Primary or Foreign Key), making the result set "wider".&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Unions&lt;/strong&gt; combine tables &lt;em&gt;vertically&lt;/em&gt;. They stack rows from one dataset on top of another, making the result set "longer".&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a UNION to be architecturally sound, the query must meet three strict structural requirements: the columns must be in the same order, have the same count, and—most importantly—possess matching data types. As an architect, you must remember that the database engine is indifferent to your column aliases but ruthless regarding data types.&lt;/p&gt;

&lt;p&gt;"The database doesn't care about naming but cares about data types in Unions... If a VARCHAR is matched with an INT, the database will throw a mismatch error." — &lt;a href="https://www.datawithbaraa.com/wiki/sql" rel="noopener noreferrer"&gt;Data with Baraa&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Mental Model: Distinct vs. All&lt;/strong&gt; From a strategy perspective, think of UNION as a DISTINCT operation for stacked rows; it automatically removes duplicates. If you need the "data as is" without the overhead of deduplication, &lt;strong&gt;UNION ALL&lt;/strong&gt; is your preferred tool.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sample Query: Vertical Stacking&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="c1"&gt;-- Combining customer and employee names into a single master list&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;first_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;last_name&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;UNION&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;first_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;last_name&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;employees&lt;/span&gt;
&lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  3. The "Workhorse" Joins: Why Left is Often Better than Right
&lt;/h2&gt;

&lt;p&gt;In relational logic, the Inner Join is the default state. When you use the JOIN keyword, SQL is explicitly looking for matching values in the ON statement. If a record in the first table—for example, a customer who hasn't placed an order yet—has no match in the second table, that record "disappears" from the final result set.&lt;/p&gt;

&lt;p&gt;For high-level reporting where data integrity is paramount, the Left Join is the industry workhorse. It preserves every record from the left (first) table and fills missing data from the right table with NULL values. This ensures you don't accidentally drop crucial business entities (like customers or products) simply because they lack transaction history.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Architectural Insight&lt;/strong&gt;: The Right Join is functionally redundant. Any Right Join can be reframed as a Left Join by simply reordering the tables. In production environments, Left Joins are the standard because they align with a left-to-right reading flow, making queries significantly easier to audit and maintain.&lt;/p&gt;

&lt;p&gt;Sample Query: Production-Ready Left Join&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="c1"&gt;-- Retrieving all customers and any associated event data&lt;/span&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;customer_id&lt;/span&gt;&lt;span class="p"&gt;,&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;first_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;event_name&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;AS&lt;/span&gt; &lt;span class="k"&gt;c&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;events&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;e&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;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;customer_id&lt;/span&gt;
&lt;span class="k"&gt;WHERE&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="k"&gt;IS&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;
&lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  4. The Cartesian Chaos: Understanding the Cross Join
&lt;/h2&gt;

&lt;p&gt;A Cross Join represents the "Cartesian Product" of two tables. Unlike other joins, it ignores matching values entirely, attaching every row of the second table to every row of the first. If you join a 1,000-row table with a 500-row table, you will generate a massive result set of 500,000 rows.&lt;/p&gt;

&lt;p&gt;In standard relational reporting, Cross Joins are often avoided because they lack the primary/foreign key bond that defines logical relationships. Joining a car table and an item table by a shared color attribute "wouldn't make any sense" for data integrity. However, from a strategic standpoint, Cross Joins are powerful for generating permutations—such as creating a master grid of every possible product-color combination for an inventory audit.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Window Functions: Grouping Without the "Collapse"
&lt;/h2&gt;

&lt;p&gt;The true "game-changer" for intermediate learners is the OVER() clause. Traditional GROUP BY operations "collapse" your data, rolling multiple rows into a single aggregate level. While useful for summaries, this loses the individual row detail.&lt;/p&gt;

&lt;p&gt;Window Functions allow you to perform calculations across a result set while keeping every unique row intact. This allows you to view an individual's salary right next to the department average, or calculate a Rolling Total.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Strategic Use Case&lt;/strong&gt;: The Rolling Total In finance and healthcare, tracking cumulative sums is vital. By adding an ORDER BY clause inside the OVER() window, you transform a static sum into a running balance.&lt;/p&gt;

&lt;p&gt;Sample Query: Rolling Totals and Averages&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="c1"&gt;-- Calculating a cumulative salary sum and a static department average&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt;
  &lt;span class="n"&gt;first_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;gender&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;gender&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;employee_id&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;rolling_total&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="k"&gt;AVG&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;gender&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;avg_dept_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;h2&gt;
  
  
  6. The Ranking Trio: Row Number, Rank, and Dense Rank
&lt;/h2&gt;

&lt;p&gt;Sequencing data is a core requirement for leaderboards and performance tracking. SQL offers three nuances for handling ties within a window:&lt;br&gt;
&lt;strong&gt;•Row Number&lt;/strong&gt;: Assigns a unique, sequential integer to every row (1, 2, 3, 4). Even in the event of a tie, the numbers will not repeat.&lt;br&gt;
&lt;strong&gt;•Rank&lt;/strong&gt;: Assigns the same number to ties but skips the next position based on the count of duplicates. If two rows tie for 1st, the next is 3rd (1, 1, 3). This is "positional" ranking.&lt;br&gt;
&lt;strong&gt;•Dense Rank&lt;/strong&gt;: Assigns the same number to ties but keeps the next number sequential (1, 1, 2). This is "numerical" ranking.&lt;br&gt;
Architectural Preference: DENSE_RANK is typically preferred for professional reporting. It ensures there are no "gaps" in your leaderboard, maintaining a clean hierarchy regardless of how many entities share the same value.7. &lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion: Levelling Up Your Query Game
&lt;/h2&gt;

&lt;p&gt;Moving from a beginner to an advanced analyst is less about learning syntax and more about understanding the logic of relationships. Every time you approach a new dataset, you must make a strategic choice: do you need to collapse your data into an aggregate summary with a Join or Group By, or do you need to partition it with a Window Function to maintain row-level detail?&lt;/p&gt;

&lt;p&gt;The absolute grounding rule of SQL is that it is a language of relationships. By mastering the nuances of how data stacks vertically via Unions or expands horizontally via Joins, you ensure the relational integrity of your architecture.&lt;/p&gt;

</description>
      <category>sql</category>
      <category>dataanalytics</category>
      <category>database</category>
      <category>programming</category>
    </item>
    <item>
      <title>How Analysts Translate Messy Data, DAX, and Dashboards into Action Using Power BI</title>
      <dc:creator>Jason Ndalamia</dc:creator>
      <pubDate>Sun, 08 Feb 2026 12:07:03 +0000</pubDate>
      <link>https://forem.com/jason_ndalamia/how-analysts-translate-messy-data-dax-and-dashboards-into-action-using-power-bi-f77</link>
      <guid>https://forem.com/jason_ndalamia/how-analysts-translate-messy-data-dax-and-dashboards-into-action-using-power-bi-f77</guid>
      <description>&lt;p&gt;In the realm of business intelligence, the distance between a raw spreadsheet and a strategic decision is bridged by the data analyst’s technical workflow. Using Power BI, analysts do not merely report numbers; they architect a system that transforms chaotic inputs into clear, actionable insights. This process follows a rigorous path: harmonising messy data, structuring it for performance, applying business logic through DAX, and delivering clarity via interactive dashboards.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Taming the Chaos: From Messy Data to Trusted Information
&lt;/h2&gt;

&lt;p&gt;Real-world data is rarely ready for immediate analysis. It arrives full of inconsistencies that can break calculations and skew results. Before any visualisation occurs, analysts use Power Query to clean and transform this raw material into trusted information.&lt;br&gt;
&lt;strong&gt;• Harmonising Data:&lt;/strong&gt; A common issue is the presence of "pseudo-blanks"—text entries like "NA," "error," "blank," or "not provided" mixed into columns. Power BI reads this as valid text rather than missing values. Analysts must use the "Replace Values" function to harmonise these into a single standard category, such as "unknown," to ensure accurate categorisation without deleting potentially valuable raw data.&lt;br&gt;
&lt;strong&gt;• Ensuring Precision:&lt;/strong&gt; Small formatting errors can lead to duplication. For instance, "Kenya " (with a space) and "Kenya" are treated as different values. Analysts use the TRIM function to remove leading and trailing whitespace, ensuring that categories aggregate correctly.&lt;br&gt;
&lt;strong&gt;• Data Typing:&lt;/strong&gt; Attempting to sum a column will fail if the data type is set to text. Analysts must rigorously define columns—setting revenue to "Decimal Number" for calculation while keeping identifiers like phone numbers as "Text" to prevent accidental aggregation.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. The Blueprint for Speed: The Star Schema
&lt;/h2&gt;

&lt;p&gt;A major pitfall in data management is the "flat table"—a single, massive spreadsheet containing every detail. This structure leads to duplication, wasted memory, and maintenance nightmares.&lt;br&gt;
To solve this, analysts employ the Star Schema, a modelling technique that separates data into two distinct types:&lt;br&gt;
&lt;strong&gt;• Fact Tables:&lt;/strong&gt; These contain transactional metrics (e.g., Sales, Quantity, Total Revenue) and sit at the centre of the model.&lt;br&gt;
&lt;strong&gt;• Dimension Tables:&lt;/strong&gt; These contain descriptive attributes (e.g., Customers, Products, Stores) and surround the fact table.&lt;br&gt;
This structure allows for "write once, use many" efficiency. When a store relocates from one city to another, the analyst updates a single row in the Dimension table, rather than millions of rows in the Fact table. This model ensures that when stakeholders ask complex questions, the relationships between tables allow filters to flow correctly, providing accurate answers instantly.&lt;/p&gt;

&lt;h2&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%2Fqqf5itjk4rwwv86s2nh6.png" alt="The Star Schema" width="510" height="422"&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  3. The Engine of Analysis: DAX Measures and Logic
&lt;/h2&gt;

&lt;p&gt;Once the data is structured, DAX (Data Analysis Expressions) is the language used to extract business logic. Analysts distinguish between Calculated Columns (row-by-row logic) and Measures (dynamic aggregations) to answer specific business questions.&lt;br&gt;
&lt;strong&gt;• Automating Business Logic:&lt;/strong&gt; Analysts use logical functions like IF and SWITCH to automate categorisation. For example, a nested IF statement or a SWITCH function can scan phone number prefixes (e.g., 254, 256) and automatically classify the country of origin as Kenya or Uganda.&lt;br&gt;
&lt;strong&gt;• Time Intelligence:&lt;/strong&gt; Business decisions rely heavily on historical context. Using time intelligence functions like DATEADD and SAMEPERIODLASTYEAR inside a CALCULATE function, analysts can generate metrics like "Revenue Last Month" or "Revenue Last Year”. This shifts the context of the data, allowing a manager to instantly see if performance is trending up or down compared to previous periods without manual recalculation.&lt;br&gt;
&lt;strong&gt;• Handling Complexity:&lt;/strong&gt; Advanced iterators like SUMX allow for calculations that require row-by-row evaluation before aggregating, such as multiplying yield by market price for every single transaction to get a precise total revenue.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Visualising the Story: From Grids to Insights
&lt;/h2&gt;

&lt;p&gt;A dashboard is not just a collection of charts; it is a tool for decision-making. Analysts select specific visuals to answer specific questions, ensuring the report is intuitive for non-technical stakeholders.&lt;br&gt;
&lt;strong&gt;• Trends and Comparisons:&lt;/strong&gt; To show how revenue evolves over time, analysts use Line Charts or Area Charts, which emphasise volume and trends. For comparing categories, such as revenue by county, Column Charts (vertical) or Bar Charts (horizontal) are used.&lt;br&gt;
&lt;strong&gt;• Correlations:&lt;/strong&gt; To test hypotheses, such as "Does higher profit correlate with higher revenue?", analysts use Scatter Charts. If the bubbles trend upward, it indicates a positive correlation, validating the business strategy.&lt;br&gt;
&lt;strong&gt;• Managing High-Volume Data:&lt;/strong&gt; When dealing with many categories (e.g., revenue by county and then by crop type), standard pie charts become cluttered. Analysts use Tree Maps or Decomposition Trees to visualise hierarchies and drill down into the data to understand exactly why a number is high or low.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. The Executive View: The Dashboard
&lt;/h2&gt;

&lt;p&gt;The final output is the Dashboard—a one-page summary designed to answer the most important questions at a glance.&lt;br&gt;
&lt;strong&gt;• Immediate Health Checks:&lt;/strong&gt; Critical numbers (Total Profit, Total Yield) are placed at the top using KPI Cards or Multi-row Cards. This ensures that decision-makers see the most vital metrics immediately.&lt;br&gt;
&lt;strong&gt;• Interactivity:&lt;/strong&gt; Static reports limit discovery. Analysts add Slicers to allow users to filter the entire dashboard by specific segments, such as "County" or "Crop Type." This transforms a generic report into a tailored tool for specific regional managers.&lt;br&gt;
&lt;strong&gt;• AI-Driven Insights:&lt;/strong&gt; Tools like Q&amp;amp;A allow users to type questions in plain English (e.g., "Total yield by crop type") and receive an instant visual answer, bridging the gap between technical data models and ad-hoc business inquiries.&lt;/p&gt;

&lt;h2&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%2F71n44qyqlerajbaar85n.png" alt="Q&amp;amp;A Tool" width="782" height="331"&gt;
&lt;/h2&gt;

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

&lt;p&gt;By mastering these steps—cleaning data in Power Query, modelling with Star Schemas, calculating with DAX, and visualising in Power BI—analysts transform raw, messy data into a coherent narrative that drives real-world business action.&lt;/p&gt;

</description>
      <category>analytics</category>
      <category>data</category>
      <category>datascience</category>
      <category>microsoft</category>
    </item>
    <item>
      <title>The Blueprint of Intelligence: Mastering Data Modelling and Schemas in Power BI</title>
      <dc:creator>Jason Ndalamia</dc:creator>
      <pubDate>Sun, 01 Feb 2026 09:00:53 +0000</pubDate>
      <link>https://forem.com/jason_ndalamia/the-blueprint-of-intelligence-mastering-data-modelling-and-schemas-in-power-bi-5dhc</link>
      <guid>https://forem.com/jason_ndalamia/the-blueprint-of-intelligence-mastering-data-modelling-and-schemas-in-power-bi-5dhc</guid>
      <description>&lt;p&gt;In the realm of business analytics, creating a visually stunning dashboard is often the final step of a much deeper process. The true backbone of every successful Power BI solution is &lt;strong&gt;data modelling.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Data modelling is the process of identifying, organising, and defining the data a business collects and the relationships between them. It involves creating visual representations of data structures to ensure that reports are not only accurate but also performant and scalable. As data volumes grow, the difference between a sluggish, confusing report and a high-speed analytical tool often comes down to the quality of the underlying model. The Building Blocks: &lt;strong&gt;Fact and Dimension Tables&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To understand how to build a model, one must first distinguish between the two types of tables that inhabit it: &lt;strong&gt;Fact tables&lt;/strong&gt; and &lt;strong&gt;Dimension tables.&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;A fact table is the "main table" in your model, typically containing events such as sales transactions, hospital visits, or machine readings.&lt;br&gt;
• &lt;strong&gt;Characteristics&lt;/strong&gt;: They contain &lt;strong&gt;quantitative attributes&lt;/strong&gt; (numbers) meant to be aggregated, such as "Revenue," "Yield," or "Quantity Sold".&lt;br&gt;
• &lt;strong&gt;Structure&lt;/strong&gt;: These tables are usually long and narrow. They often contain duplicate values because an event (like a specific product sale) can occur multiple times. They utilise keys (like Product ID) to link out to other tables.&lt;/p&gt;

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

&lt;p&gt;Dimension tables contain the descriptive attributes used to slice, group, and filter the data found in fact tables.&lt;br&gt;
• &lt;strong&gt;Characteristics&lt;/strong&gt;: These tables hold information such as "Customer Name," "Product Category," or "Geographic Region".&lt;br&gt;
• &lt;strong&gt;Structure&lt;/strong&gt;: Unlike fact tables, dimension tables should contain &lt;strong&gt;unique values&lt;/strong&gt; for the entity they describe (no duplicates). They are generally wider but contain fewer rows than fact tables.&lt;/p&gt;

&lt;h1&gt;
  
  
  Schema Design: Star vs. Snowflake
&lt;/h1&gt;

&lt;p&gt;The arrangement of these tables is known as the &lt;strong&gt;schema&lt;/strong&gt;. While different designs exist, the Star Schema is universally recognised as the gold standard for Power BI. &lt;/p&gt;

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

&lt;p&gt;In a star schema, a central fact table is surrounded by multiple dimension tables, resembling a star.&lt;br&gt;
• &lt;strong&gt;Why it is preferred:&lt;/strong&gt; The Power BI engine is optimised to work best with this structure. It reduces the number of joins required to filter data, creating a cleaner, more organised model.&lt;br&gt;
• &lt;strong&gt;Benefits:&lt;/strong&gt; It ensures DAX measures calculate faster, reports refresh more quickly, and the solution remains scalable even as data volume increases into the millions of rows.&lt;/p&gt;

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

&lt;p&gt;The snowflake schema is a variant of the star schema where dimension tables are further normalised. In this design, dimensions branch off into other dimensions. For example, a "Product" table might link to a separate "Product Category" table, which in turn links to "Product Subcategory".&lt;br&gt;
• &lt;strong&gt;The Trade-off:&lt;/strong&gt; While this can be useful when fact tables exist at different levels of granularity (e.g., sales by product vs. targets by region), it generally adds unnecessary complexity. Extra relationships force filters to propagate through longer chains, which can negatively impact performance.&lt;/p&gt;

&lt;h2&gt;
  
  
  One Big Table (OBT)
&lt;/h2&gt;

&lt;p&gt;Beginners often attempt to flatten all data into a single table. While this may work for quick prototyping or ad-hoc analysis, it is considered a transitory state. It limits functionality—such as time intelligence and handling multiple data grains—and often leads to performance challenges due to large file sizes and repetitive data storage. &lt;/p&gt;

&lt;h3&gt;
  
  
  The Glue: Relationships
&lt;/h3&gt;

&lt;p&gt;A data model is only functional if the tables effectively talk to one another. This is achieved through relationships, which are defined by &lt;strong&gt;cardinality&lt;/strong&gt; and &lt;strong&gt;cross-filter direction.&lt;/strong&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  Cardinality
&lt;/h3&gt;

&lt;p&gt;Cardinality defines how rows in one table relate to rows in another.&lt;br&gt;
• &lt;strong&gt;One-to-Many:&lt;/strong&gt; This is the ideal relationship for linking a Dimension table (one unique ID) to a Fact table (many transactions).&lt;br&gt;
• &lt;strong&gt;Many-to-Many:&lt;/strong&gt; This relationship type is problematic and should be avoided whenever possible. It typically arises when connecting two fact tables directly or when dimensions are not unique. Misusing this can lead to "ambiguous" results, duplicated totals, and incorrect reporting.&lt;/p&gt;

&lt;h3&gt;
  
  
  Directionality
&lt;/h3&gt;

&lt;p&gt;• &lt;strong&gt;Single Direction:&lt;/strong&gt; Filters flow from the "one" side (Dimension) to the "many" side (Fact). This is the recommended setting for most scenarios.&lt;br&gt;
• &lt;strong&gt;Bi-directional (Both)&lt;/strong&gt;: This allows filters to flow in both directions. While it can solve specific problems (like filtering a slicer based on available data), it is computationally expensive and can produce unpredictable results by introducing ambiguity into the model path.&lt;/p&gt;

&lt;h1&gt;
  
  
  Why Good Modelling is Critical
&lt;/h1&gt;

&lt;p&gt;The structure of your data determines the &lt;strong&gt;performance, flexibility, and accuracy&lt;/strong&gt; of your reports.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Performance:&lt;/strong&gt; Poor modelling choices—such as relying on "One Big Table" or using complex snowflake chains—can slow down data refreshes and visual rendering. Conversely, a star schema minimises the work the engine must do, allowing reports to scale to very large datasets without lagging.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Accuracy:&lt;/strong&gt; Bad relationships jeopardise data integrity. For instance, analysing monthly sales targets against daily sales data using a many-to-many relationship can cause targets to be duplicated across every day, leading to vastly inflated and incorrect totals. A proper model ensures aggregations (sums, averages) are calculated correctly across different contexts.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Usability:&lt;/strong&gt; A well-designed star schema groups attributes logically (e.g., all customer details in one Customer table). This makes the "Fields" pane cleaner and easier for end-users to navigate compared to searching through a massive, flat table.&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;While it is tempting to drag and drop raw data directly into visualisations, investing time in data modelling is non-negotiable for professional analysis. By adhering to the &lt;strong&gt;star schema&lt;/strong&gt;, ensuring &lt;strong&gt;one-to-many relationships&lt;/strong&gt;, and clearly distinguishing between &lt;strong&gt;facts and dimensions&lt;/strong&gt;, developers can build Power BI solutions that are robust, accurate, and lightning-fast.&lt;/p&gt;

</description>
      <category>datascience</category>
      <category>beginners</category>
      <category>analytics</category>
      <category>powerbi</category>
    </item>
    <item>
      <title>Introduction to MS Excel for Data Analytics</title>
      <dc:creator>Jason Ndalamia</dc:creator>
      <pubDate>Sun, 25 Jan 2026 16:08:49 +0000</pubDate>
      <link>https://forem.com/jason_ndalamia/introduction-to-ms-excel-for-data-analytics-26an</link>
      <guid>https://forem.com/jason_ndalamia/introduction-to-ms-excel-for-data-analytics-26an</guid>
      <description>&lt;p&gt;When people hear &lt;strong&gt;Data Analytics&lt;/strong&gt;, they often think of complex programming languages like Python or SQL. However, the functions found in Excel are generally the same ones found in Power BI, SQL, and Python—the primary difference is just the syntax used for execution.&lt;/p&gt;

&lt;p&gt;This guide will introduce you to MS Excel as a powerful analytics tool, covering everything from basic data cleaning to interactive dashboards using Pivot Tables.&lt;/p&gt;

&lt;h1&gt;
  
  
  1. Organising Your Data: Sorting and Filtering
&lt;/h1&gt;

&lt;p&gt;Before analysing data, you must ensure it is organised.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Data Sorting: Sorting involves arranging data in a specific order.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Text: Arranges data from A to Z or Z to A.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Numbers: Arranges data from smallest to largest or largest to smallest.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Dates: Arranges data from oldest to newest or newest to oldest.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ Important Tip: When sorting, always expand the selection when prompted. If you don't, Excel might reorder only the selected column, which will disorient the rest of your data and cause records to be mismatched.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Data Filtering allows you to temporarily display only the rows that meet specific criteria while hiding the rest. You can toggle filters on or off using the shortcut Control + Shift + L.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Text Filters: Use these to find cells that "contain" specific words or "begin with" a certain letter.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Number Filters: Use these to filter for "Top 10" items or values "Greater Than" a specific number.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sort &amp;amp; Filter dropdown menu in the Home tab&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%2Fn1r27oifln3mgxuya7gf.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%2Fn1r27oifln3mgxuya7gf.png" alt="Sort &amp;amp; Filter dropdown menu in the Home tab" width="177" height="305"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  2. Cleaning Data with Text Functions
&lt;/h1&gt;

&lt;p&gt;Raw data is often messy. Excel provides specific functions to clean and standardise text.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;TRIM: Removes extra leading or trailing spaces that are often invisible but cause errors.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;PROPER: Capitalises the first letter of each word (great for fixing names).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UPPER / LOWER: Converts text entirely to uppercase or lowercase.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;CONCAT: Combines two or more text strings into one cell. In older versions of Excel, you can use the &amp;amp; (ampersand) symbol to achieve this.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Messy names and a 'Cleaned' column using &lt;code&gt;=PROPER(TRIM(cell))&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fneq20qllyu0vje0rj0jd.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%2Fneq20qllyu0vje0rj0jd.png" alt="Messy names and a 'Cleaned' column using =PROPER(TRIM(cell))" width="182" height="201"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  3. Automating Decisions with Logical Functions
&lt;/h1&gt;

&lt;p&gt;Logical functions help you categorise data automatically based on rules.&lt;/p&gt;

&lt;p&gt;The IF Function The IF function performs a test: it returns one value if the test is true, and a different value if it is false.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Example: Imagine you want to categorise salaries. If the salary in cell E2 exceeds 80,000, it is "High"; otherwise, it is "Low".&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Formula: &lt;code&gt;=IF(E2 &amp;gt; 80000, "High", "Low")&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Nested IFs. If you have more than two categories (e.g., Old, Middle-aged, Young), you can use a Nested IF, which places a second IF function inside the first one.&lt;/p&gt;

&lt;p&gt;AND / OR Logic You can combine IF with AND (where both conditions must be met) or OR (where at least one condition must be met).&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;AND Example: Assign a bonus only if experience &amp;gt; 30 years AND projects &amp;gt; 10.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Formula: &lt;code&gt;=IF(AND(O2 &amp;gt; 30, P2 &amp;gt; 10), "Assign Bonus", "Do not Assign Bonus")&lt;/code&gt;.&lt;/p&gt;

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

&lt;h1&gt;
  
  
  4. Connecting Data with Lookup Functions
&lt;/h1&gt;

&lt;p&gt;Data is often split across different tables. Lookup functions allow you to retrieve data from one table and pull it into another.&lt;/p&gt;

&lt;p&gt;VLOOKUP (Vertical Lookup) VLOOKUP searches for a value in the first column of a range and returns a result from a column you specify.&lt;/p&gt;

&lt;p&gt;The Syntax: &lt;code&gt;=VLOOKUP(lookup_value, table_array, col_index_num, [range_lookup])&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;lookup_value: The ID you are searching for.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;table_array: The range containing your data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;col_index_num: The column number containing the answer (e.g., column 5 for Salary).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;range_lookup: Use FALSE for an exact match, which is recommended for IDs.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;A VLOOKUP formula connecting an Employee ID to their Salary&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%2Fmqcvr7lnxayadkp03kh2.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%2Fmqcvr7lnxayadkp03kh2.png" alt="A VLOOKUP formula connecting an Employee ID to their Salary" width="402" height="42"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  5. Mastering Date Functions
&lt;/h1&gt;

&lt;p&gt;Excel stores dates as serial numbers, allowing for powerful calculations.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;TODAY: Returns the current date.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;NETWORKDAYS: Calculates the number of working days between two dates, automatically excluding weekends.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;DATEDIF: A "hidden" function that calculates the difference between two dates in years ("y"), months ("m"), or days.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  6. The Power of Pivot Tables
&lt;/h1&gt;

&lt;p&gt;Pivot tables are the ultimate tool for summarising data. They allow you to aggregate thousands of rows into a clear summary table without writing complex formulas.&lt;/p&gt;

&lt;p&gt;How to create one:&lt;/p&gt;

&lt;p&gt;Click a single cell inside your data range (avoid selecting the whole sheet).&lt;/p&gt;

&lt;p&gt;Go to Insert &amp;gt; Pivot Table.&lt;/p&gt;

&lt;p&gt;Drag and Drop fields:&lt;/p&gt;

&lt;p&gt;Rows: For categories (e.g., Department).&lt;/p&gt;

&lt;p&gt;Values: For numbers to calculate (e.g., Sum of Salary, Count of Employees).&lt;/p&gt;

&lt;p&gt;Interactive Slicers: To make your report interactive, insert a Slicer. This is a visual button menu that filters your Pivot Table instantly when clicked.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;A Pivot Table with a Slicer for 'Department' next to it.&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%2Frtlcqisd5v2ecg1jh7ca.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%2Frtlcqisd5v2ecg1jh7ca.png" alt="A Pivot Table with a Slicer for 'Department' next to it" width="743" height="366"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Summary
&lt;/h1&gt;

&lt;p&gt;Excel is more than just a spreadsheet; it is a robust data analytics environment. By mastering text cleaning, logical functions, lookups, and Pivot Tables, you can transform raw data into meaningful insights.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>datascience</category>
      <category>productivity</category>
      <category>excel</category>
    </item>
    <item>
      <title>A Beginner’s Guide to Git and GitHub: From Installation to Your First Push</title>
      <dc:creator>Jason Ndalamia</dc:creator>
      <pubDate>Fri, 16 Jan 2026 12:52:05 +0000</pubDate>
      <link>https://forem.com/jason_ndalamia/a-beginners-guide-to-git-and-github-from-installation-to-your-first-push-418l</link>
      <guid>https://forem.com/jason_ndalamia/a-beginners-guide-to-git-and-github-from-installation-to-your-first-push-418l</guid>
      <description>&lt;p&gt;Starting my journey in &lt;strong&gt;Data Science, Analysis, and AI at LUXDevHQ&lt;/strong&gt; felt like learning a new language while trying to build a house. One of the most important tools I’ve discovered along the way is &lt;strong&gt;Version Control&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In this guide, I’ll walk you through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Setting up Git Bash
&lt;/li&gt;
&lt;li&gt;Connecting Git to GitHub
&lt;/li&gt;
&lt;li&gt;Mastering essential &lt;strong&gt;push&lt;/strong&gt; and &lt;strong&gt;pull&lt;/strong&gt; commands
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  1. What Is Git and Why Does It Matter?
&lt;/h2&gt;

&lt;p&gt;Git is a &lt;strong&gt;Version Control System (VCS)&lt;/strong&gt;. Think of it as a &lt;em&gt;save-point system&lt;/em&gt; for your code.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why is Git important?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;⏪ Time Travel&lt;/strong&gt; – If you break your code, you can roll back to a version that worked.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🤝 Collaboration&lt;/strong&gt; – Multiple people can work on the same project without overwriting each other’s work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🧪 Experimentation&lt;/strong&gt; – You can create &lt;em&gt;branches&lt;/em&gt; to try new features without affecting the main project.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2. Setting Up Your Environment
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step A: Install Git Bash
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;a href="https://git-scm.com" rel="noopener noreferrer"&gt;Git&lt;/a&gt; and download Git for your OS (I used Windows).&lt;/li&gt;
&lt;li&gt;Run the installer.
&amp;gt; 💡 &lt;em&gt;Pro tip:&lt;/em&gt; You can keep the default settings for most options.&lt;/li&gt;
&lt;li&gt;After installation, search for &lt;strong&gt;Git Bash&lt;/strong&gt; in your applications. It looks like a terminal window.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Step B: Configure Your Identity
&lt;/h3&gt;

&lt;p&gt;To let GitHub know who is uploading code, configure your global Git settings:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git config &lt;span class="nt"&gt;--global&lt;/span&gt; user.name &lt;span class="s2"&gt;"Your Name"&lt;/span&gt;
git config &lt;span class="nt"&gt;--global&lt;/span&gt; user.email your-email@example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  3. Secure Your Connection: Setting Up SSH Keys
&lt;/h2&gt;

&lt;p&gt;Using SSH is the professional standard. It’s more secure and saves you from typing your password every time you push code.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Generate Your SSH Key
&lt;/h3&gt;

&lt;p&gt;Open Git Bash and enter (replace with your GitHub email):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh-keygen &lt;span class="nt"&gt;-t&lt;/span&gt; ed25519 &lt;span class="nt"&gt;-C&lt;/span&gt; your_email@example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;• File Location: Press Enter to use the default location.&lt;br&gt;
• Passphrase: As a beginner, I left this empty for convenience.&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 2: Add Key to the SSH Agent
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;eval&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;ssh-agent &lt;span class="nt"&gt;-s&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
ssh-add ~/.ssh/id_ed25519
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Step 3: Add the Public Key to GitHub
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt; Copy the key:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; ~/.ssh/id_ed25519.pub 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Go to GitHub: Settings → SSH and GPG keys → New SSH Key.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Give it a name (e.g., "My Learning Laptop") and paste your key into the "Key" box.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;
  
  
  Step 4: Test the Connection
&lt;/h3&gt;

&lt;p&gt;Run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh &lt;span class="nt"&gt;-T&lt;/span&gt; git@github.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Success Check! If you see "Hi [YourUsername]! You've successfully authenticated", you are ready!&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Navigating and Creating Your Project
&lt;/h2&gt;

&lt;p&gt;Learning to navigate via Git Bash makes you much faster than using a mouse! Use these commands to create your first repository:&lt;br&gt;
• Check Location: &lt;strong&gt;pwd&lt;/strong&gt; (Print Working Directory).&lt;br&gt;
• Go to Desktop: &lt;strong&gt;cd Desktop&lt;/strong&gt;&lt;br&gt;
• Create Folder: &lt;strong&gt;mkdir my-first-repo&lt;/strong&gt;&lt;br&gt;
• Enter Folder: &lt;strong&gt;cd my-first-repo&lt;/strong&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  5. Tracking Changes (The Core Workflow)
&lt;/h2&gt;

&lt;p&gt;Before sending code to GitHub, Git needs to "track" it locally. Run these inside your project folder:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Initialize Git: &lt;strong&gt;git init&lt;/strong&gt; (Starts tracking the folder).&lt;/li&gt;
&lt;li&gt; Check Status: &lt;strong&gt;git status&lt;/strong&gt; (See what files Git notices).&lt;/li&gt;
&lt;li&gt; Add Files: &lt;strong&gt;git add .&lt;/strong&gt; (Stages all changes to be saved).&lt;/li&gt;
&lt;li&gt; Commit: &lt;strong&gt;git commit -m "My first commit"&lt;/strong&gt; (Creates the "save point").&lt;/li&gt;
&lt;/ol&gt;


&lt;h2&gt;
  
  
  6. Pushing Code to GitHub
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Pushing&lt;/strong&gt; sends your local save points to the cloud.&lt;/p&gt;
&lt;h3&gt;
  
  
  Step A: Create the Repository on GitHub.com
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt; Log into GitHub, click the + icon → New repository.&lt;/li&gt;
&lt;li&gt; Name it (e.g., my-first-project) and keep it Public.&lt;/li&gt;
&lt;li&gt; Important: Leave "Add a README" unchecked to avoid conflicts.&lt;/li&gt;
&lt;li&gt; Click Create repository.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;
  
  
  Step B: Connect and Push
&lt;/h3&gt;

&lt;p&gt;On the GitHub setup page, click SSH and copy the URL. Then run these commands one by one:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git remote add origin git@github.com:your-username/repo-name.git
git push &lt;span class="nt"&gt;-u&lt;/span&gt; origin main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  7. Pulling Code from GitHub
&lt;/h2&gt;

&lt;p&gt;If you work on a different computer, use Pull to download the latest updates from the cloud:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git pull origin main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  📚 Resources to Keep Learning
&lt;/h2&gt;

&lt;p&gt;• &lt;a href="https://git-scm.com/doc" rel="noopener noreferrer"&gt;Official Git Documentation&lt;/a&gt;&lt;br&gt;
• &lt;a href="https://skills.github.com/" rel="noopener noreferrer"&gt;GitHub Skills: Interactive Courses&lt;/a&gt;&lt;br&gt;
• &lt;a href="https://learngitbranching.js.org/" rel="noopener noreferrer"&gt;Visualizing Git Commands (Game)&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion: Congratulations! You've just set up a professional dev workflow. Git can be tricky at first, but keep practicing and it will become second nature. If you ran into any issues, drop a comment below and let's help each other out!
&lt;/h2&gt;

</description>
      <category>beginners</category>
      <category>learning</category>
      <category>git</category>
    </item>
  </channel>
</rss>
