<?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: PRUDENCE JEMUTAI</title>
    <description>The latest articles on DEV Community by PRUDENCE JEMUTAI (@prudence_jemutai_9fbc2672).</description>
    <link>https://dev.to/prudence_jemutai_9fbc2672</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%2F3952254%2F2d5fd6f0-86dd-41b0-8cc2-3909de57a364.png</url>
      <title>DEV Community: PRUDENCE JEMUTAI</title>
      <link>https://dev.to/prudence_jemutai_9fbc2672</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/prudence_jemutai_9fbc2672"/>
    <language>en</language>
    <item>
      <title>MASTERING SCHEMAS, RELATIONSHIP AND DATA MODELLING IN POWER BI</title>
      <dc:creator>PRUDENCE JEMUTAI</dc:creator>
      <pubDate>Mon, 06 Jul 2026 14:07:07 +0000</pubDate>
      <link>https://dev.to/prudence_jemutai_9fbc2672/mastering-schemas-relationship-and-data-modelling-in-power-bi-5534</link>
      <guid>https://dev.to/prudence_jemutai_9fbc2672/mastering-schemas-relationship-and-data-modelling-in-power-bi-5534</guid>
      <description>&lt;p&gt;In data analytics, visuals are the face — but the model is the skeleton. Without a strong structure, even the most beautiful dashboard collapses under the weight of bad data. Power BI’s schemas and relationships are not just technical features; they are the architecture of truth in your reports. Let’s uncover how to design them for accuracy, speed, and clarity.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;DATA MODELLING IN POWER BI&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Data modelling&lt;/strong&gt; is the process of organizing data into a structured format by creating tables, defining relationships, and establishing rules that allow Power BI to understand how the data is connected.&lt;br&gt;
The goal of data modelling is to transform raw data into a format that is easy to analyse and visualize.&lt;/p&gt;

&lt;p&gt;For example, &lt;em&gt;a retail company may have separate datasets for customers, products, sales, employees, and dates&lt;/em&gt;. Instead of keeping these datasets isolated, Power BI connects them through relationships, allowing users to answer questions such as:&lt;/p&gt;

&lt;p&gt;Which products generate the highest revenue?&lt;br&gt;
Which customers purchase the most?&lt;br&gt;
Which regions have the highest sales?&lt;br&gt;
How have sales changed over time?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Understanding Schemas in Power BI&lt;/strong&gt;&lt;br&gt;
If you get the schema right, your DAX formulas will be simple and your reports will load instantly. If you get it wrong, your calculations will show incorrect totals and your visuals will lag.&lt;br&gt;
&lt;strong&gt;Fact Tables&lt;/strong&gt; &lt;em&gt;(The "What Happened")&lt;/em&gt;: These store numeric metrics, events, or transactions. They are long, narrow, and constantly growing.&lt;br&gt;
Examples: Sales transactions, store id, Product id, Sales id&lt;br&gt;
Columns: Quantities, amounts, dates, and ID keys.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dimension Tables&lt;/strong&gt; &lt;em&gt;(The "Context")&lt;/em&gt;: These store descriptive attributes about the facts. They are wide and contain mostly text.&lt;br&gt;
Examples: Customers, products, employees, stores, dates.&lt;br&gt;
Columns: Names, categories, regions, colours, addresses.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Star Schema&lt;/strong&gt;&lt;br&gt;
In a &lt;strong&gt;Star Schema&lt;/strong&gt;, your central Fact table is directly surrounded by your Dimension tables. When you look at the relationship diagram, it resembles a star.&lt;br&gt;
How it works: Each dimension connects directly to the fact table using a &lt;strong&gt;Many-to-One&lt;/strong&gt; (*:1) relationship.&lt;br&gt;
Why it wins: Power BI is explicitly built and optimized for this layout. It requires the fewest database joins, which maximizes report speed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Snowflake Schema&lt;/strong&gt;&lt;br&gt;
How it works: A Sales fact table connects to a Product dimension, which then connects to a separate Product Category dimension.&lt;br&gt;
Why to avoid it: While it saves a tiny amount of database storage, it forces Power BI to filter through multiple layers of tables to answer a single question. This severely degrades performance.&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%2F2m6gj25na9imhzgd5anu.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%2F2m6gj25na9imhzgd5anu.png" alt=" " width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The Anatomy of a Relationship&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;When you draw a connection between two tables in Power BI's Model View, you are linking a column from Table A to a column in Table B. For this link to work, both columns must contain the exact same type of data (e.g., matching Product IDs, Customer Keys, or Dates).Every relationship is defined by three critical settings: &lt;strong&gt;Cardinality, Cross-Filter Direction, and State&lt;/strong&gt;.&lt;br&gt;
 &lt;strong&gt;Cardinality&lt;/strong&gt;: Defining the Data Matching Style&lt;br&gt;
Cardinality tells Power BI how rows in one table match rows in another. There are four types:&lt;br&gt;
&lt;strong&gt;Many-to-One (*:1)&lt;/strong&gt;: This is the industry standard. The "One" side is your dimension table containing a list of completely unique items (like a Master Product List). The "Many" side is your transactional fact table where those items appear multiple times (like a Sales History ledger).&lt;br&gt;
&lt;strong&gt;One-to-One (1:1) [6]&lt;/strong&gt;: Rare. Both tables share a unique list of matching keys. This is usually only used to split a single, massively wide table into two smaller ones for security or organizational reasons.&lt;br&gt;
&lt;strong&gt;Many-to-Many (&lt;em&gt;:&lt;/em&gt;) [6]&lt;/strong&gt;: Highly dangerous. This occurs when neither table contains a unique list of keys (e.g., mapping a list of student classes to a list of teachers, where students have multiple teachers and teachers have multiple students). It introduces ambiguity and should be resolved using a Bridge Table instead.&lt;br&gt;
&lt;strong&gt;Cross-Filter Direction&lt;/strong&gt;: Controlling the Traffic Flow&lt;br&gt;
Cross-filter direction dictates which way the filtering power flows across your relationship.&lt;br&gt;
&lt;strong&gt;Single Direction (Standard) [6]&lt;/strong&gt;: The absolute default and safest setting. Filters only flow from the One (1) side down to the Many (&lt;em&gt;) side. Clicking a specific customer filters the sales table; clicking a row in the sales table does not filter your customer master list.&lt;br&gt;
**Both Directions (Bi-directional) [6]&lt;/em&gt;*: Allows filtering to flow both ways. While tempting, avoid this whenever possible. It drastically slows down report refresh times, creates confusing circular filter loops, and often causes your metrics to calculate incorrect numbers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Relationship State: Active vs. Inactive&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Active Relationship&lt;/strong&gt;: Indicated by a solid line in the Model View. This is the default path Power BI uses to filter your data and calculate your regular DAX measures automatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Inactive Relationship&lt;/strong&gt;: Indicated by a dashed or dotted line. This happens when you have multiple date columns in a fact table (e.g., a sales record has an &lt;strong&gt;OrderDate&lt;/strong&gt;, &lt;strong&gt;ShipDate&lt;/strong&gt;, and &lt;strong&gt;DeliveryDate&lt;/strong&gt;) but can only link them all to a single Calendar table. You can leave the secondary dates inactive and turn them on temporarily using the USERELATIONSHIP() DAX function inside a measure.&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%2Fcqw5l7mp71wz3i7vyvaz.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%2Fcqw5l7mp71wz3i7vyvaz.png" alt=" " width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>datascience</category>
      <category>data</category>
    </item>
    <item>
      <title>Understanding Joins in Power BI</title>
      <dc:creator>PRUDENCE JEMUTAI</dc:creator>
      <pubDate>Wed, 24 Jun 2026 13:25:36 +0000</pubDate>
      <link>https://dev.to/prudence_jemutai_9fbc2672/understanding-joins-in-power-bi-2nm</link>
      <guid>https://dev.to/prudence_jemutai_9fbc2672/understanding-joins-in-power-bi-2nm</guid>
      <description>

&lt;p&gt;Join is combining two tables based on matching column. In Power BI joins are done using merge queries. &lt;/p&gt;

&lt;p&gt;The most common join types in Power BI are Inner Join,&lt;br&gt;
 Left Outer Join, Right Outer Join, Full Outer Join, Left Anti Join, and Right Anti Join.&lt;/p&gt;

&lt;p&gt;An &lt;strong&gt;inner join&lt;/strong&gt; returns only the records that have matching values in both tables. It is useful when you only want data that exists in both datasets.&lt;/p&gt;

&lt;p&gt;An &lt;strong&gt;Outer Join&lt;/strong&gt; returns records even when there is no matching value in the other table. Unlike an Inner Join, which only keeps matching records, an Outer Join preserves unmatched records and fills missing values with nulls.&lt;/p&gt;

&lt;p&gt;Outer Join = Keep unmatched records.&lt;br&gt;
Inner Join = Keep only matching records.&lt;/p&gt;

&lt;h2&gt;
  
  
  There are three types of Outer Joins
&lt;/h2&gt;

&lt;p&gt;1 &lt;strong&gt;Left outer join&lt;/strong&gt; – Returns all records from the left table and matching records from the right table.&lt;br&gt;
2 &lt;strong&gt;Right Outer Join&lt;/strong&gt; – Returns all records from the right table and matching records from the left table.&lt;br&gt;
3 &lt;strong&gt;Full Outer Join&lt;/strong&gt; – Returns all records from both tables, whether they match or not.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;Left outer join&lt;/strong&gt; returns all records from the left table and only the matching records from the right table. If no match exists, the right-side columns contain null values. This join is commonly used when the left table contains the primary data that must be preserved.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;Right outer join&lt;/strong&gt; works similarly but keeps all records from the right table and only matching records from the left table. Unmatched rows from the right table are retained with null values from the left table.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A *Full Outer Join&lt;/strong&gt;* returns all records from both tables. When a matching value exists in both tables, the records are combined. If a record exists in only one table, it is still included, and the columns from the other table contain null values.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;An Anti Join&lt;/strong&gt; returns only the records that do not have a match in another table. It is commonly used to find missing or unmatched records&lt;/p&gt;

&lt;h2&gt;
  
  
  There are two types of Anti Joins
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;Left Anti Join&lt;/strong&gt; returns only the rows from the left table that do not have a matching record in the right table. It is useful for identifying missing transactions, unsold products, or customers without orders. (Think of it as "show me records in Table A(left) that missing in Table B(right)").&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;Right Anti Join&lt;/strong&gt; returns only the rows from the right table that do not have a matching record in the left table. This join is often used for data quality checks and finding orphan records.("show me records in Table B(right) that are missing in Table A(left)")&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Left Anti&lt;/strong&gt;   Records only in the left table&lt;br&gt;
&lt;strong&gt;Right Anti&lt;/strong&gt;  Records only in the right table&lt;/p&gt;

&lt;p&gt;In summary, joins are essential for data preparation and analysis in Power BI. Choosing the correct join type ensures accurate reporting and helps answer different business questions, from finding matching records to identifying missing or unmatched data.&lt;/p&gt;

</description>
      <category>datascience</category>
      <category>analytics</category>
      <category>data</category>
    </item>
  </channel>
</rss>
