<?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: Mary Nyambura</title>
    <description>The latest articles on DEV Community by Mary Nyambura (@mary_nyambura_b59b512a9e1).</description>
    <link>https://dev.to/mary_nyambura_b59b512a9e1</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%2F3709683%2F150ee42d-e6fe-4669-a665-eb133738b4e8.jpg</url>
      <title>DEV Community: Mary Nyambura</title>
      <link>https://dev.to/mary_nyambura_b59b512a9e1</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mary_nyambura_b59b512a9e1"/>
    <language>en</language>
    <item>
      <title>Joins and Window Functions Made Super Simple</title>
      <dc:creator>Mary Nyambura</dc:creator>
      <pubDate>Mon, 02 Mar 2026 11:57:48 +0000</pubDate>
      <link>https://dev.to/mary_nyambura_b59b512a9e1/joins-and-window-functions-made-super-simple-2gif</link>
      <guid>https://dev.to/mary_nyambura_b59b512a9e1/joins-and-window-functions-made-super-simple-2gif</guid>
      <description>&lt;p&gt;&lt;strong&gt;Joins&lt;/strong&gt; and &lt;strong&gt;window&lt;/strong&gt; functions are two powerful tools in SQL that help you combine data and do smart calculations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Joins&lt;/strong&gt; let you bring together information from two or more tables.&lt;br&gt;
&lt;strong&gt;Window functions&lt;/strong&gt; let you add extra information like averages, ranks, or “previous” values without losing any rows.&lt;/p&gt;

&lt;p&gt;How they work with simple, everyday examples.&lt;/p&gt;

&lt;p&gt;Joins: Stitching Tables Together&lt;br&gt;
Imagine you have two paper lists:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Employees list&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Columns: name, salary, department_id&lt;br&gt;
Departments list&lt;br&gt;
Columns: id, name&lt;/p&gt;

&lt;p&gt;We want to see each employee’s name and salary plus their department name. Since that information is split between two lists, we use a join to connect them using the department_id.&lt;/p&gt;

&lt;p&gt;Example 1. &lt;br&gt;
Basic join (employees + departments)&lt;br&gt;
sql&lt;br&gt;
SELECT employees.name,&lt;br&gt;
       departments.name AS department_name,&lt;br&gt;
       employees.salary&lt;br&gt;
FROM employees&lt;br&gt;
INNER JOIN departments&lt;br&gt;
  ON employees.department_id = departments.id;&lt;br&gt;
This returns only employees who have a matching department.&lt;br&gt;
For each employee, the department name is pulled from the second table.&lt;/p&gt;

&lt;p&gt;Example 2. &lt;br&gt;
Left join (keep all employees)&lt;br&gt;
sql&lt;br&gt;
SELECT employees.name,&lt;br&gt;
       departments.name AS department_name,&lt;br&gt;
       employees.salary&lt;br&gt;
FROM employees&lt;br&gt;
LEFT JOIN departments&lt;br&gt;
  ON employees.department_id = departments.id;&lt;br&gt;
Every employee appears in the result.&lt;br&gt;
If there is no matching department, department_name will be blank (NULL).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Window Functions&lt;/strong&gt;: Adding Helper Columns&lt;br&gt;
A window function is like adding helper columns that show extra information “around” each row, such as:&lt;/p&gt;

&lt;p&gt;“What is the average salary in this department?”&lt;br&gt;
“How high is this employee’s salary compared to others in the same department?”&lt;/p&gt;

&lt;p&gt;The beauty of a window function is that it keeps every original row and just adds this extra information.&lt;/p&gt;

&lt;p&gt;Example 3. &lt;br&gt;
Show average salary per department beside each employee&lt;br&gt;
sql&lt;br&gt;
SELECT employees.name,&lt;br&gt;
       departments.name AS department_name,&lt;br&gt;
       employees.salary,&lt;br&gt;
       AVG(employees.salary) OVER (PARTITION BY departments.id) AS avg_dept_salary&lt;br&gt;
FROM employees&lt;br&gt;
JOIN departments&lt;br&gt;
  ON employees.department_id = departments.id;&lt;br&gt;
AVG(employees.salary) calculates the average salary.&lt;/p&gt;

&lt;p&gt;OVER (PARTITION BY departments.id) means: “for each department, compute this average.”&lt;/p&gt;

&lt;p&gt;Every employee row still appears, and next to their name you see the average salary for their department.&lt;/p&gt;

&lt;p&gt;Example 4. &lt;br&gt;
Rank employees by salary within each department&lt;br&gt;
sql&lt;br&gt;
SELECT employees.name,&lt;br&gt;
       departments.name AS department_name,&lt;br&gt;
       employees.salary,&lt;br&gt;
       ROW_NUMBER() OVER (PARTITION BY departments.id ORDER BY employees.salary DESC) AS row_number,&lt;br&gt;
       RANK()       OVER (PARTITION BY departments.id ORDER BY employees.salary DESC) AS rank_value,&lt;br&gt;
       DENSE_RANK() OVER (PARTITION BY departments.id ORDER BY employees.salary DESC) AS dense_rank_value&lt;br&gt;
FROM employees&lt;br&gt;
JOIN departments&lt;br&gt;
  ON employees.department_id = departments.id;&lt;br&gt;
PARTITION BY departments.id: do the ranking separately for each department.&lt;/p&gt;

&lt;p&gt;ORDER BY employees.salary DESC: sort from highest to lowest salary.&lt;/p&gt;

&lt;p&gt;ROW_NUMBER(): gives each row a unique number (1, 2, 3, ...) even if salaries are the same.&lt;/p&gt;

&lt;p&gt;RANK(): ties get the same rank, then it skips the next number (1, 1, 3).&lt;/p&gt;

&lt;p&gt;DENSE_RANK(): ties get the same rank, but no gaps (1, 1, 2).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Points Summary&lt;/strong&gt;&lt;br&gt;
Joins are like stitching two lists together using a shared ID (like department ID).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;INNER JOIN: only show rows that match in both lists.&lt;/li&gt;
&lt;li&gt;LEFT JOIN: keep all rows from the first list, even if there is no match in the second.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Window functions are like adding helper columns that calculate things per group without losing any rows.&lt;/p&gt;

&lt;p&gt;You can compute averages, sums, or rankings for each group while still seeing every individual row.&lt;/p&gt;

&lt;p&gt;The OVER (PARTITION BY ... ORDER BY ...) tells SQL: “do this calculation for each group, in this order.”&lt;/p&gt;

&lt;p&gt;There are three main families of window functions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Aggregate window functions like SUM, AVG, COUNT, MIN, MAX.&lt;/li&gt;
&lt;li&gt;Ranking window functions like ROW_NUMBER, RANK, DENSE_RANK, NTILE.&lt;/li&gt;
&lt;li&gt;Value/offset window functions like LAG, LEAD, FIRST_VALUE, LAST_VALUE, NTH_VALUE (you can learn these later).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The Concepts&lt;/strong&gt; &lt;br&gt;
Joins are like taking two separate lists and combining them using a shared ID.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;INNER JOIN is like “only show people who appear in both lists.”&lt;/li&gt;
&lt;li&gt;LEFT JOIN is like “show everyone from the first list and add matching info from the second where possible.”&lt;/li&gt;
&lt;li&gt;Window functions are like putting sticky notes on each row that say things like “the average salary in this department” or “this employee is number 3 by salary here.”
They don’t hide or remove anything; they just add extra information next to each row.&lt;/li&gt;
&lt;li&gt;OVER (PARTITION BY ... ORDER BY ...) is how you tell SQL which group to use and in what order.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Simple Analogy&lt;/strong&gt; &lt;br&gt;
Think of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Joins as merging two spreadsheets by a common column (like employee ID).&lt;/li&gt;
&lt;li&gt;Window functions as adding extra columns in that merged sheet that show things like “average per group”, “ranking per group”, or “value from the row above”.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>joins</category>
      <category>windowfunction</category>
      <category>sql</category>
    </item>
    <item>
      <title>How Analysts Translate Messy Data, DAX, and Dashboards into Action Using Power BI</title>
      <dc:creator>Mary Nyambura</dc:creator>
      <pubDate>Sun, 08 Feb 2026 18:46:57 +0000</pubDate>
      <link>https://dev.to/mary_nyambura_b59b512a9e1/how-analysts-translate-messy-data-dax-and-dashboards-into-action-using-power-bi-4ma3</link>
      <guid>https://dev.to/mary_nyambura_b59b512a9e1/how-analysts-translate-messy-data-dax-and-dashboards-into-action-using-power-bi-4ma3</guid>
      <description>&lt;p&gt;In today's fast-paced business world, companies collect vast amounts of data every second. But raw data is like a noisy crowd speaking different languages, it's hard to understand, and even harder to use for making decisions. This is where data analysts, armed with Power BI, step in as crucial translators. They turn this data chaos into clear, actionable insights that directly impact business success.&lt;/p&gt;

&lt;p&gt;Let's break down how analysts achieve this translation, taking us from raw information to smart business moves.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Taming the Mess&lt;/strong&gt;: Power Query (The Data Cleaner)&lt;br&gt;
Imagine you're handed a giant box of LEGOs. Before you can build anything cool, you first need to sort them, separate the colors, find all the flat pieces, and toss out any broken ones. This "sorting and cleaning" in the data world is done using Power Query in Power BI.&lt;/p&gt;

