Delen via


Richtlijnen voor bidirectionele relaties

Dit artikel is bedoeld voor gegevensmodellers die met Power BI Desktop werken. Het biedt u richtlijnen voor het maken van bidirectionele modelrelaties. Een bidirectionele relatie is een relatie die in beide richtingen filtert.

Notitie

In dit artikel wordt geen inleiding tot modelrelaties behandeld. Als u niet volledig bekend bent met relaties, hun eigenschappen of hoe u ze configureert, raden we u aan eerst de modelrelaties in Power BI Desktop te lezen.

Het is ook belangrijk dat u inzicht hebt in het ontwerp van stervormige schema's. Zie Meer informatie over stervormige schema's en het belang van Power BI.

Over het algemeen raden we u aan het gebruik van bidirectionele relaties te minimaliseren. Dat komt doordat ze een negatieve invloed kunnen hebben op de prestaties van modelquery's en mogelijk verwarrende ervaringen bieden voor uw rapportgebruikers.

Er zijn echter drie scenario's waarin bidirectioneel filteren specifieke vereisten kan oplossen:

Speciale modelrelaties

Bidirectionele relaties spelen een belangrijke rol bij het maken van de volgende twee speciale modelrelatietypen:

  • Een-op-een: alle een-op-een-relaties moeten bidirectioneel zijn. Het is niet mogelijk om anders te configureren. Over het algemeen raden we u niet aan om deze typen relaties te maken. Zie richtlijnen voor een een-op-een-relatievoor een volledige discussie en alternatieve ontwerppatronen.
  • Veel-op-veel: bij het koppelen van twee dimensietabellenis een overbruggingstabel vereist. Er is een bidirectioneel filter vereist om ervoor te zorgen dat filters worden doorgegeven aan de overbruggingstabel. Zie Richtlijnen voor veel-op-veel-relatiesvoor meer informatie.

Sliceropties 'met gegevens'

Bidirectionele relaties kunnen slicers leveren die opties beperken tot waar gegevens bestaan. (Als u bekend bent met Excel-draaitabellen en slicers, is dit het standaardgedrag bij het ophalen van gegevens uit een semantisch Power BI-model of een Analysis Services-model.) Als u wilt uitleggen wat dit betekent, moet u eerst het volgende modeldiagram overwegen.

Diagram met een model met drie tabellen. Het ontwerp wordt beschreven in de volgende alinea.

De eerste tabel heeft de naam Customer., en bevat drie kolommen: Country-Region, Customeren CustomerCode. De tweede tabel heeft de naam Producten bevat drie kolommen: Color, Producten SKU. De derde tabel heeft de naam Salesen bevat vier kolommen: CustomerCode, OrderDate, Quantityen SKU. De tabellen Customer en Product zijn dimensietabellen en hebben elk een een-op-veel-relatie met de Sales tabel. Elke relatie filtert in één richting.

Om te beschrijven hoe bidirectioneel filteren werkt, is het modeldiagram gewijzigd om de tabelrijen weer te geven. Alle voorbeelden in dit artikel zijn gebaseerd op deze gegevens.

Diagram waarin wordt weergegeven dat het model nu de tabelrijen weergeeft. De rijdetails worden beschreven in de volgende alinea.

De rijdetails voor de drie tabellen worden beschreven in de volgende lijst met opsommingstekens:

  • De tabel Customer heeft twee rijen:
    • CustomerCode CUST-01, CustomerCustomer-1, Country-RegionVerenigde Staten
    • CustomerCode CUST-02, CustomerCustomer-2, Country-RegionAustralia
  • De tabel Product heeft drie rijen:
    • SKU CL-01, ProductT-shirt, ColorGroen
    • SKU CL-02, ProductJeans, ColorBlue
    • SKU AC-01, ProductHat, ColorBlue
  • De tabel Sales heeft drie rijen:
    • OrderDate 1 januari 2019, CustomerCodeCUST-01, SKUCL-01, Quantity10
    • OrderDate 2 februari 2019, CustomerCodeCUST-01, SKUCL-02, Quantity20
    • OrderDate 3 maart 2019, CustomerCodeCUST-02, SKUCL-01, Quantity30

Bekijk nu de volgende rapportpagina.

Diagram met de rapportpagina met drie visuals. De details worden beschreven in de volgende alinea.

De pagina bestaat uit twee slicers en een kaartvisual. De eerste slicer is gebaseerd op het Country-Region veld en heeft twee opties: Australië en Verenigde Staten. Het segmenteert momenteel door Australië. De tweede slicer is gebaseerd op het Product veld en heeft drie opties: Hoed, Jeans en T-shirt. Er zijn geen items geselecteerd (wat betekent dat er geen producten worden gefilterd). In de kaartvisual wordt een hoeveelheid van 30 weergegeven.

