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.
De eerste tabel heeft de naam Customer
., en bevat drie kolommen: Country-Region
, Customer
en CustomerCode
. De tweede tabel heeft de naam Product
en bevat drie kolommen: Color
, Product
en SKU
. De derde tabel heeft de naam Sales
en bevat vier kolommen: CustomerCode
, OrderDate
, Quantity
en 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.
De rijdetails voor de drie tabellen worden beschreven in de volgende lijst met opsommingstekens:
- De tabel
Customer
heeft twee rijen:-
CustomerCode
CUST-01,Customer
Customer-1,Country-Region
Verenigde Staten -
CustomerCode
CUST-02,Customer
Customer-2,Country-Region
Australia
-
- De tabel
Product
heeft drie rijen:-
SKU
CL-01,Product
T-shirt,Color
Groen -
SKU
CL-02,Product
Jeans,Color
Blue -
SKU
AC-01,Product
Hat,Color
Blue
-
- De tabel
Sales
heeft drie rijen:-
OrderDate
1 januari 2019,CustomerCode
CUST-01,SKU
CL-01,Quantity
10 -
OrderDate
2 februari 2019,CustomerCode
CUST-01,SKU
CL-02,Quantity
20 -
OrderDate
3 maart 2019,CustomerCode
CUST-02,SKU
CL-01,Quantity
30
-
Bekijk nu de volgende rapportpagina.
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.
De productslicer bevat nu één optie: T-shirt. Deze optie vertegenwoordigt het enige product dat wordt verkocht aan Australische klanten.
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'.
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.
Gerelateerde inhoud
Raadpleeg de volgende bronnen voor meer informatie over dit artikel:
- Modelrelaties in Power BI Desktop
- Stervormige schema's en het belang van Power BI begrijpen
- Richtlijnen voor een-op-een-relatie
- Richtlijnen voor veel-op-veel-relaties
- Richtlijnen voor het oplossen van problemen met relaties
- Vragen? Vraag het de Fabric Community.
- Suggesties? Ideeën bijdragen om Fabric- te verbeteren