&lt;p&gt;Raw data often arrives looking like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Inconsistent&lt;/strong&gt;: "New York," "NY," and "N.Y." all mean the same city.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Incomplete&lt;/strong&gt;: Missing sales dates or customer information.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scattered&lt;/strong&gt;: Sales data in one Excel file, product info in another, and customer details in a database.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Power Query helps analysts&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Standardize&lt;/strong&gt;: Make sure "New York," "NY," and "N.Y." are all simply "New York."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Combine&lt;/strong&gt;: Bring together sales, product, and customer information into one easy to use table.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clean Up&lt;/strong&gt;: Remove duplicate entries, fill in missing data, or fix incorrect values.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Real world Impact&lt;/strong&gt;: If a sales report shows "NY" and "New York" as separate regions, the total sales for that city would be wrong. Power Query ensures accuracy from the start, so decisions aren't based on flawed numbers.&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%2F8qn4dxssnrk799jl9m9k.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%2F8qn4dxssnrk799jl9m9k.png" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Defining Logic&lt;/strong&gt;: DAX (The Data Brain)&lt;br&gt;
Once the data is clean and organized, it's still just a collection of numbers. To make these numbers meaningful, to turn them into actual business insights, analysts use DAX (Data Analysis Expressions). Think of DAX as the brain of your data model. It allows you to create smart calculations and metrics that answer specific business questions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Here's how DAX brings data to life&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;-&lt;strong&gt;Creates Key Performance Indicators (KPIs)&lt;/strong&gt;: Instead of just seeing raw "sales amounts," DAX lets you calculate "Profit Margin," "Customer Retention Rate," or "Sales Growth Year over Year."&lt;/p&gt;

&lt;p&gt;Example DAX Formula: &lt;strong&gt;Total Sales = SUM(Sales[Amount])&lt;/strong&gt;&lt;br&gt;
Example DAX Formula: &lt;strong&gt;Profit Margin = DIVIDE([Total Profit], [Total Sales])&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;-&lt;strong&gt;Time Intelligence functions&lt;/strong&gt;: DAX has powerful functions to compare performance over different time periods.&lt;/p&gt;

&lt;p&gt;Example DAX Formula: Sales Last Year = CALCULATE([Total Sales], SAMEPERIODLASTYEAR('Date'[Date]))&lt;/p&gt;

&lt;p&gt;This formula automatically looks back exactly one year to get sales for the same period.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real world Impact&lt;/strong&gt;: A business needs to know if sales are actually improving. A simple "Total Sales" number might be high, but DAX can reveal that "Sales Last Year" were even higher, meaning current performance is actually down. This critical context helps managers understand if they're truly succeeding.&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%2Fgpe9jh3w5th4sr0x9pte.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%2Fgpe9jh3w5th4sr0x9pte.png" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Visual Story&lt;/strong&gt;: Dashboard Design (The Easy to Read Report)&lt;br&gt;
Now that the data is clean and smart, it needs to be presented in a way that &lt;strong&gt;anyone from a sales manager to the CEO&lt;/strong&gt; can quickly understand. This is where dashboard design comes in. A Power BI dashboard is like a well designed newspaper: it quickly gives you the headlines, then lets you dive into details if you want.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key elements analysts use&lt;/strong&gt;:&lt;br&gt;
&lt;strong&gt;Big, Clear KPIs&lt;/strong&gt;: Prominently display key numbers like "&lt;strong&gt;Total Revenue&lt;/strong&gt;: $8.2M" or "&lt;strong&gt;Profit Margin&lt;/strong&gt;: 3.7%." These are the "headlines" telling you instantly how things are going.&lt;br&gt;
&lt;strong&gt;Interactive Charts&lt;/strong&gt;: Use visuals like &lt;strong&gt;bar charts&lt;/strong&gt; to compare sales across different product categories, or line charts to show trends over time. Users can click on these to filter the whole report.&lt;br&gt;
&lt;strong&gt;Slicers &amp;amp; Filters&lt;/strong&gt;: These allow users to personalize the view. Want to see only sales from "&lt;strong&gt;California&lt;/strong&gt;" or for the "&lt;strong&gt;last quarter&lt;/strong&gt;"? Just click a button.&lt;br&gt;
&lt;strong&gt;Drill throughs&lt;/strong&gt;: If a manager sees a sudden drop in sales for a specific region, they can click on that region in the chart and "&lt;strong&gt;drill through&lt;/strong&gt;" to a detailed page showing individual transactions for that area, helping them pinpoint the exact problem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real world Impact&lt;/strong&gt;: Instead of sifting through hundreds of rows in a spreadsheet, a sales manager can open a dashboard, see that "Sales in the West Region are down 15% this month," click on the West Region, and immediately see that a particular product line is underperforming, prompting them to investigate further.&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%2F05si7uo5zjwvnn21ap1a.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%2F05si7uo5zjwvnn21ap1a.png" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Final Translation&lt;/strong&gt;: From Insight to Action&lt;br&gt;
The ultimate goal of any data analysis is to drive action. A beautiful dashboard is only valuable if it leads to better business decisions. Analysts don't just show what happened; they help answer: "&lt;strong&gt;What should we do about it?&lt;/strong&gt;"&lt;/p&gt;

