Richtlijnen voor bidirectionele relaties

Dit artikel is bedoeld voor u als gegevensmodeller die werkt met Power BI Desktop. 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. Ze kunnen een negatieve invloed hebben op de prestaties van modelquery's en mogelijk verwarrende ervaringen bieden voor uw rapportgebruikers.

Er zijn 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:

Sliceritems 'met gegevens'

Bidirectionele relaties kunnen slicers leveren die items 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 (voorheen bekend als een gegevensset) of een Analysis Services-model.) Als u wilt uitleggen wat dit betekent, moet u eerst het volgende modeldiagram overwegen.

Diagram showing a model containing three tables. The design is described in the following paragraph.

De eerste tabel heet Customer en bevat drie kolommen: Country-Region, Customer en CustomerCode. De tweede tabel heet Product en bevat drie kolommen: Color, Product en SKU. De derde tabel heet Sales en bevat vier kolommen: CustomerCode, OrderDate, Quantity en SKU. De tabellen Klant en Product zijn dimensietabellen en hebben elk een een-op-veel-relatie met de tabel Verkoop . 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.

Notitie

Het is niet mogelijk om tabelrijen weer te geven in het Power BI Desktop-modeldiagram. Het wordt in dit artikel gedaan om de discussie met duidelijke voorbeelden te ondersteunen.

Diagram showing that the model now reveals the table rows. The row details are described in the following paragraph.

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

  • De tabel Klant 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, Kleur Groen
    • SKU CL-02, Product Jeans, Kleur Blauw
    • SKU AC-01, Product Hat, Kleur Blauw
  • De tabel Sales heeft drie rijen:
    • OrderDate 1 januari 2019, CustomerCode CUST-01, SKU CL-01, Hoeveelheid 10
    • OrderDate februari 2019, CustomerCode CUST-01, SKU CL-02, Hoeveelheid 20
    • OrderDate 3 maart 2019, CustomerCode CUST-02, SKU CL-01, Hoeveelheid 30

Bekijk nu de volgende rapportpagina.

Diagram showing the report page containing three visuals. The details are described in the following paragraph.

De pagina bestaat uit twee slicers en een kaartvisual. De eerste slicer is voor Country-Region en heeft twee items: Australië en Verenigde Staten. Het segmenteert momenteel door Australië. De tweede slicer is voor Product en heeft drie items: Hat, 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 door Australië, kunt u de slicer Product beperken om items weer te geven waarin gegevens betrekking hebben op de Australische verkoop. Dit is wat wordt bedoeld door sliceritems 'met gegevens' weer te geven. U kunt dit gedrag bereiken door de relatie tussen de tabel Product en Verkoop te configureren om in beide richtingen te filteren.

Diagram showing a model that the relationship between the Product and Sales table is now bi-directional.

De slicer Product vermeldt nu één item: T-shirt. Dit artikel vertegenwoordigt het enige product dat wordt verkocht aan Australische klanten.

Diagram showing the report page containing three visuals with Product called out. The details are described in the following paragraph.

We raden u eerst aan zorgvuldig na te denken of dit ontwerp geschikt is voor uw rapportgebruikers. Sommige rapportgebruikers vinden de ervaring verwarrend. Ze begrijpen niet waarom slicer-items dynamisch worden weergegeven of verdwijnen wanneer ze communiceren met andere slicers.

Als u besluit om sliceritems 'met gegevens' weer te geven, wordt u niet aangeraden bidirectionele relaties te configureren. Bidirectionele relaties vereisen meer verwerking en kunnen dus negatieve gevolgen hebben voor queryprestaties, met name als het aantal bidirectionele relaties in uw 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 slicer Product zelf.

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

Total Quantity = SUM(Sales[Quantity])

Als u de items van de productslicer 'met gegevens' wilt weergeven, moet deze worden gefilterd op de meting Totale hoeveelheid met behulp van de voorwaarde 'is niet leeg'.

Diagram showing that the Filters pane for the Product slicer now filters by

Dimensie-naar-dimensieanalyse

Een ander scenario met bidirectionele relaties behandelt een feitentabel als een overbruggingstabel. Op deze manier ondersteunt het analyseren van dimensietabelgegevens in 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 in de tabel voor het overbruggen van feitentypen samen te vatten. Ze vereisen echter dat filters worden doorgegeven van de ene dimensietabel naar de andere. Zodra filters zijn doorgegeven via de feitentabel, kunnen samenvatting van dimensietabelkolommen 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 volgen om twee dimensietabellen te relateren. Hiervoor moet ten minste één relatie worden geconfigureerd om in beide richtingen te filteren. Zie Richtlijnen voor veel-op-veel-relaties (Veel-op-veel-dimensies relateren) voor meer informatie.

Zoals al in dit artikel is beschreven, heeft dit ontwerp waarschijnlijk een negatieve invloed op de prestaties en de gevolgen van de gebruikerservaring met betrekking tot sliceritems 'met gegevens'. Daarom raden we u aan in plaats daarvan bidirectionele filtering in een metingdefinitie te activeren met behulp van de DAX-functie CROSSFILTER . De functie CROSSFILTER kan worden gebruikt om filterrichtingen te wijzigen (of zelfs om 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 tabellen Klant en Verkoop geconfigureerd om in één richting te filteren.

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

Tijdens de evaluatie van de metingsexpressie Verschillende landen verkocht , wordt de relatie tussen de tabellen Klant en Verkoop in beide richtingen gefilterd.

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

Diagram showing that two products are listed in a table visual. In the

Raadpleeg de volgende bronnen voor meer informatie over dit artikel: