<?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: Velma Ketra Lukaya</title>
    <description>The latest articles on DEV Community by Velma Ketra Lukaya (@velma_ketralukaya_b0ae37).</description>
    <link>https://dev.to/velma_ketralukaya_b0ae37</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4073445%2F15e27479-bf7f-41a8-a2e2-3a5beea49964.png</url>
      <title>DEV Community: Velma Ketra Lukaya</title>
      <link>https://dev.to/velma_ketralukaya_b0ae37</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/velma_ketralukaya_b0ae37"/>
    <language>en</language>
    <item>
      <title>From Raw Data to Published Reports: A Practical Guide to the Power BI Workflow</title>
      <dc:creator>Velma Ketra Lukaya</dc:creator>
      <pubDate>Fri, 02 Oct 2026 13:30:42 +0000</pubDate>
      <link>https://dev.to/velma_ketralukaya_b0ae37/from-raw-data-to-published-reports-a-practical-guide-to-the-power-bi-workflow-4g15</link>
      <guid>https://dev.to/velma_ketralukaya_b0ae37/from-raw-data-to-published-reports-a-practical-guide-to-the-power-bi-workflow-4g15</guid>
      <description>&lt;p&gt;Power BI is often described as a visualisation tool, but its real value lies in the workflow that precedes the visuals: connecting to data, assessing and cleaning it, calculating with DAX, structuring it into a well-designed model, and finally publishing and securing the result. &lt;/p&gt;

&lt;p&gt;This article follows that workflow in the order in which it is typically learned and applied and recommends model design for a typical business intelligence project.&lt;/p&gt;

&lt;p&gt;--&lt;/p&gt;

&lt;h2&gt;
  
  
  1. The Power BI Ecosystem
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Role in the workflow&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Power BI Desktop&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Free Windows application for connecting to data (Excel, CSV and others), cleaning it, modelling it, writing DAX, and building visualisations, dashboards and reports&lt;/td&gt;
&lt;td&gt;Authoring&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Power BI Service&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Cloud-based (browser) service for publishing, sharing and collaboration, with real-time updates; the full feature set is a paid licence&lt;/td&gt;
&lt;td&gt;Publishing and sharing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Power BI Mobile&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;On-the-go access to reports and interaction with visuals; not used for report creation&lt;/td&gt;
&lt;td&gt;Consumption&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Power BI Report Server&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Hosts reports on an organisation's own server, typically for data-security reasons&lt;/td&gt;
&lt;td&gt;On-premises hosting&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  2. Introduction: Power BI as a Workflow
&lt;/h2&gt;

&lt;p&gt;Power BI is a Microsoft tool that turns raw data into interactive insight. Compared with Excel, it is designed for &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Larger datasets&lt;/li&gt;
&lt;li&gt;Supports dashboards, reports and analytical calculations&lt;/li&gt;
&lt;li&gt;Work with real-time data.
It shares many function names with Excel, but its calculation language is &lt;strong&gt;DAX&lt;/strong&gt; (Data Analysis Expressions).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Treating Power BI purely as a charting tool misses most of its value. Reliable reports depend on a connected sequence of stages:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;data  →  preparation  →  modelling  →  analysis  →  visualisation  →  sharing
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each stage depends on the one before it. A data-quality problem that is not corrected in preparation becomes a modelling error, then a calculation error, and finally an incorrect figure on a dashboard. The sections that follow treat the stages in order.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F005g7qj7pu7sq6oaq2uc.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F005g7qj7pu7sq6oaq2uc.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Power BI Desktop, the environment in which data is connected, prepared, modelled and visualized.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;-&lt;/p&gt;

&lt;h3&gt;
  
  
  Desktop interface
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Home:&lt;/strong&gt; &lt;em&gt;Get data&lt;/em&gt; and &lt;em&gt;Transform data&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modeling:&lt;/strong&gt; &lt;em&gt;Manage relationships&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Insert:&lt;/strong&gt; add a visual.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;View:&lt;/strong&gt; control layout.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fields pane:&lt;/strong&gt; lists all fields in the model (columns are fields; records are rows).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Visualizations pane:&lt;/strong&gt; used to select and configure a chart or table.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Three views:&lt;/strong&gt; &lt;em&gt;Report&lt;/em&gt; (create and view reports), &lt;em&gt;Model&lt;/em&gt; (manage relationships), &lt;em&gt;Table&lt;/em&gt; (data in tabular form).&lt;/li&gt;
&lt;/ul&gt;

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




&lt;h2&gt;
  
  
  3. Data Sources
&lt;/h2&gt;

&lt;p&gt;Power BI connects to a range of external sources, including &lt;strong&gt;Excel, CSV, SQL databases and the web&lt;/strong&gt;. In the course, a &lt;strong&gt;Kenya crops&lt;/strong&gt; dataset served as the working example. It passes through Power Query for cleaning and transformation, then into the data model, where relationships are created between tables holding different information.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; Excel ─┐
 SQL   ─┤
 CSV   ─┼──►  Power BI Desktop  ──►  Power Query  ──►  Data model
 Web   ─┘                           (clean and        (relationships)
                                     transform)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The choice of source influences how much preparation is required, which is why inspection (Section 4) follows immediately after import.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Importing and Inspecting the Raw Dataset
&lt;/h2&gt;

&lt;p&gt;Importing data is the beginning of the work. Before any analysis, the dataset should be examined in &lt;strong&gt;Power Query&lt;/strong&gt;, which has four main areas:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Ribbon:&lt;/strong&gt; transformation commands.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Query pane:&lt;/strong&gt; lists every table; each can be worked on individually.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data preview:&lt;/strong&gt; the rows and columns of the selected table.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Applied Steps:&lt;/strong&gt; a recorded list of every change, which also functions as an undo mechanism.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;h3&gt;
  
  
  Common data-quality problems
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Numbers stored as text.&lt;/strong&gt; A numeric-looking column that is left-aligned in the preview is usually being treated as text.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Unrecognised dates.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Missing values and pseudo-blanks:&lt;/strong&gt; &lt;code&gt;N/A&lt;/code&gt;, &lt;code&gt;Error&lt;/code&gt;, blank, &lt;code&gt;null&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Numeric columns with the wrong data type.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Duplicate records.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  A missing value is not automatically zero
&lt;/h3&gt;

&lt;p&gt;The meaning of a missing value depends on the column. A blank in a pest-control column may be a genuine answer (no pest control used), whereas a blank in a county column is simply absent information. Replacing every blank with &lt;code&gt;0&lt;/code&gt; converts "unknown" into "zero" and distorts averages and totals later in the analysis.&lt;/p&gt;

&lt;h3&gt;
  
  
  Identifiers are text, not numbers
&lt;/h3&gt;

&lt;p&gt;Some values that look numeric should be stored as &lt;strong&gt;text&lt;/strong&gt;: ID numbers, employee IDs, phone numbers and coordinates. They are never summed or averaged, and numeric storage can strip leading zeros. Data types should reflect what a column &lt;em&gt;means&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;A practical convention for blanks, by column type:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Numeric column:&lt;/strong&gt; leave as &lt;code&gt;null&lt;/code&gt;, or replace with a number.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Text column:&lt;/strong&gt; use a consistent label such as &lt;code&gt;N/A&lt;/code&gt; or &lt;code&gt;Not provided&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h2&gt;
  
  
  5. Cleaning and Transforming Data in Power Query
&lt;/h2&gt;

&lt;h3&gt;
  
  
  5.1 Data types and errors
&lt;/h3&gt;

&lt;p&gt;When a column intended to be numeric or date-typed contains text, &lt;strong&gt;errors&lt;/strong&gt; appear because of the mismatch. An error can be handled in several ways:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;replace with &lt;code&gt;null&lt;/code&gt;/blank;&lt;/li&gt;
&lt;li&gt;replace with the actual value, if known;&lt;/li&gt;
&lt;li&gt;remove the row;&lt;/li&gt;
&lt;li&gt;replace with the median or mean (for example, calculated without outliers).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To correct a data type, select the column and use &lt;strong&gt;Transform → Detect data type&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.2 Consistent categories
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;strong&gt;one name&lt;/strong&gt; to represent a county.&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;one category&lt;/strong&gt; to represent blank, unknown and similar values.&lt;/li&gt;
&lt;li&gt;Fill missing values with the &lt;strong&gt;mode&lt;/strong&gt; only when filling is unavoidable.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5.3 Duplicates
&lt;/h3&gt;

&lt;p&gt;Duplicates are removed using a &lt;strong&gt;unique ID&lt;/strong&gt;: rows sharing the same unique ID represent the same record.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.4 Formatting and applying changes
&lt;/h3&gt;

&lt;p&gt;Use &lt;strong&gt;Transform columns → Format&lt;/strong&gt; for text clean-up, then &lt;strong&gt;Close &amp;amp; Apply&lt;/strong&gt; to load the result into the model. Every action is recorded in &lt;strong&gt;Applied Steps&lt;/strong&gt;, so the process is reversible and repeatable.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why this precedes modelling
&lt;/h3&gt;

&lt;p&gt;Everything downstream trusts this stage. Relationships fail on keys with inconsistent spellings, averages are wrong if blanks were silently converted to zeros, and counts are inflated by duplicates.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. DAX: From Preparation to Analysis
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;DAX (Data Analysis Expressions)&lt;/strong&gt; is the formula language Power BI uses to create calculations: calculated columns, measures and calculated tables. Where Excel formulas operate on cells, DAX operates on columns and tables and responds to &lt;strong&gt;filters&lt;/strong&gt; (the &lt;em&gt;filter context&lt;/em&gt;), a concept that recurs throughout the following sections.&lt;br&gt;
DAX functions fall into six categories:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Aggregate&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Mathematical and statistical summaries&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Filter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Modify or create filter context and tables&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Logical&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Evaluate conditions to support decisions and categorisation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Text&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Format and clean text&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Date and Time&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Extract and compare date components&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Time Intelligence&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Period-based calculations &lt;em&gt;(see note in Section 7.9)&lt;/em&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h2&gt;
  
  
  7. DAX Function Categories
&lt;/h2&gt;
&lt;h3&gt;
  
  
  7.1 Aggregate functions
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Behaviour&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SUM&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Adds all numbers in a column&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;AVERAGE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Arithmetic mean&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;MIN&lt;/code&gt;, &lt;code&gt;MAX&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Lowest and highest value&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;MEDIAN&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Middle value of the data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;COUNT&lt;/code&gt;, &lt;code&gt;COUNTA&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Count non-blank values&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;COUNTROWS&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Counts rows in a table&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DISTINCTCOUNT&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Counts distinct values&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;COUNTBLANK&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Counts blanks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Standard deviation, variance&lt;/td&gt;
&lt;td&gt;Measures of spread&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Mean versus median.&lt;/strong&gt; The mean is affected by outliers; the median is not. When the mean and median are close, the data is approximately normally distributed. For skewed variables (left- or right-skewed), the median often represents a typical value better.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Iterators: &lt;code&gt;SUMX&lt;/code&gt; and &lt;code&gt;AVERAGEX&lt;/code&gt;.&lt;/strong&gt; These evaluate an expression for each row of a table and then sum or average the results. They are used when a quantity is not stored in the table but can be derived from columns that are, for example revenue computed from yield and price. The table reference comes first, followed by the expression. The calculation requires knowing what &lt;em&gt;constitutes&lt;/em&gt; the value, not the value itself, and blanks in the inputs will change the result.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Illustrative example&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Total Revenue = SUMX( Crops, Crops[Yield] * Crops[Market Price] )
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;&lt;strong&gt;Arithmetic versus geometric mean.&lt;/strong&gt; &lt;code&gt;AVERAGE&lt;/code&gt; is the ordinary arithmetic mean. &lt;code&gt;GEOMEAN&lt;/code&gt; multiplies the values and takes the nth root, and is appropriate for ratios, growth rates and compounding changes.&lt;/p&gt;

&lt;h3&gt;
  
  
  7.2 Arithmetic functions
&lt;/h3&gt;

&lt;p&gt;Arithmetic in DAX is mostly expressed through operators and expressions such as the &lt;code&gt;SUMX&lt;/code&gt; example above. &lt;code&gt;DIVIDE&lt;/code&gt; is the safe division function and handles division by zero gracefully, which is useful in ratio measures.&lt;/p&gt;

&lt;h3&gt;
  
  
  7.3 Filter functions
&lt;/h3&gt;

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