&lt;p&gt;This involves:&lt;br&gt;
&lt;strong&gt;Highlighting Anomalies &amp;amp; Key Drivers&lt;/strong&gt;: Power BI can automatically point out unusual spikes or drops in data and even identify the biggest factors causing them. For example, "The recent drop in customer satisfaction is mostly due to shipping delays."&lt;br&gt;
&lt;strong&gt;Setting Up Alerts&lt;/strong&gt;: Analysts can configure Power BI to send automatic emails or messages when a key metric crosses a certain threshold (e.g., "Alert: Customer churn rate exceeded 5%"). This ensures that critical issues are addressed immediately.&lt;br&gt;
&lt;strong&gt;Providing Recommendations&lt;/strong&gt;: Good analysts often summarize the key findings from a dashboard and offer clear, actionable recommendations. This might be a 3-bullet point email:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sales in Region X are significantly down.&lt;/li&gt;
&lt;li&gt;Highest customer churn is for Product Z.&lt;/li&gt;
&lt;li&gt;Action: Implement a targeted discount campaign for Product Z in Region X next week.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Real world Impact&lt;/strong&gt;: By providing direct, actionable recommendations based on solid data, analysts empower decision makers to &lt;strong&gt;react quickly to problems&lt;/strong&gt;, &lt;strong&gt;seize opportunities&lt;/strong&gt;, and ultimately improve the company's bottom line. The conversation shifts from "&lt;strong&gt;What do the numbers say&lt;/strong&gt;?" to "&lt;strong&gt;What's our next strategic move&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%2Fksm02mfkh0mt3rbqnfhq.jpeg" 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%2Fksm02mfkh0mt3rbqnfhq.jpeg" alt=" " width="800" height="582"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>dax</category>
      <category>powerbi</category>
      <category>dataanalytics</category>
    </item>
    <item>
      <title>Power BI Data Modeling: Your Guide to Faster, Less Frustrating Reports</title>
      <dc:creator>Mary Nyambura</dc:creator>
      <pubDate>Sun, 01 Feb 2026 14:27:56 +0000</pubDate>
      <link>https://dev.to/mary_nyambura_b59b512a9e1/power-bi-data-modeling-your-guide-to-faster-less-frustrating-reports-1khi</link>
      <guid>https://dev.to/mary_nyambura_b59b512a9e1/power-bi-data-modeling-your-guide-to-faster-less-frustrating-reports-1khi</guid>
      <description>&lt;p&gt;Have you ever created a Power BI dashboard that felt sluggish, showed inconsistent numbers, or was just plain confusing to maintain? You're not alone. I've been there too. The problem often isn't your visuals or DAX formulas it's what happens behind the scenes in your data model.&lt;/p&gt;

&lt;p&gt;Think of data modeling as the foundation of your report. A strong foundation means everything built on top works better, loads faster, and gives you accurate results every time.&lt;/p&gt;

&lt;p&gt;Understanding Fact and Dimension Tables&lt;br&gt;
At its core, data modeling in Power BI revolves around two types of tables:&lt;/p&gt;

&lt;p&gt;Fact Tables are where your measurable events, live the numbers you want to analyze. Think of them as recording "what happened" in your business.&lt;/p&gt;

&lt;p&gt;Dimension Tables provide the context, they describe "who, what, when, and where." These are your reference tables that give meaning to the numbers in your fact tables.&lt;/p&gt;

&lt;p&gt;The Star Schema: Why It's the Gold Standard&lt;br&gt;
The star schema is the most recommended structure for Power BI models. Here's why:&lt;/p&gt;

&lt;p&gt;Imagine a central fact table (your numbers) surrounded by dimension tables (your descriptions). Each dimension connects directly to the fact table, creating a simple, star-like pattern. This structure is simple, efficient, and easy for both Power BI and your team to understand.&lt;/p&gt;

&lt;p&gt;How It Works in Practice:&lt;br&gt;
When you ask Power BI to "show me Q1 sales by product category," here's what happens with a star schema:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It filters your date dimension for Q1 dates&lt;/li&gt;
&lt;li&gt;That filter flows to your fact table&lt;/li&gt;
&lt;li&gt;It joins with your product dimension to group by category&lt;/li&gt;
&lt;li&gt;It returns aggregated results quickly and accurately&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Snowflake Schema: When Things Get Complicated&lt;br&gt;
Sometimes you might encounter a "snowflake" structure where dimensions are normalized into multiple related tables. While this might look organized, it forces Power BI to navigate through multiple relationships for every query, slowing everything down.&lt;/p&gt;

&lt;p&gt;Unless you have specific technical requirements, stick with the simpler star schema.&lt;/p&gt;

&lt;p&gt;Why Good Modeling Makes a Real Difference&lt;br&gt;
Performance: A well structured model can turn a 30 second report into a 3 second one. I've seen this transformation repeatedly same data, better structure, dramatically faster results.&lt;/p&gt;

&lt;p&gt;Accuracy: Nothing erodes trust faster than inconsistent numbers. Proper relationships in your model prevent double counting, ensure filters work correctly, and make time-based calculations reliable.&lt;/p&gt;

