When Relationships Go Rogue in Power BI

Happy 2026! If you’re still hunting for a New Year’s resolution, here’s a good one: get to know your data model like it’s your best friend! Understanding how your relationships work, especially the sneaky bidirectional ones, can save you hours of head-scratching and help your reports tell the right story from the start.

And to prove the point, I’ve got a story for you. A real-life example of how things can go sideways when relationships go rogue…

The other day I was helping a colleague with some DAX that just wasn’t behaving.

You know that feeling when a measure should work, but the numbers look… off?

Whenever that happens, I go straight to the data model.

Nine times out of ten it gives me the answer.

And this time? Well, it didn’t disappoint… or maybe it did!

I opened the model and there it was: a tangled mess of bidirectional relationships, crisscrossing like spaghetti thrown by a toddler, chaotic, sticky, and impossible to unravel at first glance.

A quick chat about relationships

In Power BI, relationships are basically the roads your filters travel on. A single‑direction relationship is like a one‑way street. You can send filters from your product table down to your sales table, but not the other way round.

A bidirectional relationship is like a two‑way street. Filters can travel from Products to Sales and back again. Sounds useful, right? It is, but sometimes it means your measures start giving you results you didn’t expect.

If you would like to learn more about data modelling in Power BI, try the Microsoft module Model relationships in Power BI Desktop .

Let’s make it simple with an analogy

Think of two neighbourhoods:

 Products: a nice list of products and their categories.

 Sales: every single transaction.

With a one‑way street, you can start in Products (“Show me Electronics”) and see only those sales.

But you can’t start in Sales (“Show me products that sold more than £200”) and drive back to Products to cut them down.

With a two‑way street, though, that filter will drive back. Suddenly your Products table shrinks because it’s now being filtered by what’s happening in Sales.

Give it a go!

Here’s a small dataset you can play with.

Import these two tables into Power BI and create a relationship from Dim_Products[ProductID] (one) to Fact_Sales[ProductID] (many).

Fact_Sales:

SalesIDProductIDQuantityRevenue
1A2200
2A3300
3B1100
4C4400
5C2200
ProductIDCategory
AElectronics
BFurniture
CElectronics

Add this measure to your model:

The fun part, watch the change!

With a single‑direction relationship:

That filter on Sales doesn’t go back to Products.

Your card will still show 2 categories (Electronics and Furniture) even though not both have sales over £200.

A Power BI visual comparing data filtering with a single-direction relationship between two tables: "Dim_Category" and "Fact_Sales." On the left, a model diagram shows the relationship flowing from "Dim_Category" to "Fact_Sales." On the right, two table views are shown. The "No Filter" section displays all products (A, B, C) with categories (Electronics, Furniture) and total revenue of £1,200. The "Filter from Fact_Sales Table" section applies an advanced filter (Revenue ≥ £200), showing only products A and C (Electronics) with a total revenue of £1,100. An advanced filtering panel is visible on the right.

Switch to bidirectional:

Now the filter travels both ways.

Your card suddenly shows 1 category (Electronics) because Furniture didn’t meet the filter.

A Power BI visual comparing the effects of bidirectional filtering between two tables: "Dim_Category" and "Fact_Sales." The left side shows a model diagram with both tables connected by a bidirectional relationship. On the right, two table views are displayed. The "No Filter" section shows all products and categories with a total of two categories (Electronics and Furniture). The "Filter from Fact_Sales Table" section applies an advanced filter (Revenue ≥ £200), resulting in only ProductID A (Electronics) being shown, and the category count reduced to one. An advanced filtering panel is visible in both sections.

My takeaway

It wasn’t the easiest thing to explain to my colleague, he was convinced the issue was in the DAX. To be fair, he admitted he didn’t know much about dimensional modelling.

So, pretty please: before jumping into the report view, writing measures, or building visuals, take the time to shape your data model properly and understand how your relationships behave. It’ll help you steer clear of unexpected results later on.

And if you’re already working on visuals and your DAX is acting up, don’t just stare at the formula, take a moment to check your data model. The issue might be hiding in plain sight.

Bidirectional relationships can be powerful, but they can also throw a spanner in the works when you least expect it. A small change in the model can completely shift the story your visuals are telling.

So, happy modelling, and here’s to clean relationships, well-behaved filters, and visuals that tell the story you actually meant to tell!

Thank you for joining me on this journey. Until next time, let’s keep crafting accessible insights that make a difference!

Leave a Reply

Discover more from Data Tides

Subscribe now to keep reading and get access to the full archive.

Continue reading