---
title: "Power BI relationships filtering both ways | Metacenta"
description: "A bidirectional Power BI relationship lets a filter reach a table by two paths and change a total unexpectedly. How to spot one, and when both ways is right."
url: "https://metacenta.com/rules/powerbi-bidirectional-filter"
updated: "2026-10-14"
tokens: 575
---

BI semantic layer · rule powerbi-bidirectional-filter

# Power BI relationships filtering both ways

A Metacenta review checks this under the rule **Power BI relationships filter one way**. Everything below applies whether or not you ever commission one.

## What this rule checks

From a Power BI semantic model's TMDL files, this rule flags each active relationship set to `crossFilteringBehavior: bothDirections`. An inactive relationship (`isActive: false`) is not flagged, because it filters nothing until a measure turns it on.

## Why it matters

A filter can reach a table by two paths and change a total in ways a report author does not expect. It also slows every query that crosses the relationship.

## How to fix it

**Make Power BI relationships filter one way.** Make the relationship single-direction. Where one measure needs the other direction, use `CROSSFILTER` inside that measure rather than on the model.

Before:

```tmdl
relationship sales_to_customer
	fromColumn: Sales.CustomerKey
	toColumn: Customer.CustomerKey
	crossFilteringBehavior: bothDirections
```

After:

```tmdl
relationship sales_to_customer
	fromColumn: Sales.CustomerKey
	toColumn: Customer.CustomerKey
```

## When it is fine to leave

A bridge table in a many-to-many pattern often needs both directions to work. Keep it where the model is built for that, and say so in a description. Everything else should filter one way.

## What we need to check it

The `.tmdl` files from a Power BI project saved in the PBIP format. We read relationship columns, direction and the active flag.

[Ask about a review](https://metacenta.com/enquire?src=rule-powerbi-bidirectional-filter&via=md)

## Related pages

- [dbt semantic models reading unbuilt columns](https://metacenta.com/rules/semantic-column-not-built)
- [dbt semantic model keys with no unique test](https://metacenta.com/rules/semantic-primary-entity-unasserted)
- [Looker views reading tables dbt does not know](https://metacenta.com/rules/lookml-view-unbuilt-table)
- [Looker views reading raw dbt sources](https://metacenta.com/rules/lookml-view-reads-raw-source)
- [A sample review, as a client reads it](https://metacenta.com/sample)
- [All published rules](https://metacenta.com/rules)
- [How a review is assessed](https://metacenta.com/standard)