&lt;p&gt;Maintainability: Clean models are easier to explain to colleagues, simpler to update when business needs change, and more consistent across all your reports.&lt;/p&gt;

&lt;p&gt;Building Your Model: A Practical Approach&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Start with a Date Table
Every good model needs a proper date table. This isn't optional Power BI's time intelligence functions depend on it. Here's a simple way to create one:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;dax&lt;br&gt;
DateTable = &lt;br&gt;
ADDCOLUMNS(&lt;br&gt;
    CALENDAR(DATE(2020,1,1), DATE(2030,12,31)),&lt;br&gt;
    "Year", YEAR([Date]),&lt;br&gt;
    "Month", FORMAT([Date], "MMMM"),&lt;br&gt;
    "Quarter", "Q" &amp;amp; TRUNC((MONTH([Date])-1)/3)+1&lt;br&gt;
)&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Structure Your Dimensions
Create separate tables for each logical grouping:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Date dimensions (from step 1)&lt;/li&gt;
&lt;li&gt;Product/service information&lt;/li&gt;
&lt;li&gt;Customer/client details&lt;/li&gt;
&lt;li&gt;Location data&lt;/li&gt;
&lt;li&gt;Employee/team structures&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Design Your Fact Table&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Your fact table should:&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Contain numeric measures (sales, quantities, costs)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Include foreign keys linking to your dimension tables&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Maintain the lowest useful level of detail&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Establish Clean Relationships&lt;br&gt;
Connect each dimension to your fact table, setting the filter direction to flow from dimension to fact. In most cases, use single direction filtering for better performance.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Validate with Real Questions&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Test your model with common business questions:&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Does "sales by month" calculate correctly?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Do filters properly narrow results?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Are year-over-year comparisons accurate?&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Common Modeling Mistakes (And How to Avoid Them)&lt;br&gt;
The Mega-Table: Don't mix facts and dimensions in one massive table. Keep them separate for clarity and performance.&lt;/p&gt;

&lt;p&gt;Relationship Overkill: Avoid setting all relationships to filter both directions. Use single direction filtering as your default.&lt;/p&gt;

&lt;p&gt;Date Confusion: Never use transaction dates directly for time intelligence. Always build a proper date table.&lt;/p&gt;

&lt;p&gt;Ignoring Granularity: Ensure all facts in a table share the same level of detail. Mixing granularities leads to incorrect aggregations.&lt;/p&gt;

&lt;p&gt;When to Break the Rules&lt;br&gt;
While the star schema should be your starting point, there are valid exceptions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Role playing dimensions (using the same date table for order date, ship date, due date)&lt;/li&gt;
&lt;li&gt;Many to many relationships (requiring bridge tables)&lt;/li&gt;
&lt;li&gt;Extremely large dimensions that benefit from normalization&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Start simple with a star schema, then add complexity only when you have a clear, justified need.&lt;br&gt;
Your Model Health Checklist&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Is your model easy to explain to a colleague?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Do filters propagate correctly through relationships?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Are common reports loading in under 5 seconds?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Do calculations match source system totals?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Can you easily add new measures or dimensions?&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you answered "no" to any of these, your model might benefit from some restructuring.&lt;/p&gt;

&lt;p&gt;The Takeaway&lt;br&gt;
Good data modeling in Power BI isn't about complexity it's about clarity. A clean star schema with proper relationships gives you faster reports, more accurate numbers, and happier stakeholders. It's the difference between fighting with your data and letting it work for you.&lt;/p&gt;

&lt;p&gt;Start with a solid foundation, keep it simple, and watch your reports transform from frustrating to fantastic.&lt;/p&gt;

</description>
      <category>powerbi</category>
      <category>starschema</category>
    </item>
    <item>
      <title>Microsoft Excel for Absolute Beginners</title>
      <dc:creator>Mary Nyambura</dc:creator>
      <pubDate>Sun, 25 Jan 2026 19:32:52 +0000</pubDate>
      <link>https://dev.to/mary_nyambura_b59b512a9e1/microsoft-excel-for-absolute-beginners-5fh8</link>
      <guid>https://dev.to/mary_nyambura_b59b512a9e1/microsoft-excel-for-absolute-beginners-5fh8</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;br&gt;
Microsoft Excel is one of the most widely used tools for organizing, analyzing, and visualizing data. Whether you’re tracking personal expenses, managing small business records, or handling school projects, Excel can make complex tasks simple and efficient.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Even if you’ve never used Excel before, learning the basics will help you:&lt;/li&gt;
&lt;li&gt;Organize information clearly and efficiently&lt;/li&gt;
&lt;li&gt;Automate calculations to save time&lt;/li&gt;
&lt;li&gt;Visualize data with charts and tables&lt;/li&gt;
&lt;li&gt;Build a foundation for advanced tools like PivotTables and dashboards&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This tutorial will guide you through the core features of Excel in a beginner-friendly, step-by-step approach. By the end, you’ll be comfortable working with data in Excel and ready to explore more advanced topics.&lt;/p&gt;

&lt;p&gt;this is the dataset that were going to use &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%2Fddg5gsokhdwcktty1qbu.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%2Fddg5gsokhdwcktty1qbu.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
this is the dataset before formatting&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Preliminary Step: Ensure All Data is Visible&lt;/strong&gt;&lt;br&gt;
Before diving into Excel, make sure every piece of information is fully readable. Columns should be wide enough so that text doesn’t spill over into neighboring cells, and headers should be clear and distinct. This prevents confusion when entering formulas, sorting data, or creating charts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to do it:&lt;/strong&gt;&lt;br&gt;
click between 1 and A to highlight the whole dataset the go to formats and select &lt;strong&gt;AutoFit column width&lt;/strong&gt; click&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%2Fvtobi97iz49mej1s6dop.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%2Fvtobi97iz49mej1s6dop.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
your dataset should look like this with spaced columns and width&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%2Fruqhurwy0rkzena7bkst.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%2Fruqhurwy0rkzena7bkst.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
You also need to freeze your top row and your first column by going to D2 go to view-freeze panes-click the drop down then freeze panes&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%2Fz2igl1is85kmy50rmy68.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%2Fz2igl1is85kmy50rmy68.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why this step matters:&lt;/strong&gt;&lt;br&gt;
Making sure all information is visible and easy to read avoids mistakes later when you apply formatting, formulas, or create charts. Think of it as setting up a clean workspace before starting any project.&lt;br&gt;
Salary Formatting&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Select the Salary column.&lt;/strong&gt;&lt;br&gt;
Go to Home → Number → Currency.&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%2F9wc4hhk6gvzojskfrtah.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%2F9wc4hhk6gvzojskfrtah.png" alt=" " width="800" height="450"&gt;&lt;/a&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%2F996to4vs94kl2qlzeonz.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%2F996to4vs94kl2qlzeonz.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
Your results should look like this.&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%2Ffnad0nrtnn2nxlsnasfo.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%2Ffnad0nrtnn2nxlsnasfo.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Date Formatting&lt;/strong&gt;&lt;br&gt;
Select the Joining Date column.&lt;br&gt;
Go to Home → Number → Short Date.&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%2F7h6dbkhx798t94x2hrry.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%2F7h6dbkhx798t94x2hrry.png" alt=" " width="800" height="450"&gt;&lt;/a&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%2Fiaghdx1z86o3piha15rb.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%2Fiaghdx1z86o3piha15rb.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Simple Formulas&lt;br&gt;
Sum of Salaries: =SUM(E2:E877) → total payroll&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%2Fizkhhg93iysorlhn9y84.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%2Fizkhhg93iysorlhn9y84.png" alt=" " width="800" height="450"&gt;&lt;/a&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%2F502ocqf8g0d9a63g0se2.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%2F502ocqf8g0d9a63g0se2.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
Average Salary: =AVERAGE(E2:E877) → average employee pay&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%2Fqv3lg8pecvts7ny8fg33.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%2Fqv3lg8pecvts7ny8fg33.png" alt=" " width="800" height="450"&gt;&lt;/a&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%2Fuyojdi1wkpgr6rf558it.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%2Fuyojdi1wkpgr6rf558it.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
Maximum Salary: =MAX(E2:E877) → identify highest-paid employee&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%2Fzt0reub0b4s7ej91ct0k.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%2Fzt0reub0b4s7ej91ct0k.png" alt=" " width="800" height="450"&gt;&lt;/a&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%2Fqtzvwb7fymtz9kb5p569.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%2Fqtzvwb7fymtz9kb5p569.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Conditional Formatting&lt;br&gt;
Highlight salaries above 100,000.&lt;br&gt;
Highlight cell under home go to conditional formatting, you will see greater than then you write 100,000 enter.&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%2Fhip1rg9bsmlvqhw7vk1x.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%2Fhip1rg9bsmlvqhw7vk1x.png" alt=" " width="800" height="450"&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%2Fb21ez4yy0zq7bn2xl5gq.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%2Fb21ez4yy0zq7bn2xl5gq.png" alt=" " width="800" height="450"&gt;&lt;/a&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%2F1uw38l3d7lm9c00udjd7.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%2F1uw38l3d7lm9c00udjd7.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
Highlight employees joined before 2020&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%2Fh2ctgm0td625md4neud0.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%2Fh2ctgm0td625md4neud0.png" alt=" " width="800" height="450"&gt;&lt;/a&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%2F6xxfmqiks8b2j5a2kehm.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%2F6xxfmqiks8b2j5a2kehm.png" alt=" " width="800" height="450"&gt;&lt;/a&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%2Fv089kpqykbzm68z90pn7.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%2Fv089kpqykbzm68z90pn7.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Using IF Statements&lt;br&gt;
Identify high-salary employees&lt;br&gt;
=IF(E2&amp;gt;100000, "High", "Normal")&lt;br&gt;
so you create a new cell between salary and hire date and name it, after getting the answer in E2 autofill the column to see for the rest. &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%2Fwhsy3liigu93e49jr1qf.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%2Fwhsy3liigu93e49jr1qf.png" alt=" " width="800" height="450"&gt;&lt;/a&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%2Fauibg0nrxq42w5b93xru.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%2Fauibg0nrxq42w5b93xru.png" alt=" " width="800" height="450"&gt;&lt;/a&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%2Fn2a9r1t0h6anmznwajo8.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%2Fn2a9r1t0h6anmznwajo8.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
Lookup Example (VLOOKUP/XLOOKUP)&lt;/p&gt;

&lt;p&gt;Scenario: Find department of a specific employee&lt;br&gt;
=VLOOKUP("Williams",C2:D877,2,FALSE)&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%2Flsaaox55p008d3en62ma.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%2Flsaaox55p008d3en62ma.png" alt=" " width="800" height="450"&gt;&lt;/a&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%2F42p0hwyuhpyk8nsohpld.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%2F42p0hwyuhpyk8nsohpld.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SUMIF / SUMIFS Example&lt;/strong&gt;&lt;br&gt;
Total salary by department:&lt;br&gt;
=SUMIF(D2:D877,"Sales",E2:E877)&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%2Fh9jz0l8i3tm2mu3a2qg0.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%2Fh9jz0l8i3tm2mu3a2qg0.png" alt=" " width="800" height="450"&gt;&lt;/a&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%2Fxby7qv7kqqo6v6jue67w.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%2Fxby7qv7kqqo6v6jue67w.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
Total salary of all employees in Sales department AND Office Location = Nairobi (for example).&lt;br&gt;
=SUMIFS(E2:E877,D2:D877,"Sales",Q2:Q877,"Nairobi")&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%2Fw1r22tbn9jkai7mcy6dy.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%2Fw1r22tbn9jkai7mcy6dy.png" alt=" " width="800" height="450"&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%2Fmp4skdi5bxhejgvccoox.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%2Fmp4skdi5bxhejgvccoox.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Creating pivot table&lt;/strong&gt;&lt;br&gt;
Here click anywhere in your Dataset under insert go to pivot tables click new worksheet &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%2Fwi12cu76zgutkfedk7m6.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%2Fwi12cu76zgutkfedk7m6.png" alt=" " width="800" height="450"&gt;&lt;/a&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%2F0tv6wgt9vizjv018gmpy.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%2F0tv6wgt9vizjv018gmpy.png" alt=" " width="800" height="450"&gt;&lt;/a&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%2Flbdyvbcsrny1lt4qvkbo.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%2Flbdyvbcsrny1lt4qvkbo.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Creating pivot table&lt;/strong&gt;&lt;br&gt;
i also created a Donut chart of average salary by department&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%2F78jgqxe5xwwmayahkgkb.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%2F78jgqxe5xwwmayahkgkb.png" alt=" " width="800" height="450"&gt;&lt;/a&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%2Fr5q9pf0tb51hn13eku2b.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%2Fr5q9pf0tb51hn13eku2b.png" alt=" " width="800" height="450"&gt;&lt;/a&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%2Fx33w2dhahxr3n76pdlcu.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%2Fx33w2dhahxr3n76pdlcu.png" alt=" " width="800" height="450"&gt;&lt;/a&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%2F5aycn6885umqaendnmmq.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%2F5aycn6885umqaendnmmq.png" alt=" " width="800" height="450"&gt;&lt;/a&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%2F8rrfjzerntdmyqluuorq.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%2F8rrfjzerntdmyqluuorq.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>excel</category>
    </item>
    <item>
      <title>Beginner's Guide to Git and GitHub: Version Control Made Simple</title>
      <dc:creator>Mary Nyambura</dc:creator>
      <pubDate>Sat, 17 Jan 2026 09:47:25 +0000</pubDate>
      <link>https://dev.to/mary_nyambura_b59b512a9e1/beginners-guide-to-git-and-github-version-control-made-simple-1im7</link>
      <guid>https://dev.to/mary_nyambura_b59b512a9e1/beginners-guide-to-git-and-github-version-control-made-simple-1im7</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;br&gt;
