Best practices concerning model management should be put into place to handle many-to-many relationships in Power BI without generating ambiguous relationships.
1. Use a Bridge Table (Preferred Method)
Create a separate bridge table containing unique values of the common key representing the two fact tables.
Establish one-to-many relationships with the bridge table at one end and the fact tables at the other.
Filter reports with this bridge table to avoid having direct many-to-many relationships so that ambiguity is avoided.
2. Perform TREATAS DAX Virtual Relationship
If it is impossible to change the structure of the data model, you could use TREATAS in measures to set up virtual relationships.
Example:
Measure =
CALCULATE(
SUM(Sales[Revenue]),
TREATAS(VALUES(BridgeTable[CommonKey]), Sales[CommonKey])
)
Some extra considerations about the unique operation of views apply in this case; thus, filtering will be applied at the view level and not at the fact level.
3. Composite Models with Many-to-Many (as a last resort)
Power BI allows direct many-to-many relationships, which leads to performance problems and incorrect aggregations.
In these particular solutions, ensure that bidirectional cross-filtering is switched on and off carefully so as to avoid creating circular dependencies from this setting.
Using a bridge to avoid ambiguity will keep your work efficient, reliable, and scalable in terms of data integrity in the Power BI model.