How to filter one fact table by the same dimension in several roles, such as order date and ship date, with inactive relationships or copies of the table.
From Ultra Transcenders PL-300 by Tony Rough (coming December 2026)
A role-playing dimension is one dimension that filters the same fact table in different ways: a Date table that can mean order date, ship date or due date, or an Airport table that can mean departure or arrival airport. Because only one relationship between two tables can be active, Power BI offers two designs.
Create all the relationships; one is active (usually the most common role, such as order date) and the rest are inactive (dashed lines). Measures that need another role activate it:
Orders Shipped =
CALCULATE (
COUNTROWS ( Sales ),
USERELATIONSHIP ( 'Date'[Date], Sales[ShipDate] )
)
USERELATIONSHIP takes the two related columns and engages the inactive relationship only while this expression is evaluated; the active relationship becomes inactive for that calculation. Figure 5.1 shows the swap.
Duplicate the dimension so each role has its own table with an active relationship. For an Import table, create a calculated table that references the original; for a DirectQuery table, duplicate the Power Query query (Power Query reference queries also work). Rename columns so visuals are self-describing (Ship Year, Departure City).
Ship Date = 'Date'
A calculated-table clone copies columns only. Formats, descriptions and hierarchies aren’t copied, so set them again.
| Requirement | Inactive relationships + USERELATIONSHIP | Duplicate table per role |
|---|---|---|
| Filter or group by two roles in the same visual (order date against ship date) | Not possible | Supported |
| Report authors use columns directly without writing measures | Only the active role works | Every role works |
| Number of measures | One extra measure per role per calculation | No extra measures |
| Model size | Smallest | Slightly larger (dimensions are usually small) |
| Row-level security | RLS doesn’t propagate through inactive relationships, even when USERELATIONSHIP is used | RLS propagates through each active relationship |
| Q&A and natural-language tools | Only the active relationship is usable | All roles usable |
Microsoft recommends active relationships wherever possible, especially when RLS roles exist, which means duplicating role-playing dimensions. Inactive relationships suit cases where reports never filter by two roles at once and only a few measures need the alternative role. Blank ship dates on unshipped orders also explain a (Blank) item in a Date slicer: table expansion includes inactive relationships.
Common trap: Securing a model with RLS on a Date or Airport table and relying on USERELATIONSHIP measures to apply it to the other roles - RLS filters propagate only through active relationships, never through inactive ones, even inside USERELATIONSHIP.
This note is one section of Ultra Transcenders PL-300: Microsoft Power BI Data Analyst, an independent study guide that explains every topic the exam covers by technology, with comparison tables, diagrams and the common traps, plus a glossary linked to Microsoft Learn.
Due on Amazon in December 2026, in Kindle and paperback editions.
About the book · PL-300 terms in the glossary · All PL-300 study notes
How a referenced query differs from a duplicated one, and what each choice means for refresh, maintenance and query dependencies.
Where to change a source's credentials and path, and how None, Private, Organizational and Public privacy levels affect combining data.
How CALCULATE changes filter context and when to use ALL, REMOVEFILTERS, KEEPFILTERS, USERELATIONSHIP and other modifiers.
How to report stock levels and account balances that sum across categories but not over time, using LASTDATE, LASTNONBLANK and closing-balance functions.
Which way of getting reports to readers fits each audience, licence and security need.
Which sources, storage modes and refresh scenarios need an on-premises data gateway and which connect directly from the cloud.
How to define static and dynamic row-level security roles in Power BI Desktop with DAX filters and USERPRINCIPALNAME.