Git and GitHub are essential tools for developers, data scientists, and anyone working with code. This guide will help beginners understand how to track changes, push and pull code, and use version control effectively.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What&lt;/strong&gt; &lt;strong&gt;is&lt;/strong&gt; &lt;strong&gt;Git&lt;/strong&gt;&lt;br&gt;
Git is a version control system that acts like a time machine for your code. *&lt;strong&gt;&lt;em&gt;It tracks every change you make to your files&lt;/em&gt;&lt;/strong&gt;*, so you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go back to a previous version if something breaks.&lt;/li&gt;
&lt;li&gt; Track what changes were made.&lt;/li&gt;
&lt;li&gt; Work safely on multiple projects at the same time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Example&lt;/em&gt;&lt;/strong&gt;:&lt;br&gt;
Imagine you wrote a program yesterday, but it stopped working today. Git lets you revert to yesterday’s version quickly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is GitHub&lt;/strong&gt;?&lt;br&gt;
GitHub is an online platform for storing Git projects. It allows you to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Share your code with others&lt;/li&gt;
&lt;li&gt; Collaborate on projects&lt;/li&gt;
&lt;li&gt; Backup your work online&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Think of GitHub as a *&lt;strong&gt;&lt;em&gt;cloud version of your Git projects&lt;/em&gt;&lt;/strong&gt;*&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is Version Control&lt;/strong&gt;?&lt;br&gt;
Version control helps you &lt;em&gt;track changes in your files over time&lt;/em&gt;. It’s useful because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; You never lose your work&lt;/li&gt;
&lt;li&gt; You can see who made changes and when&lt;/li&gt;
&lt;li&gt; You can safely work with others on the same project.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Git Workflow for Beginners&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Check Git Version&lt;/em&gt;&lt;/strong&gt;: 
Before starting, make sure Git is installed:
Bash code &lt;strong&gt;&lt;em&gt;git --version&lt;/em&gt;&lt;/strong&gt;
The double hyphen (--version) is required
Shows which version of Git is installed on your computer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Check the Status of Your Project&lt;/em&gt;&lt;/strong&gt;: 
To see which files have changed or are ready to be saved:
Bash code &lt;strong&gt;&lt;em&gt;git status&lt;/em&gt;&lt;/strong&gt;
Shows files that are modified, untracked, or staged for commit.
Helps you understand what Git is tracking, an essential part of version control.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Add Files to Be Tracked&lt;/em&gt;&lt;/strong&gt;:
Bash code &lt;strong&gt;&lt;em&gt;git add&lt;/em&gt;&lt;/strong&gt;.
The &lt;strong&gt;.&lt;/strong&gt; tells Git to stage all files in the folder
Staging files prepares them to be saved in your project history&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Commit Your Changes&lt;/em&gt;&lt;/strong&gt;: 
Bash code &lt;strong&gt;&lt;em&gt;git commit -m&lt;/em&gt;&lt;/strong&gt; "Describe your change here"
The &lt;strong&gt;-m&lt;/strong&gt; flag (single hyphen) is for your commit message
Commits save a snapshot of your project locally
Each commit is part of version control, so you can revert if needed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Push Changes to GitHub&lt;/em&gt;&lt;/strong&gt;: 
Bash code &lt;strong&gt;&lt;em&gt;git push&lt;/em&gt;&lt;/strong&gt;
Uploads your committed changes to your GitHub repository
Keeps your work backed up online
Makes your project available to collaborators.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Pull Changes from GitHub&lt;/em&gt;&lt;/strong&gt;: 
Bash code &lt;strong&gt;&lt;em&gt;git pull&lt;/em&gt;&lt;/strong&gt;
Downloads the latest changes from GitHub to your local project
Ensures your work is up to date before making new changes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;See the History of Your Project&lt;/em&gt;&lt;/strong&gt;: 
Bash code &lt;strong&gt;&lt;em&gt;git log&lt;/em&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Shows all previous commits with messages&lt;/li&gt;
&lt;li&gt;Let's you review the history of changes&lt;/li&gt;
&lt;li&gt;A key part of understanding version control in action&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Beginner Friendly Daily Workflow&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
Here’s a simple workflow that combines all the above commands:&lt;br&gt;
Bash code&lt;br&gt;
&lt;strong&gt;&lt;em&gt;git --version&lt;/em&gt;&lt;/strong&gt;      # Check Git version&lt;br&gt;
&lt;strong&gt;&lt;em&gt;git status&lt;/em&gt;&lt;/strong&gt;         # See changes&lt;br&gt;
&lt;strong&gt;&lt;em&gt;git add .&lt;/em&gt;&lt;/strong&gt;         # Stage files for commit&lt;br&gt;
&lt;strong&gt;&lt;em&gt;git commit -m&lt;/em&gt;&lt;/strong&gt; "Describe what you changed"   # Save snapshot locally&lt;br&gt;
&lt;strong&gt;&lt;em&gt;git push&lt;/em&gt;&lt;/strong&gt;           # Upload changes to GitHub&lt;br&gt;
&lt;strong&gt;&lt;em&gt;git pull&lt;/em&gt;&lt;/strong&gt;           # Download latest changes from GitHub&lt;br&gt;
&lt;strong&gt;&lt;em&gt;git log&lt;/em&gt;&lt;/strong&gt;            # Review history&lt;br&gt;
Every command above is part of version control, tracking your files, saving snapshots, sharing and reviewing history.&lt;/p&gt;

</description>
      <category>github</category>
      <category>versioncontrol</category>
    </item>
  </channel>
</rss>