&lt;p&gt;Filter functions ensure that calculations reflect the intended filter context.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;FILTER&lt;/code&gt;&lt;/strong&gt; returns a subset of a table that meets a condition. The result is a new table that can be named and used like any other table.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;ALL&lt;/code&gt;&lt;/strong&gt; ignores the active filters.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;ALLEXCEPT&lt;/code&gt;&lt;/strong&gt; removes all filters except those on a specified column.&lt;/li&gt;
&lt;li&gt;A check for whether a column is filtered to a single value (&lt;code&gt;HASONEVALUE&lt;/code&gt;) returns &lt;code&gt;TRUE&lt;/code&gt; when the column has exactly one value in the current context.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;CALCULATE&lt;/code&gt;&lt;/strong&gt; is covered in Section 7.4.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Syntax conventions&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FILTER( Table, Column = "value" )          -- e.g. only Kericho county
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Illustrative example:&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Kericho Only =
FILTER( 'Kenya_Crops_Dataset 5', 'Kenya_Crops_Dataset 5'[County] = "Kericho" )
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt; is logical &lt;strong&gt;AND&lt;/strong&gt; (all conditions must be met) and must be written with two ampersands; a single &lt;code&gt;&amp;amp;&lt;/code&gt; is &lt;strong&gt;concatenation&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;||&lt;/code&gt; is logical &lt;strong&gt;OR&lt;/strong&gt; that requires only one of the stated conditions to be met to return results of the DAX function&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;For several values from one column, use the &lt;strong&gt;&lt;code&gt;IN&lt;/code&gt;&lt;/strong&gt; operator with curly brackets, for example &lt;code&gt;{"Nairobi", "Meru", "Nakuru"}&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Excel's conditional aggregations (&lt;code&gt;SUMIF&lt;/code&gt;, &lt;code&gt;AVERAGEIF&lt;/code&gt;) have no direct DAX functions of the same name; the equivalent is built with &lt;code&gt;CALCULATE&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  7.4 CALCULATE
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;CALCULATE&lt;/code&gt; evaluates an expression in a &lt;strong&gt;modified filter context&lt;/strong&gt;. The expression is typically an aggregate (sum, average, min, max). Because it returns a single value, it is used to create a &lt;strong&gt;measure&lt;/strong&gt;. It accepts multiple filter conditions separated by commas; for two conditions on the same column, use &lt;code&gt;IN&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Examples of questions answered with &lt;code&gt;CALCULATE&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;total yield for a given county;&lt;/li&gt;
&lt;li&gt;market price for Nairobi;&lt;/li&gt;
&lt;li&gt;total cost of production for farmers who planted more than 10 acres of maize in Kiambu county;&lt;/li&gt;
&lt;li&gt;how many farmers made a loss;&lt;/li&gt;
&lt;li&gt;average market price of tomatoes planted during the dry season.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Sales Today = CALCULATE( SUM( Sales[Sales] ), Sales[Date] = TODAY() )
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If a total-sales measure already exists, it can be reused:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Sales Today = CALCULATE( [Total Sales], Sales[Date] = TODAY() )
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Illustrative example:&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Kiambu Maize Cost =
CALCULATE(
    SUM( Crops[Cost of Production] ),
    Crops[County] = "Kiambu",
    Crops[Crop Type] = "Maize",
    Crops[Planted Area] &amp;gt; 10
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;h3&gt;
  
  
  7.5 ALL and removing filters
&lt;/h3&gt;

&lt;p&gt;To prevent a KPI from being affected by slicers or filters, apply &lt;code&gt;ALL&lt;/code&gt; to the relevant table or columns. &lt;code&gt;ALLEXCEPT&lt;/code&gt; ignores filters on every column &lt;em&gt;except&lt;/em&gt; the one named (for example, county).&lt;br&gt;
e.g a measure named &lt;em&gt;Total Revenue all county&lt;/em&gt;, which sums &lt;code&gt;Revenue (KES)&lt;/code&gt; while applying &lt;code&gt;ALL&lt;/code&gt; to the &lt;strong&gt;County&lt;/strong&gt; and &lt;strong&gt;Crop Type&lt;/strong&gt; columns, so the card ignores slicers on those columns.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Total Revenue all county =
CALCULATE(
    SUM( 'Kenya_Crops_Dataset 5'[Revenue (KES)] ),
    ALL( 'Kenya_Crops_Dataset 5'[County] ),
    ALL( 'Kenya_Crops_Dataset 5'[Crop Type] )
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;&lt;em&gt;A measure using &lt;code&gt;ALLEXCEPT&lt;/code&gt; so that the card ignores all filters except  County and Crop Type filters.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  7.6 Logical functions
&lt;/h3&gt;

&lt;p&gt;Logical functions evaluate conditions and return values depending on whether those conditions are true or false. They support decision-making, filtering and categorising data (for example profitable or non-profitable; low, no or high profit).&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Behaviour&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;IF&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Tests a condition; two conditions, two outputs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nested &lt;code&gt;IF&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;More than two conditions and outputs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;AND&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;True only if both conditions are true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;OR&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;True if at least one condition is true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;NOT&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Reverses the logical value&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SWITCH&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A cleaner alternative to nested &lt;code&gt;IF&lt;/code&gt;; evaluates an expression against matching values; &lt;code&gt;SWITCH( TRUE(), … )&lt;/code&gt; allows multiple conditions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ISBLANK&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Tests for blanks, usually inside &lt;code&gt;IF&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Two points matter in practice. Blanks fall into the "else" branch of an &lt;code&gt;IF&lt;/code&gt;, so &lt;code&gt;ISBLANK&lt;/code&gt; should be used where blanks need separate handling. And &lt;code&gt;AND&lt;/code&gt;/&lt;code&gt;OR&lt;/code&gt; used alone return only &lt;code&gt;TRUE&lt;/code&gt;/&lt;code&gt;FALSE&lt;/code&gt;; nested in an &lt;code&gt;IF&lt;/code&gt;, the output can be any quoted text.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Illustrative example:&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Profit Category =
IF( ISBLANK( Crops[Profit] ), "Not recorded",
    IF( Crops[Profit] &amp;lt; 0, "Loss", "Profitable" ) )
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp0xtkqtalkwynm1al3jn.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp0xtkqtalkwynm1al3jn.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgrcpdfo2dsncuvglkb8t.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgrcpdfo2dsncuvglkb8t.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fky61ahcdwmv2qsszltzg.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fky61ahcdwmv2qsszltzg.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv1qt8szyimqnq6r693hr.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv1qt8szyimqnq6r693hr.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffrbe2mcqdiydz8ldmra8.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffrbe2mcqdiydz8ldmra8.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1wygrufdelokuphu267n.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1wygrufdelokuphu267n.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Use of AND&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4rwjxo2keqkznypuzp9m.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4rwjxo2keqkznypuzp9m.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Use of OR&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgk41vygcch79jfyp4j8z.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgk41vygcch79jfyp4j8z.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  7.7 Text functions
&lt;/h3&gt;

&lt;p&gt;Text functions clean and format text: &lt;code&gt;LOWER&lt;/code&gt;, &lt;code&gt;UPPER&lt;/code&gt;, &lt;code&gt;PROPER&lt;/code&gt;, &lt;code&gt;CONCATENATE&lt;/code&gt;/&lt;code&gt;CONCAT&lt;/code&gt;, &lt;code&gt;SPLIT&lt;/code&gt;, &lt;code&gt;TRIM&lt;/code&gt;, &lt;code&gt;CLEAN&lt;/code&gt;, &lt;code&gt;LEFT&lt;/code&gt; and &lt;code&gt;RIGHT&lt;/code&gt;. Because they are data-preparation tasks, they are generally better applied in &lt;strong&gt;Power Query&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;TRIM&lt;/code&gt; removes extra leading or trailing spaces.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;CONCATENATE&lt;/code&gt; joins two text values without a delimiter; for more values, or to insert a space or word, use the &lt;code&gt;&amp;amp;&lt;/code&gt; operator.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Illustrative example:&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Full Label = Crops[County] &amp;amp; " - " &amp;amp; Crops[Crop Type]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3jjshabpmawykj1djbzg.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3jjshabpmawykj1djbzg.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq0w15dicdouy7voxs0dt.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq0w15dicdouy7voxs0dt.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzoi88psthjh6kd48za74.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzoi88psthjh6kd48za74.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxqa326d7kf0cn283enmb.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxqa326d7kf0cn283enmb.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmxo5xyz6eolk3inhzy2x.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmxo5xyz6eolk3inhzy2x.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F86hrbuasbu0y5dz2sjzj.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F86hrbuasbu0y5dz2sjzj.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Without space&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpvploy5aq0x9yb4a4n43.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpvploy5aq0x9yb4a4n43.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;With space&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  7.8 Date and time functions
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Need&lt;/th&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Current date / date and time&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;TODAY&lt;/code&gt;, &lt;code&gt;NOW&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Extract components (numeric)&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;YEAR&lt;/code&gt;, &lt;code&gt;MONTH&lt;/code&gt;, &lt;code&gt;DAY&lt;/code&gt;, &lt;code&gt;HOUR&lt;/code&gt;, &lt;code&gt;MINUTE&lt;/code&gt;, &lt;code&gt;SECOND&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Text form of a component&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;FORMAT( date, "YYYY" )&lt;/code&gt;, &lt;code&gt;"YY"&lt;/code&gt;; &lt;code&gt;"MMMM"&lt;/code&gt; full month name, &lt;code&gt;"MMM"&lt;/code&gt; short; &lt;code&gt;"DDDD"&lt;/code&gt; day name&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Quarter&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;FORMAT( date, "Q" )&lt;/code&gt; (see appendix)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Difference between two dates&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;DATEDIFF( date1, date2, interval )&lt;/code&gt; with interval day, month or year&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Working days between dates&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;NETWORKDAYS&lt;/code&gt; (excludes weekends, optionally holidays)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Build a date&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DATE&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Week number&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;WEEKNUM&lt;/code&gt;; return type 1 = week starts Sunday, 2 = week starts Monday&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Illustrative example:&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Order Month Name = FORMAT( Orders[Order Date], "MMMM" )
Days to Delivery = DATEDIFF( Orders[Order Date], Orders[Delivery Date], DAY )
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;h3&gt;
  
  
  7.9 Time intelligence
&lt;/h3&gt;

&lt;p&gt;Time-intelligence functions form a category in the course structure, but no specific functions or examples were covered, so none are presented here as demonstrated content.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Understanding DAX Outputs
&lt;/h2&gt;

&lt;p&gt;Before writing a formula, the first question is: &lt;strong&gt;what output is required?&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Required output&lt;/th&gt;
&lt;th&gt;DAX object&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;A single value&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Measure&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Appears in the Fields pane; usually shown in a &lt;strong&gt;Card&lt;/strong&gt; visual&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A column in which each row is evaluated separately&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Calculated column&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Adds an entire column to a table&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A new table&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Calculated table&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;For example, data for a specific date or specific counties&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A measure is evaluated according to the &lt;strong&gt;filter context&lt;/strong&gt; in which it is used, so it responds to slicers and to the rows and columns of a visual. A calculated column is evaluated row by row when the model is refreshed. Choosing the wrong object type is a common source of errors even when the formula itself is correct.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. From DAX Functions to Business Questions
&lt;/h2&gt;

&lt;p&gt;DAX is not an exercise in memorising formulas. The essential step is understanding the question and identifying what to filter, what to aggregate and what output is needed.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Business question&lt;/th&gt;
&lt;th&gt;Approach&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total sales for today&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Filter the sum to that date: &lt;code&gt;CALCULATE( SUM( sales ), date = TODAY() )&lt;/code&gt;, or &lt;code&gt;CALCULATE( [Total Sales], date = TODAY() )&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;How many sales&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Count rows or transactions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;How many customers&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Counts people who completed transactions, regardless of how many items each bought; &lt;code&gt;COUNTROWS&lt;/code&gt; or &lt;code&gt;COUNT&lt;/code&gt; on the customer ID. Different approaches can give the same answer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;How many &lt;em&gt;different&lt;/em&gt; customers&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;A distinct count (&lt;code&gt;DISTINCTCOUNT&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total yield or market price for a county&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;CALCULATE&lt;/code&gt; with a county filter&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Average market price for tomatoes in the dry season&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;CALCULATE&lt;/code&gt; with &lt;code&gt;AVERAGE&lt;/code&gt; and two conditions&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These calculations assume tables that are organised sensibly. If the same customer is recorded under several spellings, "how many different customers" cannot be answered correctly. This is the bridge to data modelling.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. Data Modelling: Structuring Data for Analysis
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Data modelling&lt;/strong&gt; is the process of organizing tables and defining the relationships between them so that data can be correctly filtered, analyzed and summarized. It involves two tasks:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;defining and organizing tables;&lt;/li&gt;
&lt;li&gt;defining relationships between tables.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Why it matters
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Better reporting structure.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reduced repetition.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fewer errors.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ease of creating reports.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A well-designed model also keeps DAX simple, supports query performance (each visual issues a query against the model, and fact/dimension designs suit how those queries filter, group and summarise), improves readability and maintainability, and scales more gracefully as new subject areas are added.&lt;/p&gt;

&lt;h2&gt;
  
  
  11. Flat Table
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;flat table&lt;/strong&gt; holds all information in one table. The Kenya crops dataset began this way: county, crop type, planted area, revenue and price all sit in each row.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FLAT TABLE   (illustrative diagram)
┌────────────────────────────────────────────────────────────┐
│ County | Crop  | Farmer | Season | Area | Yield | Revenue … │
│ Kiambu | Maize | F001   | Dry    | 12   | …     | …         │
│ Kiambu | Maize | F002   | Dry    | 8    | …     | …         │
│ Kericho| Tea   | F003   | Wet    | 20   | …     | …         │
└────────────────────────────────────────────────────────────┘
   descriptive text is repeated on every row
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Aspect&lt;/th&gt;
&lt;th&gt;Assessment&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Advantages&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Simple to understand; quick to start; no relationships to configure; adequate for a small, single-topic dataset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Disadvantages&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Descriptive values repeat on every row; corrections must be made in many places; tables become very wide; descriptions and measurements are mixed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;When appropriate&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Small, one-off analyses with a single subject&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Power BI implications&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;More repeated text is stored; no reusable dimensions to filter from; scales poorly as subjects are added&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The multi-table alternative stores &lt;strong&gt;facts&lt;/strong&gt; (such as transactions or hospital visits) separately from &lt;strong&gt;detail tables&lt;/strong&gt; (such as doctor details), linked to the main table to avoid repetition.&lt;/p&gt;

&lt;h2&gt;
  
  
  12. Fact Tables and Dimension Tables
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Fact table
&lt;/h3&gt;

&lt;p&gt;A fact table:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keeps the specific records, events or transactions to be analyzed (for example, all patients who visit a hospital);&lt;/li&gt;
&lt;li&gt;Measures something;&lt;/li&gt;
&lt;li&gt;Contains numerical records, metrics and quantities;&lt;/li&gt;
&lt;li&gt;Allows the &lt;strong&gt;grain&lt;/strong&gt; of the data to be understood;&lt;/li&gt;
&lt;li&gt;Contains both primary and foreign keys.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Grain (granularity)&lt;/strong&gt; is a description of what each record in a table represents. It indicates &lt;em&gt;what was done&lt;/em&gt;. The test for any fact table is: &lt;strong&gt;what does one row represent?&lt;/strong&gt; In the hospital example, one row of &lt;code&gt;FactVisit&lt;/code&gt; represents one patient visit. If the grain is unclear, counts and totals become unreliable; for instance, if a visit were repeated once per test performed, "number of visits" would be overstated.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Generic examples :&lt;/em&gt; &lt;code&gt;FactSales&lt;/code&gt; (one row per sale line), &lt;code&gt;FactOrders&lt;/code&gt; (one row per order), &lt;code&gt;FactTransactions&lt;/code&gt; (one row per payment).&lt;/p&gt;

&lt;h3&gt;
  
  
  Dimension table
&lt;/h3&gt;

&lt;p&gt;A dimension table&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Describes&lt;/strong&gt; something, giving context for the events held in the fact table (for example, patient details);&lt;/li&gt;
&lt;li&gt;Contains descriptive text content;&lt;/li&gt;
&lt;li&gt;Has a &lt;strong&gt;primary key&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example: &lt;code&gt;DimPatient&lt;/code&gt;, &lt;code&gt;DimDoctor&lt;/code&gt;, &lt;code&gt;DimDepartment&lt;/code&gt;, &lt;code&gt;DimCustomer&lt;/code&gt;, &lt;code&gt;DimProduct&lt;/code&gt;, &lt;code&gt;DimDate&lt;/code&gt;, &lt;code&gt;DimLocation&lt;/code&gt;.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Fact table&lt;/th&gt;
&lt;th&gt;Dimension table&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Answers&lt;/td&gt;
&lt;td&gt;What happened? How much?&lt;/td&gt;
&lt;td&gt;Who, what, where, when?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Contents&lt;/td&gt;
&lt;td&gt;Numbers, metrics, keys&lt;/td&gt;
&lt;td&gt;Descriptive attributes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;One row represents&lt;/td&gt;
&lt;td&gt;One event (the grain)&lt;/td&gt;
&lt;td&gt;One entity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Keys&lt;/td&gt;
&lt;td&gt;Primary and foreign keys&lt;/td&gt;
&lt;td&gt;Primary key&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Typical size&lt;/td&gt;
&lt;td&gt;Many rows&lt;/td&gt;
&lt;td&gt;Fewer rows&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Separating them means each description is stored once, while the fact table stays focused on events.&lt;/p&gt;

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

&lt;p&gt;A &lt;strong&gt;star schema&lt;/strong&gt; consists of one central fact table surrounded by dimension tables, each connected to the fact table.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                 DimDepartment
                       │
                       │
   (other dimension) ── FactVisit ── DimPatient
                       │
                       │
                   DimDoctor
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Advantages&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Simple, readable model diagram.&lt;/li&gt;
&lt;li&gt;Descriptions are stored once, reducing repetition.&lt;/li&gt;
&lt;li&gt;Dimensions filter and the fact table is summarised, which matches the way Power BI visuals query a model.&lt;/li&gt;
&lt;li&gt;Simpler DAX: measures aggregate fact columns while slicers come from dimensions.&lt;/li&gt;
&lt;li&gt;Easy report creation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Disadvantages&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Requires planning, since a flat table must be split into facts and dimensions.&lt;/li&gt;
&lt;li&gt;Some descriptive values still repeat within a dimension (for example, a county name for every patient in that county).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Appropriate use:&lt;/strong&gt; most business intelligence and reporting models.&lt;/p&gt;

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

&lt;p&gt;A &lt;strong&gt;snowflake schema&lt;/strong&gt; works like a star schema, but the dimension tables are broken down into several smaller related tables. The structure is hierarchical: fact → dimension → sub-dimension.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; DimCountry ── DimCounty ── DimPatient ── FactVisit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Star&lt;/th&gt;
&lt;th&gt;Snowflake&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Dimensions&lt;/td&gt;
&lt;td&gt;One table per dimension&lt;/td&gt;
&lt;td&gt;Dimension split into related sub-tables&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Redundancy&lt;/td&gt;
&lt;td&gt;Some repetition inside dimensions&lt;/td&gt;
&lt;td&gt;Less repetition (more normalized)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Relationship hops from slicer to fact&lt;/td&gt;
&lt;td&gt;One&lt;/td&gt;
&lt;td&gt;Two or more&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Model diagram&lt;/td&gt;
&lt;td&gt;Compact&lt;/td&gt;
&lt;td&gt;Larger, more tables&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Advantages:&lt;/strong&gt;&lt;br&gt;
-Less repeated data within dimensions; &lt;br&gt;
-Explicit hierarchies; &lt;br&gt;
-A shared lookup (such as county) can be maintained in one place.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Disadvantages:&lt;/strong&gt; &lt;br&gt;
-More tables and relationships, &lt;br&gt;
-Longer filter paths, and a &lt;br&gt;
-Busier model that is harder for report builders to navigate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Appropriate situations:&lt;/strong&gt; when a sub-dimension is shared by several dimensions, or when the source data is already normalized. &lt;/p&gt;
&lt;h2&gt;
  
  
  15. Comparing Flat, Star and Snowflake Schemas
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Flat table&lt;/th&gt;
&lt;th&gt;Star schema&lt;/th&gt;
&lt;th&gt;Snowflake schema&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Structure&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Everything in one table&lt;/td&gt;
&lt;td&gt;One fact table plus dimension tables&lt;/td&gt;
&lt;td&gt;Fact table plus dimensions split into sub-tables&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Number of tables&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Few&lt;/td&gt;
&lt;td&gt;Most&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Redundancy&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Low to moderate&lt;/td&gt;
&lt;td&gt;Lowest&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Model complexity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Simplest to set up; harder to maintain as it grows&lt;/td&gt;
&lt;td&gt;Moderate; easy to read&lt;/td&gt;
&lt;td&gt;Highest&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;DAX / reporting&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Adequate for simple cases; filtering limited to that one table&lt;/td&gt;
&lt;td&gt;Simple: measures on facts, slicers from dimensions&lt;/td&gt;
&lt;td&gt;Works, but filters pass through more relationships&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Performance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Wide tables with repeated text can be inefficient&lt;/td&gt;
&lt;td&gt;Recommended by Microsoft for Power BI&lt;/td&gt;
&lt;td&gt;Extra relationship hops; usually no benefit unless the structure is needed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Scalability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Poor&lt;/td&gt;
&lt;td&gt;Good&lt;/td&gt;
&lt;td&gt;Good, with growing complexity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maintainability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Corrections repeated across many rows&lt;/td&gt;
&lt;td&gt;Fix a description once&lt;/td&gt;
&lt;td&gt;Good for hierarchies; heavier to manage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Appropriate use&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Small, single-topic analysis&lt;/td&gt;
&lt;td&gt;Most BI projects&lt;/td&gt;
&lt;td&gt;Shared hierarchies; normalised sources&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h2&gt;
  
  
  16. Primary Keys and Foreign Keys
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;primary key&lt;/strong&gt; is a unique identifier column that gives each record in a table a unique identity.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;foreign key&lt;/strong&gt; is a primary key from one table that is used in a different table.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;common column&lt;/strong&gt; is required before a relationship can be created.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Example.&lt;/strong&gt; &lt;code&gt;CustomerID&lt;/code&gt; is unique in &lt;code&gt;DimCustomer&lt;/code&gt; (one row per customer) but may appear many times in &lt;code&gt;FactSales&lt;/code&gt;, because one customer can make many purchases. &lt;code&gt;DimCustomer[CustomerID]&lt;/code&gt; is therefore a primary key, &lt;code&gt;FactSales[CustomerID]&lt;/code&gt; is a foreign key, and the relationship is &lt;strong&gt;one-to-many&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Illustrative example:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;DimCustomer&lt;/code&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;CustomerID (PK)&lt;/th&gt;
&lt;th&gt;CustomerName&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;C1&lt;/td&gt;
&lt;td&gt;Amina&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C2&lt;/td&gt;
&lt;td&gt;Brian&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;FactSales&lt;/code&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;SaleID&lt;/th&gt;
&lt;th&gt;CustomerID (FK)&lt;/th&gt;
&lt;th&gt;Amount&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;S1&lt;/td&gt;
&lt;td&gt;C1&lt;/td&gt;
&lt;td&gt;500&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;S2&lt;/td&gt;
&lt;td&gt;C1&lt;/td&gt;
&lt;td&gt;300&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;S3&lt;/td&gt;
&lt;td&gt;C2&lt;/td&gt;
&lt;td&gt;450&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Referential integrity&lt;/strong&gt; means every foreign-key value in the fact table has a matching primary key in the dimension. If &lt;code&gt;FactSales&lt;/code&gt; contained &lt;code&gt;C9&lt;/code&gt; but &lt;code&gt;DimCustomer&lt;/code&gt; had no &lt;code&gt;C9&lt;/code&gt;, those sales would not attach to any customer and would appear under a blank member in visuals.&lt;/p&gt;
&lt;h2&gt;
  
  
  17. Relationships in Power BI
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;relationship&lt;/strong&gt; shows how tables are connected. It is created by matching a primary key in a dimension table with a foreign key in the fact table. Relationships are necessary because, once data is distributed across tables, Power BI needs to know which fact rows belong to which dimension rows. They are what allow &lt;strong&gt;filters to travel&lt;/strong&gt; from one table to another.&lt;/p&gt;

&lt;p&gt;Key properties:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Keys:&lt;/strong&gt; primary key ↔ foreign key.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cardinality:&lt;/strong&gt; how rows in one table relate to rows in another (Section 18).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-filter direction:&lt;/strong&gt; single or both (Section 19).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Referential integrity&lt;/strong&gt; (Section 16).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Active and inactive relationships:&lt;/strong&gt; only one relationship between two tables can be active at a time. Additional relationships can exist but are inactive (shown as dashed lines in Model view) and do not filter unless a DAX measure activates them with &lt;code&gt;USERELATIONSHIP&lt;/code&gt;. A relationship must exist and be active for columns from different tables to be used together.&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  18. Relationship Cardinality
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Cardinality&lt;/strong&gt; describes how data in one table relates to data in another, based on the count of matching rows. It should be distinguished from &lt;em&gt;column cardinality&lt;/em&gt;, which refers to how unique the values in a single column are.&lt;/p&gt;
&lt;h3&gt;
  
  
  One-to-many (1:*), the most common type
&lt;/h3&gt;

&lt;p&gt;A single row in one table matches multiple rows in the other.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Example: one patient (dimension) → many visits (fact); &lt;em&gt;illustrative:&lt;/em&gt; one &lt;code&gt;DimCustomer&lt;/code&gt; row → many &lt;code&gt;FactSales&lt;/code&gt; rows.&lt;/li&gt;
&lt;li&gt;Common in dimensional models because every dimension-to-fact link is of this type: the "one" side holds unique keys and the "many" side holds the events.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DimCustomer (1) ─────────────&amp;lt; FactSales (*)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;em&gt;Many-to-one&lt;/em&gt; is the same relationship read from the other direction.&lt;/p&gt;
&lt;h3&gt;
  
  
  One-to-one (1:1)
&lt;/h3&gt;

&lt;p&gt;One row in a table links to only one row in another table. It arises when there is no separate information that justifies splitting the table, and it relates to &lt;strong&gt;normalisation&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Illustrative example:&lt;/em&gt; &lt;code&gt;Employee&lt;/code&gt; and &lt;code&gt;EmployeeBadge&lt;/code&gt;, with exactly one badge record per employee.&lt;/li&gt;
&lt;li&gt;Before using it, consider whether the two tables should simply be combined into one (for example by a merge in Power Query). Filters flow in both directions in a 1:1 relationship.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Employee (1) ─────────── (1) EmployeeBadge
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Many-to-many (:)
&lt;/h3&gt;

&lt;p&gt;Multiple rows in one table link to multiple rows in another.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Illustrative example:&lt;/em&gt; students and courses.&lt;/li&gt;
&lt;li&gt;It requires careful modelling because neither side has unique keys, so filters can match many rows on both sides and totals can become hard to interpret. A &lt;strong&gt;bridge (junction) table&lt;/strong&gt; converts it into two one-to-many relationships.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Students (*) ───────────── (*) Courses
   safer:  Students (1)──&amp;lt;  Enrolments  &amp;gt;──(1) Courses
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzdk8tmbm9nqwonwwcwdi.png" alt=" " width="800" height="450"&gt;
&lt;/h2&gt;
&lt;h2&gt;
  
  
  19. Filter Direction
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Filter direction&lt;/strong&gt; controls which table filters which when a user interacts with a slicer or visual.&lt;/p&gt;
&lt;h3&gt;
  
  
  Single-direction filtering
&lt;/h3&gt;

&lt;p&gt;Filters flow from the "one" side (dimension) to the "many" side (fact).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DimProduct
    │
    ▼
FactSales
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Selecting a product in a &lt;code&gt;DimProduct&lt;/code&gt; slicer filters the corresponding rows in &lt;code&gt;FactSales&lt;/code&gt;, so a revenue card then shows only that product's revenue (&lt;em&gt;illustrative&lt;/em&gt;). This is the default for a one-to-many relationship and the preferred setting in a star schema.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bidirectional filtering
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DimProduct
    ▲
    ▼
FactSales
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Filters flow in both directions. It should be used sparingly because it can cause:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ambiguous filter paths&lt;/strong&gt;, where multiple routes between two tables leave it unclear which one Power BI should use, potentially deactivating a relationship or producing route-dependent results;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;unnecessary complexity&lt;/strong&gt;, since each bidirectional relationship makes the model harder to reason about;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;unexpected filtering behaviour&lt;/strong&gt;, as slicers begin filtering one another and numbers change in ways report users do not expect;&lt;/li&gt;
&lt;li&gt;reduced performance on large models.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Guideline:&lt;/strong&gt; keep relationships single-direction from dimension to fact, and use &lt;em&gt;Both&lt;/em&gt; only for a specific, understood reason.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqgrqx0lm0298ye3o3ktk.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqgrqx0lm0298ye3o3ktk.png" alt=" " width="800" height="325"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  20. Establishing Relationships in Power BI
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Identify the matching keys:&lt;/strong&gt; the primary key in the dimension and the foreign key in the fact table.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Create the relationship&lt;/strong&gt; by either:

&lt;ul&gt;
&lt;li&gt;drag and drop, from primary key to foreign key in Model view; or&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modeling → Manage relationships&lt;/strong&gt; on the ribbon.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Set the cardinality&lt;/strong&gt; and the &lt;strong&gt;cross-filter direction&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Preparing keys when none exist
&lt;/h3&gt;

&lt;p&gt;When a flat table is split into dimensions, the following workflow applies:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Clean the data.&lt;/li&gt;
&lt;li&gt;Create dimension tables, working out which columns belong to each dimension.&lt;/li&gt;
&lt;li&gt;Give each dimension a &lt;strong&gt;unique identifier&lt;/strong&gt;. If none exists, create one: right-click on the table → &lt;strong&gt;Add index column (from 1)&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;ol&gt;
&lt;li&gt;In the original table, find and replace the descriptive name with the unique index, which then serves as the &lt;strong&gt;foreign key&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Clean the data again and check for errors.&lt;/li&gt;
&lt;li&gt;Create relationships and ensure they are active.&lt;/li&gt;
&lt;li&gt;Calculate (DAX).&lt;/li&gt;
&lt;li&gt;Display (dashboard).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The same result can also be achieved by merging the original table with the new dimension in Power Query, which leads to the next topic.&lt;/p&gt;

&lt;h2&gt;
  
  
  21. Joins in Power Query
&lt;/h2&gt;

&lt;p&gt;Relationships connect tables inside the model. A &lt;strong&gt;join&lt;/strong&gt; combines tables earlier, during data preparation. A join combines two tables using matching columns identified through keys, and is performed in Power Query because the table is being transformed to create a new, merged table. &lt;br&gt;
In Power Query the command is &lt;strong&gt;Merge Queries&lt;/strong&gt;. Which table's rows are kept in full depends on the join type.&lt;/p&gt;
&lt;h3&gt;
  
  
  Example used for all six joins
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Illustrative example&lt;/em&gt; &lt;br&gt;
Join key: &lt;code&gt;CustomerID&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Customers (left table)&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;CustomerID&lt;/th&gt;
&lt;th&gt;CustomerName&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;C1&lt;/td&gt;
&lt;td&gt;Amina&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C2&lt;/td&gt;
&lt;td&gt;Brian&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C3&lt;/td&gt;
&lt;td&gt;Chebet&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Orders (right table)&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;OrderID&lt;/th&gt;
&lt;th&gt;CustomerID&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;O1&lt;/td&gt;
&lt;td&gt;C1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;O2&lt;/td&gt;
&lt;td&gt;C1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;O3&lt;/td&gt;
&lt;td&gt;C4&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Brian (C2) and Chebet (C3) have no orders, and order O3 belongs to C4, who is not in the Customers table.&lt;/p&gt;
&lt;h3&gt;
  
  
  21.1 Inner join
&lt;/h3&gt;

&lt;p&gt;Keeps &lt;strong&gt;only matching records&lt;/strong&gt; in both tables. Use when only records existing on both sides are wanted.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;CustomerID&lt;/th&gt;
&lt;th&gt;CustomerName&lt;/th&gt;
&lt;th&gt;OrderID&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;C1&lt;/td&gt;
&lt;td&gt;Amina&lt;/td&gt;
&lt;td&gt;O1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C1&lt;/td&gt;
&lt;td&gt;Amina&lt;/td&gt;
&lt;td&gt;O2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Customers ∩ Orders         only the overlap
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


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

&lt;p&gt;Keeps &lt;strong&gt;all rows from the left (first) table&lt;/strong&gt; and only the matching rows from the right. Use to list all customers whether or not they ordered.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;CustomerID&lt;/th&gt;
&lt;th&gt;CustomerName&lt;/th&gt;
&lt;th&gt;OrderID&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;C1&lt;/td&gt;
&lt;td&gt;Amina&lt;/td&gt;
&lt;td&gt;O1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C1&lt;/td&gt;
&lt;td&gt;Amina&lt;/td&gt;
&lt;td&gt;O2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C2&lt;/td&gt;
&lt;td&gt;Brian&lt;/td&gt;
&lt;td&gt;&lt;em&gt;null&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C3&lt;/td&gt;
&lt;td&gt;Chebet&lt;/td&gt;
&lt;td&gt;&lt;em&gt;null&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;all of Customers + matching Orders
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


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

&lt;p&gt;Keeps &lt;strong&gt;all rows from the right (second) table&lt;/strong&gt; and the matching rows from the left.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;CustomerID&lt;/th&gt;
&lt;th&gt;CustomerName&lt;/th&gt;
&lt;th&gt;OrderID&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;C1&lt;/td&gt;
&lt;td&gt;Amina&lt;/td&gt;
&lt;td&gt;O1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C1&lt;/td&gt;
&lt;td&gt;Amina&lt;/td&gt;
&lt;td&gt;O2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C4&lt;/td&gt;
&lt;td&gt;&lt;em&gt;null&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;O3&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;matching Customers + all of Orders
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


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

&lt;p&gt;Keeps &lt;strong&gt;all records from both tables&lt;/strong&gt;, whether or not they match.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;CustomerID&lt;/th&gt;
&lt;th&gt;CustomerName&lt;/th&gt;
&lt;th&gt;OrderID&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;C1&lt;/td&gt;
&lt;td&gt;Amina&lt;/td&gt;
&lt;td&gt;O1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C1&lt;/td&gt;
&lt;td&gt;Amina&lt;/td&gt;
&lt;td&gt;O2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C2&lt;/td&gt;
&lt;td&gt;Brian&lt;/td&gt;
&lt;td&gt;&lt;em&gt;null&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C3&lt;/td&gt;
&lt;td&gt;Chebet&lt;/td&gt;
&lt;td&gt;&lt;em&gt;null&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C4&lt;/td&gt;
&lt;td&gt;&lt;em&gt;null&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;O3&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Customers ∪ Orders         everything
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


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

&lt;p&gt;Keeps &lt;strong&gt;only the rows in the left table that have no match&lt;/strong&gt; in the right. Useful for finding customers who never ordered, and for data-quality checks.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;CustomerID&lt;/th&gt;
&lt;th&gt;CustomerName&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;C2&lt;/td&gt;
&lt;td&gt;Brian&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C3&lt;/td&gt;
&lt;td&gt;Chebet&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Customers − Orders         left only
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


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

&lt;p&gt;Keeps &lt;strong&gt;only the rows in the right table that have no match&lt;/strong&gt; in the left. Useful for finding orders whose customer is missing, which is a referential-integrity problem (Section 16).&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;OrderID&lt;/th&gt;
&lt;th&gt;CustomerID&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;O3&lt;/td&gt;
&lt;td&gt;C4&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Orders − Customers         right only
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


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

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Join&lt;/th&gt;
&lt;th&gt;Rows kept&lt;/th&gt;
&lt;th&gt;Result in the example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Inner&lt;/td&gt;
&lt;td&gt;Matches only&lt;/td&gt;
&lt;td&gt;2 rows&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Left outer&lt;/td&gt;
&lt;td&gt;All left + matching right&lt;/td&gt;
&lt;td&gt;4 rows&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Right outer&lt;/td&gt;
&lt;td&gt;All right + matching left&lt;/td&gt;
&lt;td&gt;3 rows&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Full outer&lt;/td&gt;
&lt;td&gt;Everything&lt;/td&gt;
&lt;td&gt;5 rows&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Left anti&lt;/td&gt;
&lt;td&gt;Left rows with no match&lt;/td&gt;
&lt;td&gt;2 rows&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Right anti&lt;/td&gt;
&lt;td&gt;Right rows with no match&lt;/td&gt;
&lt;td&gt;1 row&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h2&gt;
  
  
  22. Join Output Illustrations
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; Left table = L,  Right table = R,  overlap = matched rows

 Inner       :        [ L ∩ R ]
 Left outer  :   [ L ........ ∩ ]       all of L, matched R
 Right outer :        [ ∩ ........ R ]   matched L, all of R
 Full outer  :   [ L ........ ∩ ........ R ]
 Left anti   :   [ L only ]
 Right anti  :                [ R only ]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  23. Power Query Joins vs Power BI Relationships
&lt;/h2&gt;

&lt;p&gt;Both mechanisms connect tables through matching keys, but they occur at different stages and do different things.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; Power Query                         Data model
 ───────────                         ──────────
 Merge / Join  ──►  Data           ──►  Relationships  ──►  DAX / Visuals
 (combine rows)     transformation       (connect tables)
 "preparation"                           "modelling"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Does a Power Query merge physically combine data?&lt;/strong&gt; Yes. A merge creates a new table, or adds columns to an existing one, in which matched rows sit side by side. After &lt;em&gt;Close &amp;amp; Apply&lt;/em&gt;, that wider table is what is loaded into the model.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does a relationship physically combine tables?&lt;/strong&gt; No. A relationship creates no new table and moves no data. Both tables remain separate. It is a rule in the model stating that when one table is filtered, the other is filtered through a shared key. Power BI applies it at calculation time, when a visual or measure needs columns from both tables.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When does each happen?&lt;/strong&gt; Joins happen during preparation (Power Query); relationships are defined during modelling (Model view), after loading.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When is a merge preferable to a relationship?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To add a column from another table, such as bringing a county name into a table that only held a county code (&lt;em&gt;illustrative&lt;/em&gt;).&lt;/li&gt;
&lt;li&gt;To flatten a snowflake by merging sub-dimensions into one dimension.&lt;/li&gt;
&lt;li&gt;To filter rows by existence in another table, using anti joins.&lt;/li&gt;
&lt;li&gt;To bring a key into a fact table when creating dimensions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A relationship is preferable when tables hold different kinds of information (dimension and fact) and should stay separate while still filtering one another.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What can excessive merging cause?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Wider tables with more columns.&lt;/li&gt;
&lt;li&gt;Greater redundancy, since descriptions repeat on every row (the flat-table problem).&lt;/li&gt;
&lt;li&gt;Loss of dimensional structure, because facts and dimensions blend into one table and clean, reusable dimensions disappear.&lt;/li&gt;
&lt;li&gt;Higher model complexity and maintenance cost, and row multiplication if the key is not unique on one side of the merge.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why do fact and dimension tables stay separate?&lt;/strong&gt; A star schema works because dimensions filter and facts summarise. Merging everything into one table abandons that structure. Keeping the tables separate and relating them stores each description once, keeps the fact table focused on its grain, and keeps DAX simple.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Power Query merge (join)&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Power BI relationship&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Stage&lt;/td&gt;
&lt;td&gt;Data preparation&lt;/td&gt;
&lt;td&gt;Data modelling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Location&lt;/td&gt;
&lt;td&gt;Power Query Editor&lt;/td&gt;
&lt;td&gt;Model view&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Physically combines data?&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Yes&lt;/strong&gt;: creates a merged table&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;No&lt;/strong&gt;: tables stay separate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Output&lt;/td&gt;
&lt;td&gt;A new table or extra columns&lt;/td&gt;
&lt;td&gt;A filter path between tables&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Controlled by&lt;/td&gt;
&lt;td&gt;Join kind (six types)&lt;/td&gt;
&lt;td&gt;Cardinality and filter direction&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;When applied&lt;/td&gt;
&lt;td&gt;At refresh / load&lt;/td&gt;
&lt;td&gt;At query time, when visuals and measures run&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best for&lt;/td&gt;
&lt;td&gt;Cleaning, enriching, flattening, checking&lt;/td&gt;
&lt;td&gt;Linking facts to dimensions&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;In short: join during preparation; relate during modelling.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  24. From Model to Visualisation
&lt;/h2&gt;

&lt;p&gt;Once data has been cleaned, modelled, related and calculated, reports can be built. In &lt;strong&gt;Report view&lt;/strong&gt;, a chart type is selected and the fields to plot are added. Visuals are interactive: selecting part of one visual filters the others, including KPIs, and even the components of a bar are interactive.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Visual&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Bar chart&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Comparing categories&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pie / Donut / Treemap&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Part-to-whole relationships; treemaps suit many categories&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Scatter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Relationship between two numeric variables&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Card&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Displaying a KPI or single headline value (typically a measure)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Map&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Geographic data (bubble, filled and shape maps)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Gauge / KPI&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Targets and comparison&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Slicer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Filtering by user selection&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These visuals depend on the earlier stages. The card shows a &lt;code&gt;CALCULATE&lt;/code&gt; measure (Section 7.4); the slicer filters through a relationship (Sections 17 and 19); chart categories come from clean dimension columns (Section 5); and the &lt;em&gt;Total Revenue all county&lt;/em&gt; card (Section 7.5) shows how &lt;code&gt;ALL&lt;/code&gt; makes a KPI ignore slicers deliberately.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc09wpbhiqy2t6i3kek9w.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc09wpbhiqy2t6i3kek9w.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  25. Publishing to Power BI Service
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Key terms
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;.PBIX:&lt;/strong&gt; the Power BI Desktop file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Semantic model:&lt;/strong&gt; the entire data ecosystem: tables, relationships and connections, measures, and the model itself.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Report:&lt;/strong&gt; the visuals, graphs and dashboards that report users read to evaluate the data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Workspace:&lt;/strong&gt; a collaborative area in Power BI Service where a team creates, manages and stores Power BI content.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Power BI Service:&lt;/strong&gt; the browser version of Power BI, used to create, share and consume content.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What publishing does
&lt;/h3&gt;

&lt;p&gt;Publishing sends the report and the semantic model from the &lt;code&gt;.pbix&lt;/code&gt; file to the selected workspace.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Power BI Desktop (.pbix)
          │
          ▼  Home → Publish → select destination
Power BI Service
          │
          ▼
      Workspace
          │
          ▼
Semantic model  +  Report
          │
          ▼
Sharing / Collaboration  (workspace roles and security)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The semantic model is the same model built in Model view, now hosted in the cloud, so earlier modelling decisions affect every report built on it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Steps
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Before publishing:&lt;/strong&gt; sign in to Power BI from the Desktop app, then sign in to Power BI Service online.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Create a workspace:&lt;/strong&gt; open the left pane → &lt;strong&gt;Workspaces&lt;/strong&gt; and complete the details (name, description, image, domain, Power BI Pro where external users need access, contact list).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Publish:&lt;/strong&gt; in Desktop, &lt;strong&gt;Home → Publish → select destination&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open the workspace and refresh&lt;/strong&gt; to see the report and semantic model.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Share:&lt;/strong&gt; subscriptions allow a particular report page to be shared with an intended person; a report with multiple pages can also be shared as a link.&lt;/li&gt;
&lt;/ol&gt;

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




&lt;h2&gt;
  
  
  26. Workspace Roles and Security
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Workspace roles
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Admin&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Controls the workspace and access&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Member&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Can collaborate and publish into the workspace&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Contributor&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Can create and change content, with limited access functions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Viewer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Can consume content without editing&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Exact permission lists should be confirmed against current Microsoft documentation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Row-level security (RLS)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Row-level security&lt;/strong&gt; controls which rows of data a user can see based on their assigned role, to keep data secure. Rules specify who needs access to what, and roles can be created before the report is shared and tested with &lt;strong&gt;View as&lt;/strong&gt;.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Define&lt;/strong&gt; roles and their DAX filter rules in Power BI Desktop (&lt;strong&gt;Modeling → Manage roles&lt;/strong&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Publish&lt;/strong&gt;, then &lt;strong&gt;assign users or groups&lt;/strong&gt; to each role in Power BI Service. A defined role is not enforced until users are assigned.&lt;/li&gt;
&lt;li&gt;RLS applies to &lt;strong&gt;Viewers&lt;/strong&gt;. Members of the &lt;strong&gt;Admin, Member and Contributor&lt;/strong&gt; roles have edit permission on the semantic model, so RLS does not restrict them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test&lt;/strong&gt; with &lt;em&gt;View as&lt;/em&gt; before sharing.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;RLS filters travel across relationships like any other filter and by default follow single direction, which is a further reason to keep filter directions simple.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqsaj93myot2xzrlclqo7.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqsaj93myot2xzrlclqo7.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  27. Recommended Power BI Model
&lt;/h2&gt;

&lt;p&gt;For a typical business intelligence project, a &lt;strong&gt;star schema&lt;/strong&gt; is the recommended design. The reasoning is that it fits how Power BI queries models and the types of questions BI projects ask, not that it is universally superior.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Criterion&lt;/th&gt;
&lt;th&gt;Flat table&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Star schema&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;Snowflake&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Query / report performance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Repeated text bloats wide tables&lt;/td&gt;
&lt;td&gt;Matches how Power BI visuals query the model; recommended by Microsoft&lt;/td&gt;
&lt;td&gt;Extra hops between tables&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;DAX simplicity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Simple at first; awkward as questions grow&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Simple:&lt;/strong&gt; measures on facts, slicers from dimensions&lt;/td&gt;
&lt;td&gt;More relationships to reason about&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Readability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Hard to tell what each column represents&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Clear:&lt;/strong&gt; facts in the centre, dimensions around&lt;/td&gt;
&lt;td&gt;Larger diagram&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Scalability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Poor&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Good:&lt;/strong&gt; add a dimension or fact&lt;/td&gt;
&lt;td&gt;Good, with added complexity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data redundancy&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;Lowest&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maintainability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Same value fixed in many rows&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Fix a description once&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Good for hierarchies; heavier to manage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ease of report creation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;One place for everything, but limited filtering&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Easy:&lt;/strong&gt; dimension fields for slicers and axes, fact fields for values&lt;/td&gt;
&lt;td&gt;Builders must understand the chain&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Filter propagation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Nothing to manage&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Predictable:&lt;/strong&gt; dimension → fact&lt;/td&gt;
&lt;td&gt;Passes through several tables&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Model complexity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Lowest initially&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Moderate&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Highest&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  When another design is appropriate
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Flat table:&lt;/strong&gt; a small, one-off analysis with one subject, where building dimensions costs more than it returns.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Snowflake:&lt;/strong&gt; when a sub-dimension is genuinely shared (for example, a county table used by both patients and clinics) or the source is already normalised and flattening is not worthwhile. Merging the sub-tables in Power Query to obtain a simpler star should be considered first.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Recommended relationship design
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;One fact table&lt;/strong&gt; at the centre, with a grain that can be stated in one sentence (for example, &lt;em&gt;one row per visit&lt;/em&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One dimension table per descriptive subject&lt;/strong&gt; (patient, doctor, department, date, location), each with a &lt;strong&gt;unique primary key&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Foreign keys in the fact table&lt;/strong&gt; matching those primary keys. Where no natural key exists, create an &lt;strong&gt;index column&lt;/strong&gt; and carry it into the fact table.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cardinality:&lt;/strong&gt; one-to-many (1:*) from each dimension to the fact table. Avoid many-to-many unless unavoidable, using a bridge table where needed, and consider merging one-to-one pairs into a single table.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Filter direction:&lt;/strong&gt; single, from dimension to fact. Use &lt;em&gt;Both&lt;/em&gt; only for a specific, understood reason, to avoid ambiguous paths.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Active relationships&lt;/strong&gt; on the main path; an inactive relationship only where a measure deliberately uses &lt;code&gt;USERELATIONSHIP&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Referential integrity checked in Power Query&lt;/strong&gt; using a right anti join (fact keys with no dimension match) before loading.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; DimDepartment   DimDoctor
        \          /
         \        /
 DimPatient ── FactVisit ── DimDate
   (1)──────────►(*)         (1)──►(*)      single-direction, 1:* from every dimension
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;(Illustrative design based on the hospital example, with a date dimension added.)&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fislk3pctockjfocbj02n.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fislk3pctockjfocbj02n.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
F&lt;/p&gt;

&lt;h2&gt;
  
  
  28. The Complete Workflow
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; 1. Understand the problem / question
              ↓
 2. Identify the data source
              ↓
 3. Import / connect data
              ↓
 4. Inspect the raw data
              ↓
 5. Clean and transform with Power Query
              ↓
 6. Understand the structure of the data
              ↓
 7. Build the data model
              ↓
 8. Create fact and dimension tables
              ↓
 9. Establish relationships
              ↓
10. Apply appropriate cardinality / filter direction
              ↓
11. Use DAX to calculate and analyse
              ↓
12. Create visualisations
              ↓
13. Build the report
              ↓
14. Publish to Power BI Service
              ↓
15. Share, secure and collaborate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;How the stages connect&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Steps 1–3:&lt;/strong&gt; The business question determines which data is needed and where it lives. Import brings a copy into Desktop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Steps 4–5:&lt;/strong&gt; Imported data is rarely analysis-ready. Data types, blanks, errors and duplicates are resolved in Power Query, with Applied Steps recording each action. Joins are available here for combining or checking tables.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Steps 6–8:&lt;/strong&gt; Clean data is organised: measurements into a fact table with a clear grain, descriptions into dimension tables, usually in a star schema.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Steps 9–10:&lt;/strong&gt; Primary keys in dimensions link to foreign keys in the fact table through one-to-many, single-direction relationships. The tables then work as one model without being merged.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Step 11:&lt;/strong&gt; DAX operates on top of the model. &lt;code&gt;CALCULATE&lt;/code&gt;, &lt;code&gt;FILTER&lt;/code&gt; and &lt;code&gt;ALL&lt;/code&gt; depend on filters moving through relationships, so the better the model, the simpler the DAX.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Steps 12–13:&lt;/strong&gt; Visuals present measures and fields and respond to the filters defined in the model.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Steps 14–15:&lt;/strong&gt; The &lt;code&gt;.pbix&lt;/code&gt; is published to a workspace as a semantic model and report, with roles and RLS governing who can do and see what.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Power BI is best understood as a chain of dependent practices rather than a set of separate features. Data enters through connections to sources such as Excel, CSV, SQL and the web. Its quality must be established in Power Query before it can be trusted. DAX then turns clean data into answers, but its effectiveness depends on a well-structured model: fact tables with a defined grain, dimension tables with unique keys, one-to-many relationships and carefully chosen filter directions. Joins and relationships are complementary tools applied at different stages: joins combine data while it is being prepared, and relationships connect tables once they are loaded. Reports, dashboards and publishing sit at the end of the chain, so their reliability reflects the care taken in every earlier stage.&lt;/p&gt;

&lt;p&gt;For most business intelligence projects, a star schema built on clean, correctly typed data offers the best balance of performance, simplicity, readability and maintainability.&lt;/p&gt;

</description>
      <category>analytics</category>
      <category>data</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Excel Jumia</title>
      <dc:creator>Velma Ketra Lukaya</dc:creator>
      <pubDate>Fri, 02 Oct 2026 10:13:30 +0000</pubDate>
      <link>https://dev.to/velma_ketralukaya_b0ae37/excel-jumia-2mc8</link>
      <guid>https://dev.to/velma_ketralukaya_b0ae37/excel-jumia-2mc8</guid>
      <description></description>
    </item>
    <item>
      <title>Getting started with MS Excel for data analytics: From basics to data cleaning</title>
      <dc:creator>Velma Ketra Lukaya</dc:creator>
      <pubDate>Wed, 09 Sep 2026 18:34:50 +0000</pubDate>
      <link>https://dev.to/velma_ketralukaya_b0ae37/getting-started-with-ms-excel-for-data-analytics-from-basics-to-data-cleaning-3p10</link>
      <guid>https://dev.to/velma_ketralukaya_b0ae37/getting-started-with-ms-excel-for-data-analytics-from-basics-to-data-cleaning-3p10</guid>
      <description>&lt;h2&gt;
  
  
  Microsoft Excel from Beginner to Data Analysis: What Each Part Does, When to Use It, and How to Find It
&lt;/h2&gt;

&lt;p&gt;This guide has two purposes.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;An introduction to Excel itself: the interface, the ribbons, the formula bar, formatting, formulas, charts, PivotTables, and dashboards. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Process to take raw data and turn it into something trustworthy and visual: &lt;strong&gt;clean it, organize it, calculate on it, analyze it, display it and report it.&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That second thread matters because a beautiful dashboard built on messy data is still a bad analysis. So as we move through Excel's tools, we'll keep returning to the question: &lt;em&gt;where does this fit in the data → clean → calculate → analyze → visualize → report pipeline?&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Getting Started with Excel
&lt;/h2&gt;

&lt;p&gt;Microsoft Excel is a spreadsheet application used to work with data. You can use it to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enter and store data&lt;/li&gt;
&lt;li&gt;Organize datasets&lt;/li&gt;
&lt;li&gt;Clean messy data&lt;/li&gt;
&lt;li&gt;Perform calculations&lt;/li&gt;
&lt;li&gt;Analyze information&lt;/li&gt;
&lt;li&gt;Create charts&lt;/li&gt;
&lt;li&gt;Build PivotTables&lt;/li&gt;
&lt;li&gt;Create reports and dashboards&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A useful mental model for the whole journey is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Data → Clean → Calculate → Analyze → Visualize → Report
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In practice, data is retrieved from an engineer, a system, another team, as raw figures, text, and numbers. Your job as the analyst is to clean it, decide what it means, and deliver insight from it. Before you can analyze anything, the data needs a reasonable structure and quality. Data cleaning is specifically about working on the &lt;strong&gt;quality and structure&lt;/strong&gt; of the data &lt;em&gt;before&lt;/em&gt; analysis begins&lt;/p&gt;

&lt;h3&gt;
  
  
  Opening Excel
&lt;/h3&gt;

&lt;p&gt;When you open Excel, you'll usually land on a start screen with options such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Blank Workbook&lt;/li&gt;
&lt;li&gt;Recent workbooks&lt;/li&gt;
&lt;li&gt;Templates&lt;/li&gt;
&lt;li&gt;Options for opening existing files&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How to get there&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open Microsoft Excel.&lt;/li&gt;
&lt;li&gt;From the start screen, select &lt;strong&gt;Blank Workbook&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You now have a new Excel workbook.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbj6icrxtoyj7o5xah3ak.jpg" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbj6icrxtoyj7o5xah3ak.jpg" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Understanding the Excel Interface
&lt;/h2&gt;

&lt;p&gt;Before entering data, it helps to know what you're looking at. A workbook is made up of several major areas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Title Bar&lt;/li&gt;
&lt;li&gt;Quick Access Toolbar&lt;/li&gt;
&lt;li&gt;Ribbon&lt;/li&gt;
&lt;li&gt;Name Box&lt;/li&gt;
&lt;li&gt;Formula Bar&lt;/li&gt;
&lt;li&gt;Worksheet (columns, rows, cells)&lt;/li&gt;
&lt;li&gt;Sheet tabs&lt;/li&gt;
&lt;li&gt;Status Bar&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2.1 Title Bar
&lt;/h3&gt;

&lt;p&gt;Sits at the top of the window and shows the name of the currently open workbook for example, &lt;code&gt;Book1 - Excel&lt;/code&gt;. Once you save, the title updates to whatever you named the file. It tells you at a glance which workbook and which file is currently active.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.2 Quick Access Toolbar
&lt;/h3&gt;

&lt;p&gt;Shortcuts to commonly used commands (Save, Undo, Redo, etc.), so you don't have to dig through the Ribbon for actions you use constantly.&lt;/p&gt;

&lt;p&gt;[: Excel interface showing the Title Bar and Quick Access Toolbar]&lt;/p&gt;

&lt;h2&gt;
  
  
  3. The Ribbon
&lt;/h2&gt;

&lt;p&gt;The Ribbon is the area that holds all of Excel's tools and toolbars, organized into tabs. Each tab groups related commands together.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tab&lt;/th&gt;
&lt;th&gt;Main Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Home&lt;/td&gt;
&lt;td&gt;Formatting and everyday editing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Insert&lt;/td&gt;
&lt;td&gt;Tables, charts, PivotTables, shapes and other objects&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Page Layout&lt;/td&gt;
&lt;td&gt;Page and printing settings&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Formulas&lt;/td&gt;
&lt;td&gt;Functions and formula tools&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data&lt;/td&gt;
&lt;td&gt;Sorting, filtering, validation, cleaning and analysis&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Review&lt;/td&gt;
&lt;td&gt;Comments, protection and reviewing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;View&lt;/td&gt;
&lt;td&gt;How the workbook is displayed&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  3.1 Home Tab
&lt;/h3&gt;

&lt;p&gt;It holds tools for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Font, font size, bold, italic, underline, font colour&lt;/li&gt;
&lt;li&gt;Fill colour, borders&lt;/li&gt;
&lt;li&gt;Alignment, Wrap Text, Merge &amp;amp; Center&lt;/li&gt;
&lt;li&gt;Number formatting&lt;/li&gt;
&lt;li&gt;Conditional Formatting&lt;/li&gt;
&lt;li&gt;Sorting and filtering&lt;/li&gt;
&lt;li&gt;Copy and paste&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How to get there:&lt;/strong&gt; &lt;code&gt;Home → choose the relevant tool&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Entering and Formatting Data
&lt;/h2&gt;

&lt;h3&gt;
  
  
  4.1 Cells
&lt;/h3&gt;

&lt;p&gt;An Excel worksheet is made of cells which are the intersection of a column and a row. Columns are letters (A, B, C…), rows are numbers (1, 2, 3…). The first cell is &lt;code&gt;A1&lt;/code&gt;. The cell in column C, row 5 is &lt;code&gt;C5&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  4.2 What is a Cell Reference?
&lt;/h3&gt;

&lt;p&gt;A cell reference tells Excel exactly where a piece of information lives. &lt;code&gt;A1&lt;/code&gt; means column A, row 1. You use references inside formulas:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=A1+B1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This tells Excel to take the value in A1 and add the value in B1.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Rows, Columns and Ranges
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Rows&lt;/strong&gt; run horizontally and are numbered. A row commonly represents one record-one employee, one transaction, one observation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Columns&lt;/strong&gt; run vertically and are lettered. A column commonly represents one variable or field.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Employee ID&lt;/th&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;Department&lt;/th&gt;
&lt;th&gt;Salary&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1001&lt;/td&gt;
&lt;td&gt;Jane&lt;/td&gt;
&lt;td&gt;Finance&lt;/td&gt;
&lt;td&gt;80,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1002&lt;/td&gt;
&lt;td&gt;John&lt;/td&gt;
&lt;td&gt;HR&lt;/td&gt;
&lt;td&gt;70,000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Each row is an employee; each column is a field describing that employee.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ranges&lt;/strong&gt; are groups of cells. &lt;code&gt;A1:A10&lt;/code&gt; means cells A1 through A10. &lt;code&gt;A1:D10&lt;/code&gt; is a rectangular range from A1 to D10. Ranges matter because most Excel functions operate on them:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=SUM(A1:A10)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  6. Worksheets and Workbooks
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;workbook&lt;/strong&gt; is the Excel file itself e.g., &lt;code&gt;Employee Analysis.xlsx&lt;/code&gt;. A workbook can contain multiple &lt;strong&gt;worksheets&lt;/strong&gt;, which you can think of as individual pages inside it — for example: &lt;code&gt;Employee Data&lt;/code&gt;, &lt;code&gt;Calculations&lt;/code&gt;, &lt;code&gt;PivotTable&lt;/code&gt;, &lt;code&gt;Dashboard&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Renaming a worksheet:&lt;/strong&gt; Right-click the sheet tab → Rename (or double-click the tab).&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Basic File Operations
&lt;/h2&gt;

&lt;h3&gt;
  
  
  7.1 Save
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;File → Save&lt;/code&gt;, or &lt;code&gt;Ctrl + S&lt;/code&gt; on Windows.&lt;/p&gt;

&lt;h3&gt;
  
  
  7.2 Save As
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;File → Save As&lt;/code&gt; — creates a new copy or saves under a different name/format. Common file types:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;.xlsx&lt;/code&gt; — standard Excel workbook&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;.xls&lt;/code&gt; — older Excel format&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;.csv&lt;/code&gt; — comma-separated values&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A CSV is fine for simple tabular data, but it doesn't preserve Excel-specific features like multiple worksheets, formatting, PivotTables, or charts.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Formatting Your Data
&lt;/h2&gt;

&lt;p&gt;Formatting changes how data &lt;em&gt;looks&lt;/em&gt; without changing its underlying value. Good formatting makes a spreadsheet easier to read and easier to trust.&lt;/p&gt;

&lt;h3&gt;
  
  
  8.1 Font
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;Home → Font&lt;/code&gt; — type, size, bold, italic, underline.&lt;/p&gt;

&lt;h3&gt;
  
  
  8.2 Font Colour
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;Home → Font Color&lt;/code&gt; — useful for headers, warnings, important values, titles.&lt;/p&gt;

&lt;h3&gt;
  
  
  8.3 Fill Colour
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;Home → Fill Color&lt;/code&gt; — great for headers, KPI cards, and highlighting.&lt;/p&gt;

&lt;h3&gt;
  
  
  8.4 Borders
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;Home → Borders&lt;/code&gt; — bottom, top, left/right, all, or outside borders make table structure easier to see.&lt;/p&gt;

&lt;h3&gt;
  
  
  8.5 Alignment
&lt;/h3&gt;

&lt;p&gt;Left, centre, right, top, middle, bottom. Text is conventionally left-aligned; numbers and dates right-aligned.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A useful diagnostic:&lt;/strong&gt; if a column of numbers is sitting left-aligned instead of right-aligned, that's often a sign Excel is treating them as &lt;em&gt;text&lt;/em&gt;, not numbers which will silently break SUM, AVERAGE, and other calculations on that column. Checking that a column's alignment is consistent throughout is a quick way to catch a data-type problem before it costs you a wrong total.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  8.6 Wrap Text
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;Home → Alignment → Wrap Text&lt;/code&gt; makes long text wrap onto multiple lines within the same cell.&lt;/p&gt;

&lt;h3&gt;
  
  
  8.7 Merge &amp;amp; Center
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;Home → Merge &amp;amp; Center&lt;/code&gt; combines cells into one and centres the content — handy for titles like &lt;strong&gt;EMPLOYEE SALARY REPORT&lt;/strong&gt;. Avoid merged cells inside your raw data table, though — they interfere with sorting, filtering, and analysis.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fl41zfuv5u9nc3lqo6lxp.jpg" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fl41zfuv5u9nc3lqo6lxp.jpg" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  8.8 Number Formatting
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;Home → Number&lt;/code&gt; display &lt;code&gt;10000&lt;/code&gt; as &lt;code&gt;10,000&lt;/code&gt;, &lt;code&gt;10,000.00&lt;/code&gt;, or as currency (e.g., &lt;code&gt;KSh 10,000&lt;/code&gt;). You can also format as percentage, date, or time.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  9. AutoFill and Flash Fill
&lt;/h2&gt;

&lt;h3&gt;
  
  
  AutoFill
&lt;/h3&gt;

&lt;p&gt;Extends a pattern (January, February, March…) or copies a formula down a column. Enter the first value, select the cell, grab the small square at the bottom-right corner (the &lt;strong&gt;fill handle&lt;/strong&gt;), and drag.&lt;/p&gt;

&lt;h3&gt;
  
  
  Flash Fill
&lt;/h3&gt;

&lt;p&gt;Recognizes a pattern in your data and completes the rest automatically. For example, if a column has "John Smith", "Jane Doe", "Peter Kamau" and you start typing just the first names in the next column, Flash Fill can complete the pattern for you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to get there:&lt;/strong&gt; &lt;code&gt;Data → Flash Fill&lt;/code&gt;, or &lt;code&gt;Ctrl + E&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  10. The Formula Bar
&lt;/h2&gt;

&lt;p&gt;The Formula Bar shows the actual contents of the currently selected cell. If C2 contains &lt;code&gt;=A2+B2&lt;/code&gt;, the Formula Bar shows that formula not the number it evaluates to. This is essential for viewing and editing long formulas, checking what's really stored in a cell, and telling a formula apart from its displayed result.&lt;/p&gt;

&lt;h2&gt;
  
  
  11. Writing Your First Formula
&lt;/h2&gt;

&lt;p&gt;Every formula starts with &lt;code&gt;=&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=10+20   → 30
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The real power comes from cell references:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;A1 = 10
B1 = 20
=A1+B1   → 30
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  12. Excel Arithmetic Operators
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Operator&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Addition&lt;/td&gt;
&lt;td&gt;&lt;code&gt;=A1+B1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Subtraction&lt;/td&gt;
&lt;td&gt;&lt;code&gt;=A1-B1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;*&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Multiplication&lt;/td&gt;
&lt;td&gt;&lt;code&gt;=A1*B1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Division&lt;/td&gt;
&lt;td&gt;&lt;code&gt;=A1/B1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;^&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Exponent&lt;/td&gt;
&lt;td&gt;&lt;code&gt;=A1^2&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;^&lt;/code&gt; raises a number to the power of something — &lt;code&gt;=10^3&lt;/code&gt; means 10 raised to the power of 3.&lt;/p&gt;

&lt;h2&gt;
  
  
  13. Basic Excel Functions
&lt;/h2&gt;

&lt;p&gt;A function is a built-in Excel formula designed for a specific task. Excel's basic functions split naturally into two families: &lt;strong&gt;aggregate functions&lt;/strong&gt;, which combine numbers into a single computed value, and &lt;strong&gt;statistical/counting functions&lt;/strong&gt;, which tell you something about the shape or completeness of your data.&lt;/p&gt;

&lt;h3&gt;
  
  
  Aggregate functions
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;SUM&lt;/strong&gt;— adds values.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=SUM(A2:A10)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use for total sales, total salary, total expenses, total marks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AVERAGE&lt;/strong&gt;-the mean.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=AVERAGE(A2:A10)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;MEDIAN&lt;/strong&gt;- the middle value when the data is sorted. Unlike the average, the median isn't dragged around by extreme values, which makes it a better "typical value" when a dataset has outliers.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=MEDIAN(A2:A10)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;MODE&lt;/strong&gt;- the most frequently occurring value.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=MODE.SNGL(A2:A10)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;MIN&lt;/strong&gt; / &lt;strong&gt;MAX&lt;/strong&gt; — smallest / largest value in a range.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=MIN(A2:A10)
=MAX(A2:A10)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;PRODUCT&lt;/strong&gt;— multiplies a range of values.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=PRODUCT(A2:A5)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;POWER&lt;/strong&gt;— raises a number to a power (same idea as &lt;code&gt;^&lt;/code&gt;).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=POWER(10,3)   → 1000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;SQRT&lt;/strong&gt;— square root.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=SQRT(25)   → 5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Statistical / counting functions
&lt;/h3&gt;

&lt;p&gt;These are especially useful for checking the &lt;em&gt;completeness&lt;/em&gt; of a dataset before you analyze it:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;COUNT&lt;/strong&gt;— counts cells containing numbers only.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=COUNT(A2:A10)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;COUNTA&lt;/strong&gt;— counts all non-blank cells (text and numbers).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=COUNTA(A2:A10)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;COUNTBLANK&lt;/strong&gt;— counts only blank cells.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=COUNTBLANK(A2:A10)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The distinction between COUNT, COUNTA, and COUNTBLANK matters: running all three on the same column is a fast way to spot missing data before it silently distorts an analysis.&lt;/p&gt;

&lt;h2&gt;
  
  
  14. Relative and Absolute Cell References
&lt;/h2&gt;

&lt;p&gt;Write &lt;code&gt;=A2*B2&lt;/code&gt; and drag it down, and Excel automatically adjusts it to &lt;code&gt;=A3*B3&lt;/code&gt;, &lt;code&gt;=A4*B4&lt;/code&gt;, and so on. These are &lt;strong&gt;relative references&lt;/strong&gt; — they shift with the formula.&lt;/p&gt;

&lt;p&gt;Sometimes you want a reference to stay fixed. Use &lt;code&gt;$&lt;/code&gt; to lock it an &lt;strong&gt;absolute reference&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=$A$1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This always points to A1, no matter where the formula is copied. For example, if A1 holds a tax rate of 16%:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=B2*$A$1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Copied down the column, &lt;code&gt;$A$1&lt;/code&gt; stays locked while &lt;code&gt;B2&lt;/code&gt; still adjusts to &lt;code&gt;B3&lt;/code&gt;, &lt;code&gt;B4&lt;/code&gt;, etc.&lt;/p&gt;

&lt;h2&gt;
  
  
  15. Intermediate Functions
&lt;/h2&gt;

&lt;p&gt;Once basic formulas feel comfortable, you can start asking Excel to make decisions and find information across your dataset the core of real analysis.&lt;/p&gt;

&lt;h2&gt;
  
  
  16. Conditional (Aggregate) Functions
&lt;/h2&gt;

&lt;p&gt;These calculate something based on one or more conditions: &lt;code&gt;COUNTIF&lt;/code&gt;, &lt;code&gt;COUNTIFS&lt;/code&gt;, &lt;code&gt;SUMIF&lt;/code&gt;, &lt;code&gt;SUMIFS&lt;/code&gt;, &lt;code&gt;AVERAGEIF&lt;/code&gt;, &lt;code&gt;AVERAGEIFS&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;COUNTIF&lt;/strong&gt; — counts cells matching one condition.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=COUNTIF(B2:B100,"Female")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;"How many female employees are in the dataset?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;COUNTIFS&lt;/strong&gt; — counts cells matching multiple conditions (which can span different columns).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=COUNTIFS(B2:B100,"Female",C2:C100,"Finance")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;"How many female employees work in Finance?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SUMIF&lt;/strong&gt; — sums values based on one condition.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=SUMIF(B2:B100,"Finance",D2:D100)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;"Total salary paid to employees in Finance."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SUMIFS&lt;/strong&gt; — sums with multiple conditions.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=SUMIFS(D2:D100,B2:B100,"Finance",C2:C100,"Female")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;AVERAGEIF / AVERAGEIFS&lt;/strong&gt;- average based on one or more conditions.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=AVERAGEIF(B2:B100,"Finance",D2:D100)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;A quick way to remember the argument order: SUMIF and AVERAGEIF start with the condition range, then the criteria, then the range to calculate. SUMIFS and AVERAGEIFS flip that they start with the range to calculate, followed by all of the condition range/criteria pairs.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  17. Logical Functions
&lt;/h2&gt;

&lt;p&gt;Logical functions let Excel automate decision-making: determining bonuses, matching customer records, checking eligibility, or classifying values into bands like High, Medium, and Low.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;IF&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=IF(logical_test, value_if_true, value_if_false)
=IF(B2&amp;gt;=50,"Pass","Fail")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;AND&lt;/strong&gt; — TRUE only if &lt;em&gt;every&lt;/em&gt; condition is true. Reach for AND when you're combining conditions &lt;strong&gt;across different columns&lt;/strong&gt; that must &lt;em&gt;all&lt;/em&gt; hold e.g., married, male, &lt;em&gt;and&lt;/em&gt; over 50.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=AND(A2&amp;gt;50,B2&amp;gt;50)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;OR&lt;/strong&gt; — TRUE if &lt;em&gt;at least one&lt;/em&gt; condition is true. Reach for OR when you're checking multiple possible values &lt;strong&gt;within the same column&lt;/strong&gt; e.g., department is Finance &lt;em&gt;or&lt;/em&gt; HR.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=OR(A2="Finance",A2="HR")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Combining IF with AND/OR&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=IF(AND(B2&amp;gt;=50,C2&amp;gt;=50),"Pass","Fail")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;"Pass only if both B2 and C2 are at least 50."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nested IF&lt;/strong&gt; — chains multiple conditions to build categories:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=IF(B2&amp;gt;=80,"High",IF(B2&amp;gt;=50,"Medium","Low"))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;80+ → High&lt;/li&gt;
&lt;li&gt;50–79 → Medium&lt;/li&gt;
&lt;li&gt;Below 50 → Low&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A nested IF is read from the top down: Excel checks the first condition, and if it's false, falls through to the next &lt;code&gt;IF&lt;/code&gt; inside it. This matters when you're deciding &lt;em&gt;where&lt;/em&gt; a blank value should land, put the &lt;code&gt;ISBLANK&lt;/code&gt; check first, so blanks get routed to their own outcome instead of silently falling into the last category.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ISBLANK&lt;/strong&gt; — checks whether a cell is empty. Useful for handling incomplete datasets, often combined with IF:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=IF(ISBLANK(A2), "No data", IF(A2&amp;gt;=50,"Pass","Fail"))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  18. Date Functions
&lt;/h2&gt;

&lt;p&gt;Dates are everywhere in real-world datasets, and they're a frequent source of cleaning headaches.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TODAY()&lt;/strong&gt; — today's date. Useful for tracking deadlines, calculating age, flagging overdue tasks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOW()&lt;/strong&gt; — current date and time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;YEAR() / MONTH() / DAY()&lt;/strong&gt; — extract the year, month, or day from a date.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DATEDIF(start, end, "unit")&lt;/strong&gt; — the difference between two dates, e.g. &lt;code&gt;=DATEDIF(A2,B2,"Y")&lt;/code&gt; for complete years.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NETWORKDAYS(start, end)&lt;/strong&gt; — working days between two dates, automatically &lt;strong&gt;excluding weekends&lt;/strong&gt;. Useful for project timelines, employee working days, turnaround time.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Dates are also one of the most common places data quality breaks down. Watch for hire-date entries like &lt;code&gt;30/02/2019&lt;/code&gt; (there's no February 30th) or &lt;code&gt;2020/13/05&lt;/code&gt; (there's no 13th month) &lt;br&gt;
These are invalid dates that need to be fixed at the source before any date function can be trusted on that column.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  19. Text Functions
&lt;/h2&gt;

&lt;p&gt;Text functions are essential for cleaning datasets. They apply specifically to text-type data, and are typically used to &lt;strong&gt;standardize text&lt;/strong&gt;, &lt;strong&gt;remove extra spaces&lt;/strong&gt;, &lt;strong&gt;extract part of a string&lt;/strong&gt;, or &lt;strong&gt;combine text&lt;/strong&gt; from multiple cells.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;UPPER / LOWER / PROPER&lt;/strong&gt; — change case.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=UPPER(A2)    "nairobi" → "NAIROBI"
=PROPER(A2)   "john kamau" → "John Kamau"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;TRIM&lt;/strong&gt; — removes unnecessary/extra spaces, especially useful on imported data.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=TRIM(A2)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;LEFT / RIGHT&lt;/strong&gt; — extract characters from the left or right side of a string.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=LEFT(A2,3)
=RIGHT(A2,3)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;LEN&lt;/strong&gt; — counts the number of characters in a string. Handy for calculating the length of a substring before extracting it, or for spotting entries that are suspiciously short or long.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=LEN(A2)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;MID&lt;/strong&gt; — extracts characters from the middle of a string. If A2 contains &lt;code&gt;EMP-10545&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=MID(A2,5,5)   → "10545"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;FIND&lt;/strong&gt; — returns the position of one piece of text within another.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CONCAT&lt;/strong&gt; — combines text from multiple cells.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=CONCAT(A2," ",B2)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If A2 = "John" and B2 = "Kamau", the result is "John Kamau".&lt;/p&gt;

&lt;h3&gt;
  
  
  A few real applications
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Phone numbers with country codes:&lt;/strong&gt; use &lt;code&gt;LEFT&lt;/code&gt; to pull out a country code (e.g. &lt;code&gt;+254&lt;/code&gt;), and combine it with a logical function (&lt;code&gt;IF&lt;/code&gt;) to assign a country name based on the code you found.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Employee IDs like &lt;code&gt;EMP-10945&lt;/code&gt;:&lt;/strong&gt; use &lt;code&gt;MID&lt;/code&gt; to pull the numeric part out on its own.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generating email addresses:&lt;/strong&gt; combine &lt;code&gt;LOWER&lt;/code&gt; and &lt;code&gt;CONCAT&lt;/code&gt; to build a standardized address from a first name and last name, e.g.:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  =LOWER(CONCAT(A2,B2,"@company.com"))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is a common cleaning/standardization exercise: taking two separate text fields and deriving a consistent third field from them.&lt;/p&gt;

&lt;h2&gt;
  
  
  20. Lookup Functions
&lt;/h2&gt;

&lt;p&gt;Lookup functions let Excel search for something and pull back related information essential once your data is spread across multiple tables.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;VLOOKUP&lt;/strong&gt; — searches for a value in the &lt;strong&gt;first column&lt;/strong&gt; of a range and returns a value from another column in that same range.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=VLOOKUP(lookup_value, table_array, column_index, FALSE)
=VLOOKUP(A2,$F$2:$I$100,2,FALSE)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two things to keep in mind: the &lt;code&gt;column_index&lt;/code&gt; is a &lt;strong&gt;number&lt;/strong&gt;, not a column letter, and the lookup value &lt;strong&gt;must&lt;/strong&gt; be located in the first column of the range you're searching &lt;br&gt;
That's VLOOKUP's main limitation.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Example:&lt;/em&gt; Table 1 has Employee ID → Name. Table 2 has Employee ID → Salary. VLOOKUP lets you pull salary into Table 1 using Employee ID as the shared key.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;XLOOKUP&lt;/strong&gt; — a more flexible successor available in newer Excel versions. It can search in either direction and doesn't require the lookup column to be first it can traverse data horizontally without VLOOKUP's positional restriction.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=XLOOKUP(what_you_are_looking_for, where_to_search, what_to_return)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  HLOOKUP
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;HLOOKUP (Horizontal Lookup)&lt;/strong&gt; searches for a value across the &lt;strong&gt;top row&lt;/strong&gt; of a table and returns a corresponding value from a specified row below it. It is useful when data is arranged &lt;strong&gt;horizontally rather than vertically&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;The basic syntax is&lt;br&gt;
 &lt;code&gt;=HLOOKUP(lookup_value, table_array, row_index_num, [range_lookup])&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;INDEX + MATCH&lt;/strong&gt; — a two-function combination that does what VLOOKUP does, without the "must be in the first column" restriction. &lt;code&gt;MATCH&lt;/code&gt; finds the &lt;em&gt;position&lt;/em&gt; of what you're looking for; &lt;code&gt;INDEX&lt;/code&gt; returns the value sitting at that position.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=INDEX(what_you_want_to_return, MATCH(lookup_value, lookup_array, 0))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Because INDEX and MATCH are separate, the lookup value doesn't need to be in the first column of anything, you just point MATCH at wherever it lives.&lt;/p&gt;

&lt;h2&gt;
  
  
  21. Organizing Your Data
&lt;/h2&gt;

&lt;p&gt;Once you can calculate and manipulate values, the next step is making sure the &lt;em&gt;dataset itself&lt;/em&gt; is properly organized, this is where data cleaning and structure become the priority. Common problems to watch for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Missing fields&lt;/li&gt;
&lt;li&gt;Mixed data types (e.g. numbers stored as text)&lt;/li&gt;
&lt;li&gt;Inconsistent labeling (e.g. "IT" and "I.T" treated as different categories)&lt;/li&gt;
&lt;li&gt;Inconsistent capitalization or letter case&lt;/li&gt;
&lt;li&gt;Inconsistent date patterns, or outright invalid dates&lt;/li&gt;
&lt;li&gt;Pseudoblanks&lt;/li&gt;
&lt;li&gt;Duplicate records&lt;/li&gt;
&lt;li&gt;Outliers&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  22. Data Cleaning
&lt;/h2&gt;

&lt;p&gt;Data cleaning means preparing data so it can be analyzed reliably. Imagine a Department column containing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Finance
finance
FINANCE
Fin.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Excel treats these as four &lt;em&gt;different&lt;/em&gt; values unless you standardize them first.&lt;/p&gt;

&lt;h3&gt;
  
  
  A suggested cleaning order
&lt;/h3&gt;

&lt;p&gt;There's no single required sequence, but working through checks in roughly this order catches problems before they compound:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Cell size and display&lt;/strong&gt; — column widths, and freezing header rows/columns so you don't lose context while scrolling.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data type consistency&lt;/strong&gt; — check that a column is entirely numbers, entirely text, or entirely dates. A column that "looks" numeric but has left-aligned entries mixed in with right-aligned ones usually has a hidden text/number mismatch.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sort&lt;/strong&gt; — sorting a column often surfaces inconsistent entries, blanks, or oddities that were easy to miss row by row.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Find and Replace&lt;/strong&gt; — start with the easiest cases (often numerical or clearly-patterned text), confirm your changes by re-sorting afterward, and make sure you're being column-specific rather than replacing across the whole sheet by accident.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Remove duplicates&lt;/strong&gt; — after the above steps, so you're not duplicating already-flawed data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Conditional formatting&lt;/strong&gt; — use it last, as a visual QA pass to spot what's left.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  22.1 Missing Values
&lt;/h3&gt;

&lt;p&gt;Possible approaches:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Delete the entire row, if a large amount of important data for that record is missing.&lt;/li&gt;
&lt;li&gt;Leave the cell blank.&lt;/li&gt;
&lt;li&gt;Replace it with a clear label like "Unknown."&lt;/li&gt;
&lt;li&gt;Fill it using an appropriate statistic: mean, median, or mode, when that's contextually reasonable (for example, filling a missing HR-related field with the mode if you're confident about the typical value for that group).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The right choice depends on the situation, not a fixed rule Always ask what a blank &lt;em&gt;means&lt;/em&gt; in that specific column before deciding how to treat it.&lt;/p&gt;

&lt;h3&gt;
  
  
  22.2 Pseudoblanks
&lt;/h3&gt;

&lt;p&gt;A cell isn't always technically empty even when it represents missing information. Watch for:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;None
N/A
Unknown
-
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These &lt;strong&gt;pseudoblanks&lt;/strong&gt; should generally be converted to one consistent representation (e.g., "Unknown") so they're treated the same way during analysis.&lt;/p&gt;

&lt;p&gt;That said, be careful: in some datasets a genuinely blank cell and a cell marked "None" don't mean the same thing. For example, in a training-attendance column, a blank might mean "no data collected," while "None" might specifically mean "attended zero trainings" which is a real, meaningful value.&lt;br&gt;
Don't collapse the two automatically; check what each one is actually representing first.&lt;/p&gt;
&lt;h3&gt;
  
  
  22.3 Find and Replace
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;Home → Find &amp;amp; Select → Replace&lt;/code&gt;, or &lt;code&gt;Ctrl + H&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Use case: your dataset contains &lt;code&gt;Nairobi&lt;/code&gt;, &lt;code&gt;NBI&lt;/code&gt;, &lt;code&gt;Nrb&lt;/code&gt; referring to the same place&lt;br&gt;
Find and Replace lets you standardize them quickly. As above, do this column by column and re-check your work rather than assuming a global find-and-replace is safe.&lt;/p&gt;
&lt;h3&gt;
  
  
  22.4 Removing Duplicates
&lt;/h3&gt;

&lt;p&gt;Duplicate records distort totals, averages, and counts, but don't delete every row that merely &lt;em&gt;looks&lt;/em&gt; similar. First decide which field should actually be unique: Employee ID, phone number, email, patient ID, etc.&lt;/p&gt;

&lt;p&gt;A useful QA step before deleting anything: use &lt;strong&gt;Conditional Formatting&lt;/strong&gt; to highlight duplicates based on that unique identifier first (e.g., duplicate phone numbers or duplicate Employee IDs), then look at what's flagged.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If &lt;em&gt;every&lt;/em&gt; field in the flagged rows matches, it's a true duplicate hence safe to delete.&lt;/li&gt;
&lt;li&gt;If only the unique identifier matches but other fields differ, investigate before deleting, it may be a genuine data-entry issue rather than a duplicate.
Once you've resolved it, filter to confirm the duplicates are gone, and clear the conditional formatting rule so it doesn't linger and confuse the next person to open the file.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How to actually remove duplicates:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select your dataset.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Data → Remove Duplicates&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Choose the column(s) that determine uniqueness.&lt;/li&gt;
&lt;li&gt;Click OK.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;An outlier is a value unusually different from the rest of the data. If employee ages are &lt;code&gt;24, 27, 31, 29, 26, 4&lt;/code&gt; that &lt;code&gt;4&lt;/code&gt; shouldn't be deleted immediately. It could be a data entry error, a genuine (if unusual) observation, or a special case. &lt;strong&gt;Investigate before ruling it out&lt;/strong&gt;, without changing the data itself in the process of checking.&lt;/p&gt;

&lt;p&gt;This is also where &lt;strong&gt;central tendency&lt;/strong&gt; measures earn their keep: the mean is pulled toward outliers, but the median is largely unaffected by them, which is why median is often the safer "typical value" to report alongside, or instead of, the mean when a dataset has extreme values.&lt;/p&gt;
&lt;h2&gt;
  
  
  23. Conditional Formatting
&lt;/h2&gt;

&lt;p&gt;Conditional Formatting changes how cells look based on defined conditions &lt;strong&gt;without changing the underlying data itself&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to get there:&lt;/strong&gt; &lt;code&gt;Home → Conditional Formatting&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Highlight Cells Rules&lt;/strong&gt; — greater than, less than, equal to, between (inclusive of the borderline numbers), contains specific text or a subset of a word.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Top/Bottom Rules&lt;/strong&gt; — top 10, bottom 10, top %, bottom %, or a top-N like "top 5 earners."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Colour Scales&lt;/strong&gt; — apply a gradient of colour based on magnitude, e.g. a 0–10 scale shading from white toward dark green as values increase.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data Bars&lt;/strong&gt; — an in-cell bar sized to the value.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Conditional formatting is particularly good for spotting patterns, high/low values, missing information, and potential problems at a glance for example, quickly seeing the top 3 earners in a particular age group in a large dataset.&lt;/p&gt;
&lt;h2&gt;
  
  
  24. Sorting Data
&lt;/h2&gt;

&lt;p&gt;Sorting rearranges data by a chosen variable: text (A→Z or Z→A), numbers (smallest→largest or reverse), or dates (oldest→newest or reverse).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to get there:&lt;/strong&gt; &lt;code&gt;Data → Sort&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You can also perform &lt;strong&gt;multi-level sorting&lt;/strong&gt; where one sort is applied after another. For example: sort by Department, then within each department, sort by Gender.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8qzpa3605rq13o0ht3fw.JPG" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8qzpa3605rq13o0ht3fw.JPG" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0tyircmavawszo4d6bz4.JPG" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0tyircmavawszo4d6bz4.JPG" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  25. Filtering Data
&lt;/h2&gt;

&lt;p&gt;Filtering &lt;strong&gt;temporarily&lt;/strong&gt; hides rows that don't meet your criteria Nothing is deleted, and you can always return to the full dataset afterward.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to get there:&lt;/strong&gt; &lt;code&gt;Data → Filter&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Once enabled, dropdown arrows appear in your headers, offering:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Text filters&lt;/strong&gt; — equals, does not equal, begins with, ends with, contains, or a specific value anywhere in the text.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Number filters&lt;/strong&gt; — greater than, less than, equal to, or between (inclusive of the boundary values).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Date filters&lt;/strong&gt; — equal to, before, after, between.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fizlnmc3re7joup2feyzf.JPG" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fizlnmc3re7joup2feyzf.JPG" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foyjlos33ril2124zgibo.JPG" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foyjlos33ril2124zgibo.JPG" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1dpemchjaf0iq9v78s7c.JPG" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1dpemchjaf0iq9v78s7c.JPG" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  26. Freeze Panes
&lt;/h2&gt;

&lt;p&gt;Large datasets get hard to navigate once your headers scroll out of view. Freeze Panes keeps selected rows or columns visible while you scroll through the rest.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to get there:&lt;/strong&gt; &lt;code&gt;View → Freeze Panes&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;For example, if headers are in row 1, freeze the top row so it stays put no matter how far down you scroll.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo3xsfvsrse8sdeawablt.JPG" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo3xsfvsrse8sdeawablt.JPG" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  27. Excel Tables
&lt;/h2&gt;

&lt;p&gt;An Excel Table turns a plain range into a structured, self-maintaining table; a more structured way of formatting your data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to get there&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select your dataset.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Insert → Table&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Confirm your table has headers.&lt;/li&gt;
&lt;li&gt;Click OK.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Shortcut: &lt;code&gt;Ctrl + T&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Tables automatically give you filters, structured formatting, automatic expansion as you add rows, structured references, and much easier PivotTable/chart source management. A good dataset should generally have one header row, consistent columns, no unnecessary blank rows, and no merged cells inside it.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fslz6eisjx1zbzcyq7rxi.JPG" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fslz6eisjx1zbzcyq7rxi.JPG" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  28. Data Validation
&lt;/h2&gt;

&lt;p&gt;Data Validation controls what a user can type into a cell. Its most common use is a dropdown list. Instead of letting people freely type "Finance," "finance," "FINANCE," or "Fin." give a fixed list: Finance, HR, Marketing, IT.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to get there:&lt;/strong&gt; &lt;code&gt;Data → Data Validation → Allow → List&lt;/code&gt;, then enter the permitted values or point to a range containing them.&lt;/p&gt;

&lt;p&gt;This is one of the cheapest ways to prevent inconsistent labeling before it ever enters your dataset.&lt;/p&gt;
&lt;h2&gt;
  
  
  29. Charts: Turning Data into Visual Information
&lt;/h2&gt;

&lt;p&gt;Once your data is clean and analyzed, it's time to visualize it. The guiding principle: &lt;strong&gt;choose the chart based on the question you're trying to answer&lt;/strong&gt;, not the other way around.&lt;/p&gt;
&lt;h3&gt;
  
  
  Column and Bar Charts
&lt;/h3&gt;

&lt;p&gt;Best for comparing categories i.e &lt;em&gt;"Which department has the highest total salary?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to get there:&lt;/strong&gt; select the data → &lt;code&gt;Insert → Column&lt;/code&gt; or &lt;code&gt;Bar Chart&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;For long category names, consider whether a &lt;strong&gt;clustered&lt;/strong&gt; or &lt;strong&gt;stacked&lt;/strong&gt; layout communicates the comparison more clearly.&lt;/p&gt;
&lt;h3&gt;
  
  
  Pie and Donut Charts
&lt;/h3&gt;

&lt;p&gt;Pie charts show parts of a whole &lt;em&gt;"What percentage of employees belong to each department?"&lt;/em&gt; &lt;br&gt;
Donut charts work similarly with a hollow centre. &lt;br&gt;
Use both only with a small number of categories: once you're at roughly six or seven categories or more, they become hard to read. At that point, consider another chart &lt;/p&gt;
&lt;h3&gt;
  
  
  Line Charts
&lt;/h3&gt;

&lt;p&gt;Best for showing a trend over time how a value changes across months, for example.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to get there:&lt;/strong&gt; &lt;code&gt;Insert → Line Chart&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Area Charts
&lt;/h3&gt;

&lt;p&gt;Similar to a line chart, but the area beneath the line is shaded It useful when you want to emphasize magnitude or volume rather than just direction.&lt;/p&gt;
&lt;h3&gt;
  
  
  Scatter Charts
&lt;/h3&gt;

&lt;p&gt;Used to examine the relationship between two numeric variables, &lt;em&gt;"Is there a relationship between hours studied and exam score?"&lt;/em&gt; Plot one variable on each axis: select the two variables directly and insert the chart.&lt;/p&gt;

&lt;p&gt;When describing what a scatter chart shows, it helps to name the relationship along a simple scale: no relation, weak, or strong and whether it's positive or negative.&lt;/p&gt;
&lt;h3&gt;
  
  
  Combo Charts
&lt;/h3&gt;

&lt;p&gt;Combines two chart types in one e.g., one category shown as a column and another as a line, such as Sales (columns) against Profit Margin (line). Useful for comparing two related measures on different scales.&lt;/p&gt;
&lt;h3&gt;
  
  
  Formatting a Chart
&lt;/h3&gt;

&lt;p&gt;Once created, click the chart to reveal chart-specific tabs (Chart Design, Format) where you can adjust:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Axes and their titles&lt;/li&gt;
&lt;li&gt;Chart Title&lt;/li&gt;
&lt;li&gt;Horizontal / vertical axis&lt;/li&gt;
&lt;li&gt;Legend&lt;/li&gt;
&lt;li&gt;Data labels&lt;/li&gt;
&lt;li&gt;Data table&lt;/li&gt;
&lt;li&gt;Error bars&lt;/li&gt;
&lt;li&gt;Trendline&lt;/li&gt;
&lt;li&gt;Gridlines&lt;/li&gt;
&lt;li&gt;Chart style&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Whatever charts you build, try to keep a consistent visual theme with the rest of your dashboard this matters especially for charts with visually "light" elements, like a donut chart's hollow centre.&lt;/p&gt;
&lt;h2&gt;
  
  
  30. PivotTables
&lt;/h2&gt;

&lt;p&gt;A PivotTable is one of Excel's most powerful tools: a &lt;strong&gt;summary table&lt;/strong&gt; that lets you summarize, analyze, and present data interactively by dragging and dropping fields to spot patterns and trends &lt;strong&gt;without changing the original data&lt;/strong&gt;. It's the foundation for most reports and dashboards.&lt;/p&gt;

&lt;p&gt;Instead of manually calculating "total salary by department" across 10,000 rows, you build a PivotTable and let Excel do it.&lt;/p&gt;
&lt;h3&gt;
  
  
  30.1 Preparing Data for a PivotTable
&lt;/h3&gt;

&lt;p&gt;Before building one, make sure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Text blanks are filled (don't leave meaningful gaps).&lt;/li&gt;
&lt;li&gt;All columns have headers.&lt;/li&gt;
&lt;li&gt;There's nothing extra to the right of, or below, the dataset.&lt;/li&gt;
&lt;li&gt;The original data structure is preserved.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A good structure looks like:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Employee ID&lt;/th&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;Department&lt;/th&gt;
&lt;th&gt;Gender&lt;/th&gt;
&lt;th&gt;Salary&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1001&lt;/td&gt;
&lt;td&gt;Jane&lt;/td&gt;
&lt;td&gt;Finance&lt;/td&gt;
&lt;td&gt;Female&lt;/td&gt;
&lt;td&gt;80,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1002&lt;/td&gt;
&lt;td&gt;John&lt;/td&gt;
&lt;td&gt;HR&lt;/td&gt;
&lt;td&gt;Male&lt;/td&gt;
&lt;td&gt;70,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1003&lt;/td&gt;
&lt;td&gt;Mary&lt;/td&gt;
&lt;td&gt;Finance&lt;/td&gt;
&lt;td&gt;Female&lt;/td&gt;
&lt;td&gt;90,000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  30.2 Creating a PivotTable
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Click anywhere inside your dataset.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Insert → PivotTable&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Choose your data source.&lt;/li&gt;
&lt;li&gt;Choose where you want the PivotTable placed.&lt;/li&gt;
&lt;li&gt;Click OK.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feemaovd9edcgarnwvrzn.JPG" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feemaovd9edcgarnwvrzn.JPG" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  30.3 The Four PivotTable Areas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rows&lt;/strong&gt; — determines what categories appear vertically. E.g., Department → Rows produces Finance, HR, IT, Marketing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Values&lt;/strong&gt; — the numbers Excel calculates. E.g., Salary → Values gives totals per department.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Columns&lt;/strong&gt; — breaks the values down further by another category. E.g., Department → Rows, Gender → Columns, Salary → Values lets you compare salary across department &lt;em&gt;and&lt;/em&gt; gender at once.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Filters&lt;/strong&gt; — restricts the whole PivotTable to a subset, e.g. Department = Finance only.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Caution: it doesn't really matter which column you drag into &lt;strong&gt;Values&lt;/strong&gt; — apart from the fact that it must be a numeric column, and ideally one &lt;strong&gt;without blanks&lt;/strong&gt;. Blanks in the values column can distort counts and totals, so pick a clean numeric field.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  30.4 Grouping Data in PivotTables
&lt;/h3&gt;

&lt;p&gt;Sometimes you want bands instead of individual values — e.g., age ranges (18–25, 26–35, 36–45) instead of every single age. Right-click a value inside the PivotTable and choose &lt;strong&gt;Group&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4c9rmd904c7bgu6ot0ot.JPG" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4c9rmd904c7bgu6ot0ot.JPG" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  31. PivotCharts
&lt;/h2&gt;

&lt;p&gt;A PivotChart is a chart connected directly to a PivotTable rather than manually selecting data for a chart, the chart is linked to whatever the PivotTable is currently showing. This is especially useful for dashboards: change the PivotTable, and the chart updates with it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to get there&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click inside the PivotTable.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Insert → PivotChart&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Choose the chart type.&lt;/li&gt;
&lt;li&gt;Click OK.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  32. Slicers
&lt;/h2&gt;

&lt;p&gt;Slicers are a visual, click-based way to filter PivotTables instead of opening a dropdown and picking "Finance," you click a button labelled &lt;strong&gt;Finance&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to get there:&lt;/strong&gt; click your PivotTable → &lt;code&gt;PivotTable Analyze → Insert Slicer&lt;/code&gt;, then choose the field to filter by (Department, Gender, Location, Year, etc.).&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fklf859hbnhye7d5u5c4p.JPG" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fklf859hbnhye7d5u5c4p.JPG" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Connecting one slicer to multiple charts:&lt;/strong&gt; by default, a slicer only controls the PivotTable it came from. To make one slicer filter &lt;em&gt;several&lt;/em&gt; PivotTables/PivotCharts at once (which is what you want on a dashboard), right-click the slicer, choose &lt;strong&gt;Report Connections&lt;/strong&gt;, and select every PivotTable that should respond to it. Without this step, clicking a slicer on your dashboard may only update one chart while the rest stay frozen  which defeats the point of an interactive dashboard.&lt;/p&gt;
&lt;h2&gt;
  
  
  33. Building an Excel Dashboard
&lt;/h2&gt;

&lt;p&gt;A dashboard is a &lt;strong&gt;single-page visual report&lt;/strong&gt; that summarizes all the key information at a glance as opposed to a longer, more detailed report. It should be interactive and updatable via slicers, and typically includes a title, KPIs, and a set of charts chosen specifically for what you've analyzed.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────────────────────────────────────┐
│             SALES DASHBOARD                 │
├─────────────┬─────────────┬─────────────────┤
│ TOTAL SALES │ CUSTOMERS   │ AVG. SALE       │
│  KSh 5.2M   │    1,240    │ KSh 4,200       │
├─────────────┴─────────────┴─────────────────┤
│                                             │
│              SALES TREND                    │
│                                             │
├───────────────────────┬─────────────────────┤
│ SALES BY DEPARTMENT   │ SALES BY REGION     │
│                       │                     │
└───────────────────────┴─────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  33.1 Setting Up the Dashboard Sheet
&lt;/h3&gt;

&lt;p&gt;A simple way to start: create a new sheet, select the whole sheet (&lt;code&gt;Ctrl + A&lt;/code&gt;), and fill it with a background colour that matches your intended theme, before placing anything on it.&lt;/p&gt;

&lt;h3&gt;
  
  
  33.2 Dashboard Header
&lt;/h3&gt;

&lt;p&gt;Create a header using a shape: &lt;code&gt;Insert → Illustrations → Shapes → Rounded Rectangle&lt;/code&gt; is a common, clean choice.&lt;/p&gt;

&lt;p&gt;From there, adjust fill colour, outline, add your title text, choose a font, and centre it.&lt;/p&gt;

&lt;h3&gt;
  
  
  33.3 KPI Cards
&lt;/h3&gt;

&lt;p&gt;KPIs (Key Performance Indicators) are the numbers you want someone to understand instantly e.g. Total Sales, Customers, Average Sale, and similar headline figures. Place these directly below the header, since they're the first thing a viewer should see.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Worth knowing: in plain Excel, KPI cards are typically &lt;strong&gt;static&lt;/strong&gt; text/values you update manually or via formula, they don't automatically shift when a slicer is clicked, the way they would in a tool like Power BI. &lt;br&gt;
Genuinely interactive KPIs that respond live to slicer clicks are more of a Power BI capability; in Excel, plan your dashboard with that limitation in mind.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  33.4 Adding Charts to the Dashboard
&lt;/h3&gt;

&lt;p&gt;Move your finished charts and PivotCharts onto the dashboard sheet. A typical dashboard mixes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;KPI cards&lt;/li&gt;
&lt;li&gt;A trend chart (e.g., sales over time)&lt;/li&gt;
&lt;li&gt;A breakdown by category (department, region, etc.)&lt;/li&gt;
&lt;li&gt;A comparison or performance chart&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Choose the charts based on the questions your data is actually answering not just because you happen to have built them.&lt;/p&gt;

&lt;h3&gt;
  
  
  33.5 Making the Dashboard Interactive
&lt;/h3&gt;

&lt;p&gt;A department slicer with buttons for Finance, HR, IT, Marketing (or a year slicer with 2024, 2025, 2026) lets a viewer click through the data themselves instead of reading a static snapshot. &lt;/p&gt;

&lt;p&gt;Remember to connect each slicer to every relevant PivotTable via &lt;strong&gt;Report Connections&lt;/strong&gt; (see Section 32) so the whole dashboard responds together, not just one chart.&lt;/p&gt;

&lt;h3&gt;
  
  
  33.6 Dashboard Design
&lt;/h3&gt;

&lt;p&gt;A dashboard isn't "every chart you've ever made" it's a small, curated set that communicates quickly. Keep it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clean and uncluttered&lt;/li&gt;
&lt;li&gt;Consistent — one visual theme across header, KPI cards, charts, fonts, and colors&lt;/li&gt;
&lt;li&gt;Well-aligned&lt;/li&gt;
&lt;li&gt;Focused on the handful of numbers and trends that actually matter&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h2&gt;
  
  
  36. Power Query: Automating the Cleaning Step
&lt;/h2&gt;

&lt;p&gt;Everything covered so far e.g. removing duplicates, fixing pseudoblanks, standardizing text, splitting columns — can also be done manually, once. &lt;br&gt;
&lt;strong&gt;Power Query&lt;/strong&gt; is Excel's built-in tool for building a &lt;em&gt;repeatable&lt;/em&gt; data-cleaning and transformation process. Instead of manually editing cells, you record a series of transformation steps once, and Power Query replays those exact steps automatically every time you refresh the data even if the underlying data has changed or grown.&lt;/p&gt;

&lt;p&gt;This is where Power Query sits in the bigger workflow: it belongs at the &lt;strong&gt;Clean&lt;/strong&gt; and &lt;strong&gt;Organize&lt;/strong&gt; stages, before you ever touch a formula, PivotTable, or chart. Think of it as an automated, auditable version of the manual cleaning process from earlier in this guide.&lt;/p&gt;
&lt;h3&gt;
  
  
  36.1 Why Use Power Query Instead of Manual Cleaning?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Repeatability&lt;/strong&gt; — clean a dataset once, and reapply the same steps to next month's file in seconds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Traceability&lt;/strong&gt; — every transformation is recorded as a visible step, so you (or anyone else) can see exactly what was done to the data and in what order.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Non-destructive&lt;/strong&gt; — Power Query works on a copy of the data pulled into its own editor; your original source file or sheet is untouched.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Handles messier sources&lt;/strong&gt; — it can pull data from CSVs, folders full of files, databases, and web pages, not just a worksheet already sitting in Excel.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  36.2 Getting Data Into Power Query
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;How to get there:&lt;/strong&gt; &lt;code&gt;Data → Get Data&lt;/code&gt; (or &lt;code&gt;Data → From Table/Range&lt;/code&gt; if your source is already an Excel Table on the same sheet)&lt;/p&gt;

&lt;p&gt;Common source options include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;From Table/Range — turns existing worksheet data into a query&lt;/li&gt;
&lt;li&gt;From Text/CSV&lt;/li&gt;
&lt;li&gt;From Folder — combines multiple files in a folder into one dataset&lt;/li&gt;
&lt;li&gt;From Web&lt;/li&gt;
&lt;li&gt;From Database (SQL Server, Access, etc.)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once you select a source, Power Query opens the &lt;strong&gt;Power Query Editor&lt;/strong&gt; in a separate window.&lt;/p&gt;
&lt;h3&gt;
  
  
  36.3 The Power Query Editor
&lt;/h3&gt;

&lt;p&gt;The Editor has three areas worth knowing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Preview pane&lt;/strong&gt; (centre) — shows your data as it currently looks, after whatever steps have been applied so far.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Queries pane&lt;/strong&gt; (left) — lists every query you've built in this workbook.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Applied Steps pane&lt;/strong&gt; (right) — the recorded, ordered list of every transformation you've made to this query.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Applied Steps panel is the heart of Power Query. Each transformation e.g. removing a column, filtering rows, changing a data type, appears as its own named step. You can click any step to see the data exactly as it looked at that point, reorder steps, or delete one without affecting the others. This is what makes Power Query auditable in a way manual cleaning never is.&lt;/p&gt;
&lt;h3&gt;
  
  
  36.4 Core Transformations
&lt;/h3&gt;

&lt;p&gt;Most of the cleaning tasks covered earlier in this guide have a direct Power Query equivalent but recorded as a repeatable step instead of a one-time edit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Changing a column's data type&lt;/strong&gt;&lt;br&gt;
Click the data-type icon in a column header, or &lt;code&gt;Transform → Data Type&lt;/code&gt;. This is worth doing early and deliberately a column silently stored as text instead of number is one of the most common causes of broken calculations downstream.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Removing duplicates&lt;/strong&gt;&lt;br&gt;
Select the column(s) that should be unique → &lt;code&gt;Home → Remove Rows → Remove Duplicates&lt;/code&gt;. Same logic as before: decide which field defines a duplicate before removing anything.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Removing or keeping specific rows&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;Home → Remove Rows&lt;/code&gt; lets you remove blank rows, error rows, duplicates, or the top/bottom N rows. &lt;code&gt;Home → Keep Rows&lt;/code&gt; does the inverse.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Filtering&lt;/strong&gt;&lt;br&gt;
Click the dropdown arrow in a column header, just like a worksheet filter but here, the filter becomes a permanent, recorded step rather than a temporary view.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Splitting a column&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;Transform → Split Column → By Delimiter&lt;/code&gt; (or by number of characters). Useful for pulling apart something like &lt;code&gt;EMP-10545&lt;/code&gt; into a prefix and an ID number, or splitting a full name into first and last name — the Power Query equivalent of the LEFT/RIGHT/MID work from earlier.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Merging or combining columns&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;Transform → Merge Columns&lt;/code&gt; combines multiple columns into one — the Power Query equivalent of CONCAT useful for building something like a standardized email address as a repeatable step rather than a manual formula.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Trim, Clean, and Case changes&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;Transform → Format&lt;/code&gt; offers Trim (remove extra spaces), Clean (remove non-printable characters), and UPPERCASE/lowercase/Capitalize Each Word — direct equivalents of TRIM, UPPER, LOWER, and PROPER.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Replacing values&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;Transform → Replace Values&lt;/code&gt; — the Power Query equivalent of Find and Replace, but applied as a saved, reusable step rather than a one-off edit. This is a clean way to handle pseudoblanks: replace "N/A", "None", and "-" with a single consistent value like "Unknown" in one recorded step.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Filling down blanks&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;Transform → Fill → Down&lt;/code&gt; fills a blank cell with the value from the cell above it and is useful for datasets where a category label is only entered once at the top of a group and left blank for the rows beneath it.&lt;/p&gt;
&lt;h3&gt;
  
  
  36.5 Combining Data From Multiple Sources
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Append Queries&lt;/strong&gt; — stacks two or more queries with matching columns on top of each other, like combining January, February, and March exports into a single table.&lt;br&gt;
&lt;code&gt;Home → Append Queries&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Merge Queries&lt;/strong&gt; — joins two queries together based on a matching column, similar in spirit to VLOOKUP or INDEX/MATCH, but built to work reliably across entire tables rather than one lookup at a time.&lt;br&gt;
&lt;code&gt;Home → Merge Queries&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You'll choose a join type &lt;br&gt;
The most common is a &lt;strong&gt;Left Outer&lt;/strong&gt; join, which keeps every row from your main table and pulls in matching data from the second table wherever it exists.&lt;/p&gt;
&lt;h3&gt;
  
  
  36.6 Loading the Result Back Into Excel
&lt;/h3&gt;

&lt;p&gt;Once your Applied Steps produce clean, well-structured data, you close out of the Editor and choose where it should land.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to get there:&lt;/strong&gt; &lt;code&gt;Home → Close &amp;amp; Load&lt;/code&gt; (or &lt;code&gt;Close &amp;amp; Load To…&lt;/code&gt; for more control)&lt;/p&gt;

&lt;p&gt;Options typically include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Load as a &lt;strong&gt;Table&lt;/strong&gt; on a worksheet&lt;/li&gt;
&lt;li&gt;Load as a &lt;strong&gt;PivotTable Report&lt;/strong&gt; directly&lt;/li&gt;
&lt;li&gt;Load &lt;strong&gt;Only Create Connection&lt;/strong&gt; — keeps the query available as a source for other queries or PivotTables, without dumping the data onto a sheet&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  36.7 Refreshing the Query
&lt;/h3&gt;

&lt;p&gt;When new data arrives you don't repeat any manual cleanup. You just:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Data → Refresh All&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Power Query reruns every recorded step, in order, against the new data, and the cleaned result updates automatically ready to feed straight into your PivotTables, charts, and dashboard.&lt;/p&gt;
&lt;h3&gt;
  
  
  Where Power Query Fits in the Bigger Picture
&lt;/h3&gt;

&lt;p&gt;Updating the full workflow from earlier in this guide, Power Query slots in right after data enters Excel and before manual analysis begins:&lt;/p&gt;
&lt;h2&gt;
  
  
  34. The Complete Excel Workflow
&lt;/h2&gt;

&lt;p&gt;Putting it all together, the journey from a blank workbook to a finished dashboard follows this path:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;OPEN EXCEL
     ↓
CREATE WORKBOOK
     ↓
ENTER DATA
     ↓
FORMAT DATA
     ↓
CLEAN DATA
     ↓
ORGANIZE DATA
     ↓
WRITE FORMULAS
     ↓
USE FUNCTIONS
     ↓
SORT &amp;amp; FILTER
     ↓
ANALYZE DATA
     ↓
CREATE PIVOTTABLES
     ↓
CREATE CHARTS / PIVOTCHARTS
     ↓
ADD SLICERS
     ↓
BUILD DASHBOARD
     ↓
REPORT INSIGHTS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The mindset worth carrying forward: &lt;strong&gt;don't start with a chart start with good data.&lt;/strong&gt; A beautiful dashboard built on poorly structured data is still a poor analysis.&lt;/p&gt;

&lt;h2&gt;
  
  
  35. Excel Cheat Sheet: Where Do I Find It?
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;I want to…&lt;/th&gt;
&lt;th&gt;Go to…&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Change font&lt;/td&gt;
&lt;td&gt;Home → Font&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Change font colour&lt;/td&gt;
&lt;td&gt;Home → Font Color&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Change cell colour&lt;/td&gt;
&lt;td&gt;Home → Fill Color&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Add borders&lt;/td&gt;
&lt;td&gt;Home → Borders&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wrap text&lt;/td&gt;
&lt;td&gt;Home → Wrap Text&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Merge cells&lt;/td&gt;
&lt;td&gt;Home → Merge &amp;amp; Center&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Change number format&lt;/td&gt;
&lt;td&gt;Home → Number&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Highlight values&lt;/td&gt;
&lt;td&gt;Home → Conditional Formatting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Find/replace text&lt;/td&gt;
&lt;td&gt;Home → Find &amp;amp; Select → Replace&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sort data&lt;/td&gt;
&lt;td&gt;Data → Sort&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Filter data&lt;/td&gt;
&lt;td&gt;Data → Filter&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Remove duplicates&lt;/td&gt;
&lt;td&gt;Data → Remove Duplicates&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Flash Fill&lt;/td&gt;
&lt;td&gt;Data → Flash Fill&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data Validation&lt;/td&gt;
&lt;td&gt;Data → Data Validation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Freeze rows/columns&lt;/td&gt;
&lt;td&gt;View → Freeze Panes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Create a Table&lt;/td&gt;
&lt;td&gt;Insert → Table&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Create a PivotTable&lt;/td&gt;
&lt;td&gt;Insert → PivotTable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Create a PivotChart&lt;/td&gt;
&lt;td&gt;Insert → PivotChart&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Create a normal chart&lt;/td&gt;
&lt;td&gt;Insert → Charts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Add a slicer&lt;/td&gt;
&lt;td&gt;PivotTable Analyze → Insert Slicer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Connect a slicer to multiple PivotTables&lt;/td&gt;
&lt;td&gt;Right-click slicer → Report Connections&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Create shapes for a dashboard&lt;/td&gt;
&lt;td&gt;Insert → Shapes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Find formulas/functions&lt;/td&gt;
&lt;td&gt;Formulas&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Finally
&lt;/h2&gt;

&lt;p&gt;Learning Excel isn't about memorizing hundreds of buttons. It's about understanding what problem each tool solves and where that problem sits in the bigger picture of turning raw data into a decision someone can act on.&lt;/p&gt;

&lt;p&gt;If you remember only one framework from this guide, remember:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Enter&lt;/strong&gt; — put your data into Excel.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Format&lt;/strong&gt; — make the information readable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clean&lt;/strong&gt; — fix missing values, inconsistent labels, duplicates, invalid dates, and other data-quality problems.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Organize&lt;/strong&gt; — use tables, sorting, filtering, validation, and freeze panes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Calculate&lt;/strong&gt; — use formulas and functions like SUM, AVERAGE, MEDIAN, IF, COUNTIF, and XLOOKUP.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Analyze&lt;/strong&gt; — use conditional functions, lookups, and PivotTables to actually answer questions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Visualize&lt;/strong&gt; — pick the chart that fits the question, not just the one that looks nicest.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Report&lt;/strong&gt; — bring KPIs, charts, PivotTables, and slicers together into one interactive dashboard.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That progression is what takes you from someone who can type numbers into Excel to someone who can use Excel to clean, analyze, and communicate insight from data.&lt;/p&gt;

</description>
      <category>analytics</category>
      <category>beginners</category>
      <category>data</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>The Git-Github workflow- A simplified cheat sheet</title>
      <dc:creator>Velma Ketra Lukaya</dc:creator>
      <pubDate>Sun, 23 Aug 2026 20:34:59 +0000</pubDate>
      <link>https://dev.to/velma_ketralukaya_b0ae37/the-git-github-workflow-a-simplified-cheat-sheet-36j7</link>
      <guid>https://dev.to/velma_ketralukaya_b0ae37/the-git-github-workflow-a-simplified-cheat-sheet-36j7</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Git and Github are tools that work together in managing and storage of your projects&lt;br&gt;
Git is a version control system that runs on your computer and keeps track of changes made to you file and folder locally, while GitHub is an online platform where the Git repositories can be stored and shared as backup and to collaborate with other people &lt;br&gt;
For the purpose of understanding, I created a project called &lt;strong&gt;&lt;em&gt;Kenyan hospital health records&lt;/em&gt;&lt;/strong&gt; on my local computer &lt;/p&gt;

&lt;h2&gt;
  
  
  General workflow
&lt;/h2&gt;

&lt;p&gt;The overall process is&lt;br&gt;
-Connecting your computer to GitHub using the SSH &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Configuring your user name and email&lt;/li&gt;
&lt;li&gt;Testing the connection&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;-Using Git to move my project from my Local computer to GitHub&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Initialising Git&lt;/li&gt;
&lt;li&gt;Staging the files&lt;/li&gt;
&lt;li&gt;Committing staged files&lt;/li&gt;
&lt;li&gt;Creating a Github Repository &lt;/li&gt;
&lt;li&gt;Connecting the local repository to GitHub&lt;/li&gt;
&lt;li&gt;Pushing the project to GitHub&lt;/li&gt;
&lt;li&gt;Pulling changes from GitHub to local computer &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Part 1: Connecting Git to GitHub using SSH
&lt;/h2&gt;

&lt;p&gt;Before creating a new SSH, check whether your computer has one by opening the terminal and running:&lt;br&gt;
&lt;strong&gt;ls -al ~/.ssh&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you do not already have it create one using &lt;strong&gt;ssh-keygen -t ed25519 -C "&lt;a href="mailto:your_email@example.com"&gt;your_email@example.com&lt;/a&gt;"&lt;/strong&gt;&lt;br&gt;
which would create a public and private key to be kept private and in secret&lt;/p&gt;

&lt;p&gt;Display and copy the public key to be added to GitHub settings and add a new SSH key, give the key a name e.g &lt;em&gt;My computer&lt;/em&gt;, paste your key and click add SSH key &lt;/p&gt;

&lt;p&gt;Check your Git configuration by using &lt;strong&gt;git config --global --list&lt;/strong&gt; and test whether your computer communicates with GitHub by running &lt;strong&gt;ssh -T &lt;a href="mailto:git@github.com"&gt;git@github.com&lt;/a&gt;&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;This confirmed that my computer was successfully connected to GitHub through SSH.&lt;br&gt;
Now you are ready to push your local project onto GitHub &lt;/p&gt;

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

&lt;h2&gt;
  
  
  Part 2: Creating folders and files on your local computer
&lt;/h2&gt;

&lt;p&gt;Using terminal, run &lt;strong&gt;pwd&lt;/strong&gt; to identify the exact location &lt;br&gt;
Thereafter, use the command cd to move into the desired location eg &lt;strong&gt;cd Desktop&lt;/strong&gt; to move in to the desktop. You can use the same command to move into a directory of choice eg Documents&lt;br&gt;
Within the desktop, use &lt;strong&gt;mkdir&lt;/strong&gt; which instructs the terminal to make a directory inside your desktop &lt;br&gt;
Cd into that folder and create folders of choice using &lt;strong&gt;mkdir&lt;/strong&gt; and files of choice using &lt;strong&gt;touch&lt;/strong&gt; e.g. &lt;strong&gt;touch README.md&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To confirm, use &lt;strong&gt;ls&lt;/strong&gt; to list out all components of your folder.&lt;/p&gt;

&lt;p&gt;If you have any changes to make onto your README.md file , use &lt;br&gt;
&lt;strong&gt;echo "# Your description in makrdown langage" &amp;gt; README.md &lt;br&gt;
If you use **&amp;gt;&lt;/strong&gt; it overwrites everything un the README.md file while &lt;strong&gt;&amp;gt;&amp;gt;&lt;/strong&gt; adds additional information into the README.md as such &lt;strong&gt;echo "Additional information" &amp;gt;&amp;gt; README.md&lt;/strong&gt; without erasing existing information &lt;br&gt;
Alternatively &lt;strong&gt;nano README.md&lt;/strong&gt; and make all changes using markdown language, save and revert to terminal.&lt;br&gt;
To confirm changes made, use &lt;strong&gt;cat README.md&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa1b1u7p89tkqyvo6v0ei.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa1b1u7p89tkqyvo6v0ei.jpeg" alt=" " width="799" height="426"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu274sqrv0t2j0rvc1yr7.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu274sqrv0t2j0rvc1yr7.jpeg" alt=" " width="800" height="183"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Part 3: Initialise GIT
&lt;/h2&gt;

&lt;h4&gt;
  
  
  Initialise the git repository
&lt;/h4&gt;

&lt;p&gt;Run &lt;strong&gt;git init&lt;/strong&gt;. This instructs Git to start tracking your project and creates a hidden .git folder inside your project &lt;/p&gt;

&lt;h4&gt;
  
  
  Check Git status
&lt;/h4&gt;

&lt;p&gt;Run &lt;strong&gt;git status&lt;/strong&gt; which is important to inform you about hat is happening inside your repository &lt;br&gt;
At this stage, Git will show you that there are files that are not being tracked yet&lt;/p&gt;

&lt;h4&gt;
  
  
  Stage the files
&lt;/h4&gt;

&lt;p&gt;Run &lt;strong&gt;git add .&lt;/strong&gt; to add all files to the staging area and if you check status you will see that git has begun tracking your files &lt;br&gt;
as such &lt;/p&gt;

&lt;h4&gt;
  
  
  Committing the files
&lt;/h4&gt;

&lt;p&gt;Using the command **git commit -m "describe the commit" &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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6qj0ssexx90v04vgz8ov.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6qj0ssexx90v04vgz8ov.jpeg" alt=" " width="800" height="346"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Part 4: Create the GitHub repository
&lt;/h2&gt;

&lt;p&gt;In your GitHub account, create a new GitHub repository and name it similarly to the local project&lt;br&gt;
This creates an online repository &lt;br&gt;
At this point you now have a local repository and an online one but they are still not conected&lt;br&gt;
On your GitHub repository you will have a SSH/HTTPS repository URL which you will use to tell your local repository where your GitHub repository is located&lt;br&gt;
copy the key and on terminal add&lt;br&gt;
&lt;strong&gt;git remote add origin *SSH repository URL&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpv1qcniplh5qy290rqu1.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpv1qcniplh5qy290rqu1.jpeg" alt=" " width="800" height="734"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Check that the connection had been saved using &lt;strong&gt;git remote -v&lt;/strong&gt;&lt;br&gt;
where you will see such results&lt;/p&gt;

&lt;p&gt;Set the branch of your project to main by using &lt;strong&gt;git branch -M main&lt;/strong&gt; &lt;br&gt;
Confirm the branch of your project is set to main by using the command &lt;strong&gt;git branch&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once at this stage, you are ready to push the committed projects onto git hub &lt;/p&gt;

&lt;p&gt;On the terminal, use &lt;strong&gt;git push -u origin main&lt;/strong&gt;&lt;br&gt;
The command means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;git push → send my commits to a remote repository&lt;/li&gt;
&lt;li&gt;origin → the GitHub repository I connected earlier&lt;/li&gt;
&lt;li&gt;main → the branch I want to send&lt;/li&gt;
&lt;li&gt;-u → remember this connection for future pushes&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;On Github confirm that the project is now successfully uploaded&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqqivhb9ip3lurs0ons0a.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqqivhb9ip3lurs0ons0a.jpeg" alt=" " width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Henceforth &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Check any changes you have made using &lt;em&gt;git status&lt;/em&gt;*&lt;/li&gt;
&lt;li&gt;Stage the changes using &lt;strong&gt;git add .&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Commit the changes using &lt;strong&gt;git commit -m "Describe your changes"&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Push the changes to GitHub using &lt;strong&gt;git push -u origin main"&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you make changes on git hub &lt;br&gt;
you can simply &lt;strong&gt;git pull&lt;/strong&gt; and the changes made in your online repository will be synchronized to you local repository. This fetches the changes and integrates them into your current branch &lt;/p&gt;

&lt;h2&gt;
  
  
  In a nutshell
&lt;/h2&gt;

&lt;p&gt;Git runs on my computer and tracks the history of my project.&lt;br&gt;
GitHub stores my Git repository online.&lt;br&gt;
SSH provides the secure way for my computer to authenticate with GitHub.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