Wanneer rapportgebruikers segmenteren op basis van Australië, wilt u mogelijk de productslicer beperken om opties weer te geven waarbij gegevens verband houden met met betrekking tot de Australische verkoop. Dat is wat wordt bedoeld om de snijopties 'met gegevens' weer te geven. U kunt dit gedrag bereiken door de relatie tussen de Product- en Sales tabellen in te stellen om in beide richtingen te filteren.

diagram met een model dat de relatie tussen de tabellen Product en Verkoop nu bidirectioneel is.

De productslicer bevat nu één optie: T-shirt. Deze optie vertegenwoordigt het enige product dat wordt verkocht aan Australische klanten.

Diagram met de rapportpagina met drie visuals met Product gemarkeerd. De details worden beschreven in de volgende alinea.

Ten eerste raden we u aan zorgvuldig na te denken of dit ontwerp geschikt is voor uw rapportgebruikers. Sommige rapportgebruikers vinden de ervaring verwarrend omdat ze niet begrijpen waarom sliceropties dynamisch worden weergegeven of verdwijnen wanneer ze met andere slicers werken.

Als u besluit om sliceropties 'met gegevens' weer te geven, raden we u niet aan bidirectionele relaties in te stellen. Bidirectionele relaties vereisen meer verwerking en kunnen dus negatieve gevolgen hebben voor queryprestaties, met name naarmate het aantal bidirectionele relaties in het model toeneemt.

Er is een betere manier om hetzelfde resultaat te bereiken: in plaats van bidirectionele filters te gebruiken, kunt u een filter op visueel niveau toepassen op de productslicer zelf.

Laten we nu eens kijken of de relatie tussen de Product- en Sales tabellen niet meer in beide richtingen wordt gefilterd. En de volgende metingdefinitie is toegevoegd aan de Sales tabel.

Total Quantity = SUM(Sales[Quantity])

Om de opties van de productslicer 'met gegevens' weer te geven, moet deze worden gefilterd op de maatstaf Total Quantity met behulp van de conditie 'is niet leeg'.

diagram dat laat zien dat het deelvenster Filters voor de Productslicer nu filtert op een niet lege Totale hoeveelheid.

Dimensie-naar-dimensieanalyse

Een ander scenario met bidirectionele relaties behandelt een feitentabel als een overbruggingstabel. Op deze manier ondersteunt het analyseren van dimensietabelgegevens binnen de filtercontext van een andere dimensietabel.

Bekijk met behulp van het voorbeeldmodel in dit artikel hoe de volgende vragen kunnen worden beantwoord:

  • Hoeveel kleuren zijn verkocht aan Australische klanten?
  • Hoeveel landen/regio's hebben jeans gekocht?

Beide vragen kunnen worden beantwoord zonder gegevens samen te vatten in de feitentabel om te overbruggen. Ze vereisen echter dat filters worden doorgegeven van de ene dimensietabel naar de andere. Wanneer filters worden doorgegeven via de feitentabel, kan de samenvatting van kolommen in de dimensietabel worden bereikt met behulp van de DAX-functie DISTINCTCOUNT en mogelijk de DAX-functies MIN en MAX.

Aangezien de feitentabel zich gedraagt als een overbruggingstabel, kunt u de veel-op-veel-relatierichtlijnen toepassen om twee dimensietabellen te relateren. Hiervoor moet ten minste één relatie worden ingesteld om in beide richtingen te filteren. Zie Richtlijnen voor veel-op-veel-relatiesvoor meer informatie.

Zoals al in dit artikel is beschreven, zal dit ontwerp waarschijnlijk een negatieve invloed hebben op de prestaties en de gevolgen van de gebruikerservaring met betrekking tot sliceropties 'met gegevens'. Daarom raden we u aan in plaats daarvan bidirectionele filtering in een metingdefinitie te activeren met behulp van de DAX-functie CROSSFILTER . U kunt de functie CROSSFILTER gebruiken om filterrichtingen te wijzigen (of zelfs de relatie uit te schakelen) tijdens de evaluatie van een expressie.

Houd rekening met de volgende metingdefinitie die is toegevoegd aan de tabel Sales. In dit voorbeeld is de modelrelatie tussen de Customer- en Sales tabellen ingesteld om te filteren in een enkele richting.

Different Countries Sold =
CALCULATE(
    DISTINCTCOUNT(Customer[Country-Region]),
    CROSSFILTER(
        Customer[CustomerCode],
        Sales[CustomerCode],
        BOTH
    )
)

Tijdens de evaluatie van maatregel Different Countries Sold wordt de relatie tussen de tabellen Customer en Sales in beide richtingen gefilterd.

De volgende tabelvisual bevat statistieken voor elk verkocht product. De kolom Quantity is simpelweg de som van de hoeveelheidswaarden. De kolom Different Countries Sold vertegenwoordigt het unieke aantal land-regiowaarden van alle klanten die het product hebben gekocht.

diagram waarin wordt weergegeven dat twee producten worden weergegeven in een tabelweergave. In de kolom Verkochte Landen is Jeans 1 en T-shirt 2.

Raadpleeg de volgende bronnen voor meer informatie over dit artikel: