Richtlijnen voor bidirectionele relatiesBi-directional relationship guidance

Dit artikel is geschreven voor iedereen die gegevensmodellen maakt met Power BI Desktop.This article targets you as a data modeler working with Power BI Desktop. U vindt hier de richtlijnen voor het maken van bidirectionele modelrelaties.It provides you with guidance on when to create bi-directional model relationships. Een bidirectionele relatie is een relatie die in beide richtingen wordt gefilterd.A bi-directional relationship is one that filters in both directions.

Notitie

Dit artikel bevat geen inleiding tot modelrelaties.An introduction to model relationships is not covered in this article. Als u niet volledig vertrouwd bent met relaties, de eigenschappen ervan of het configureren ervan, is het aan te raden eerst het artikel Modelrelaties in Power BI Desktop te lezen.If you're not completely familiar with relationships, their properties or how to configure them, we recommend that you first read the Model relationships in Power BI Desktop article.

Het is ook belangrijk dat u enig begrip hebt van het ontwerpen van stervormige schema's.It's also important that you have an understanding of star schema design. Zie Meer informatie over stervormige schema's en het belang daarvan voor Power BI voor meer informatie.For more information, see Understand star schema and the importance for Power BI.

Over het algemeen adviseren we om het gebruik van bidirectionele relaties tot een minimum te beperken.Generally, we recommend minimizing the use of bi-directional relationships. Ze kunnen een negatief effect hebben op de prestaties van modelquery's en zijn mogelijk verwarrend voor de gebruikers van uw rapport.They can negatively impact on model query performance, and possibly deliver confusing experiences for your report users.

Er zijn drie scenario's waarbij bidirectionele filtering aan specifieke vereisten kan voldoen:There are three scenarios when bi-directional filtering can solve specific requirements:

Speciale modelrelatiesSpecial model relationships

Bidirectionele relaties spelen een belangrijke rol bij het maken van de volgende twee speciale modelrelatietypen:Bi-directional relationships play an important role when creating the following two special model relationship types:

  • Een-op-een Alle een-op-een-relaties moeten bidirectioneel zijn: het is niet mogelijk om dit anders te configureren.One-to-one: All one-to-one relationships must be bi-directional—it isn't possible to configure otherwise. Over het algemeen raden we u aan om deze typen relaties niet te maken.Generally, we don't recommend creating these types of relationships. Raadpleeg Richtlijnen voor een-op-een-relaties voor een volledige bespreking en alternatieve ontwerpen.For a complete discussion and alternative designs, see One-to-one relationship guidance.
  • Veel-op-veel: Voor het tot stand brengen van een relatie tussen dimensietabellen is een overbruggingstabel vereist.Many-to-many: When relating two dimension-type tables, a bridging table is required. Een bidirectioneel filter is vereist om ervoor te zorgen dat filters worden doorgegeven aan de overbruggingstabel.A bi-directional filter is required to ensure filters propagate across the bridging table. Raadpleeg Richtlijnen voor veel-op-veel-relaties (veel-op-veel-dimensies relateren) voor meer informatie.For more information, see Many-to-many relationship guidance (Relate many-to-many dimensions).

Sliceritems ‘met gegevens’Slicer items "with data"

Bidirectionele relaties kunnen slicers leveren waarmee items worden beperkt tot waar gegevens bestaan.Bi-directional relationships can deliver slicers that limit items to where data exists. (Als u bekend bent met Excel-draaitabellen en -slicers, is dit het standaardgedrag wanneer u gegevens ophaalt uit een Power BI-gegevensset of een Analysis Services-model.) Bekijk eerst het volgende modeldiagram als u wilt weten wat dit inhoudt.(If you're familiar with Excel PivotTables and slicers, it's the default behavior when sourcing data from a Power BI dataset, or an Analysis Services model.) To help explain what it means, first consider the following model diagram.

Diagram met een model met drie tabellen.

De eerste tabel heet Customer en bevat drie kolommen: Country-Region, Customer en CustomerCode.The first table is named Customer, and it contains three columns: Country-Region, Customer, and CustomerCode. De tweede tabel heet Product en bevat drie kolommen: Color, Product en SKU.The second table is named Product, and it contains three columns: Color, Product, and SKU. De derde tabel heet Sales en bevat vier kolommen: CustomerCode, OrderDate, Quantity en SKU.The third table is named Sales, and it contains four columns: CustomerCode, OrderDate, Quantity, and SKU. De tabellen Customer en Product zijn dimensietabellen, en elk ervan heeft een een-op-veel-relatie met de tabel Sales.The Customer and Product tables are dimension-type tables, and each has a one-to-many relationship to the Sales table. Elke relatie filtert in één richting.Each relationship filters in a single direction.

Het modeldiagram is zodanig gewijzigd dat de tabelrijen worden weergegeven om aan te geven hoe bidirectionele filtering werkt.To help describe how bi-directional filtering works, the model diagram has been modified to reveal the table rows. Alle voorbeelden in dit artikel zijn gebaseerd op deze gegevens.All examples in this article are based on this data.

Notitie

Het is niet mogelijk om tabelrijen weer te geven in het Power BI Desktop-modeldiagram.It's not possible to display table rows in the Power BI Desktop model diagram. Het wordt wel gedaan in dit artikel om duidelijke voorbeelden te kunnen geven.It's done in this article to support the discussion with clear examples.

Diagram met het model dat nu de tabelrijen bevat.

De rijgegevens voor de drie tabellen worden beschreven in de volgende lijst:The row details for the three tables are described in the following bulleted list:

  • De tabel Customer (klant) heeft twee rijen:The Customer table has two rows:
    • CustomerCode CUST-01, Customer Customer-1, Country-Region Verenigde StatenCustomerCode CUST-01, Customer Customer-1, Country-Region United States
    • CustomerCode CUST-02, Customer Customer-2, Country-Region AustraliëCustomerCode CUST-02, Customer Customer-2, Country-Region Australia
  • De tabel Product heeft drie rijen:The Product table has three rows:
    • SKU CL-01, Product T-shirt, Color GroenSKU CL-01, Product T-shirt, Color Green
    • SKU CL-02, Product Jeans, Color BlauwSKU CL-02, Product Jeans, Color Blue
    • SKU AC-01, Product Hoed, Color BlauwSKU AC-01, Product Hat, Color Blue
  • De tabel Sales heeft drie rijen:The Sales table has three rows:
    • OrderDate 1 januari 2019, CustomerCode CUST-01, SKU CL-01, Quantity 10OrderDate January 1 2019, CustomerCode CUST-01, SKU CL-01, Quantity 10
    • OrderDate 2 februari 2019, CustomerCode CUST-01, SKU CL-02, Quantity 20OrderDate February 2 2019, CustomerCode CUST-01, SKU CL-02, Quantity 20
    • OrderDate 3 maart 2019, CustomerCode CUST-02, SKU CL-01, Quantity 30OrderDate March 3 2019, CustomerCode CUST-02, SKU CL-01, Quantity 30

Kijk nu eens naar de volgende rapportpagina.Now consider the following report page.

Diagram met de rapportpagina met drie visuals.

De pagina bestaat uit twee slicers en een kaartvisual.The page consists of two slicers and a card visual. De eerste slicer is voor Country-Region en heeft twee items: Australië en Verenigde Staten.The first slicer is for Country-Region and it has two items: Australia and United States. Dit is momenteel gesegmenteerd op Australië.It currently slices by Australia. De tweede slicer is voor Product en heeft drie items: Hat, Jeans en T-shirt.The second slicer is for Product, and it has three items: Hat, Jeans, and T-shirt. Er zijn geen items geselecteerd (wat betekent dat er geen producten worden gefilterd).No items are selected (meaning no products are filtered). De kaartvisual bevat een hoeveelheid van 30.The card visual displays a quantity of 30.

Wanneer rapportgebruikers segmenteren op Australië, wilt u de slicer Product mogelijk beperken zodat alleen items worden weergegeven waarvan de gegevens gerelateerd zijn aan de verkoop in Australië.When report users slice by Australia, you might want to limit the Product slicer to display items where data relates to Australian sales. Dit is wat wordt bedoeld met: sliceritems weergeven ‘met gegevens’.It's what's meant by showing slicer items "with data". Dit gedrag vindt plaats als u de relatie tussen de tabellen Product en Sales configureert om te filteren in beide richtingen.You can achieve this behavior by configuring the relationship between the Product and Sales table to filter in both directions.

Diagram met een model waarin de relatie tussen de tabellen Product en Verkoop nu bidirectioneel is.

In de slicer Product wordt nu één item vermeld: T-shirt.The Product slicer now lists a single item: T-shirt. Dit item vertegenwoordigt het enige product dat is verkocht aan Australische klanten.This item represents the only product sold to Australian customers.

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

We raden u aan om te overwegen of dit ontwerp geschikt is voor uw rapportgebruikers.We first suggest you consider carefully whether this design works for your report users. Sommige rapportgebruikers vinden deze ervaring verwarrend.Some report users find the experience confusing. Ze begrijpen niet waarom sliceritems dynamisch verschijnen of verdwijnen wanneer ze met andere slicers werken.They don't understand why slicer items dynamically appear or disappear when they interact with other slicers.

Als u besluit om de sliceritems ‘met gegevens’ weer te geven, raden wij u aan om geen bidirectionele relaties te configureren.If you do decide to show slicer items "with data", we don't recommend you configure bi-directional relationships. Voor bidirectionele relaties is meer verwerking vereist, waardoor ze de queryprestaties negatief kunnen beïnvloeden, met name wanneer het aantal bidirectionele relaties in uw model toeneemt.Bi-directional relationships require more processing and so they can negatively impact on query performance—especially as the number of bi-directional relationships in your model increases.

Er is een betere manier om tot hetzelfde resultaat te komen: In plaats van bidirectionele filters te gebruiken kunt u een visualfilter toepassen op de slicer Product zelf.There's a better way to achieve the same result: Instead of using bi-directional filters, you can apply a visual-level filter to the Product slicer itself.

Laten we er even vanuit gaan dat de relatie tussen de tabellen Product en Sales niet meer in beide richtingen wordt gefilterd.Let's now consider that the relationship between the Product and Sales table no longer filters in both directions. En dat de volgende metingsdefinitie is toegevoegd aan de tabel Sales.And, the following measure definition has been added to the Sales table.

Total Quantity = SUM(Sales[Quantity])

Als u de sliceritems Product wilt weergeven ‘met gegevens’, hoeft u alleen maar te filteren op de meting Totale hoeveelheid met behulp van de voorwaarde: Is niet leeg.To show the Product slicer items "with data", it simply needs to be filtered by the Total Quantity measure using the "is not blank" condition.

Diagram met het deelvenster Filters voor de slicer Product dat nu wordt gefilterd op: Totale hoeveelheid is niet leeg.

Dimensie-naar-dimensie-analyseDimension-to-dimension analysis

Een ander scenario voor bidirectionele relaties gaat over een feitentabel zoals een overbruggingstabel.A different scenario involving bi-directional relationships treats a fact-type table like a bridging table. Op deze manier wordt ondersteuning geboden voor het analyseren van dimensietabelgegevens binnen de filtercontext van een andere dimensietabel.This way, it supports analyzing dimension-type table data within the filter context of a different dimension-type table.

Gebruik het voorbeeldmodel in dit artikel en bedenk wat de antwoorden zijn op de volgende vragen:Using the example model in this article, consider how the following questions can be answered:

  • Hoeveel kleuren zijn er verkocht aan Australische klanten?How many colors were sold to Australian customers?
  • Hoeveel landen hebben jeans aangeschaft?How many countries purchased jeans?

Beide vragen kunnen worden beantwoord zonder gegevens samen te vatten in de overbruggende feitentabel.Both questions can be answered without summarizing data in the bridging fact-type table. Het is echter wel vereist dat filters worden doorgegeven van de ene dimensietabel naar de andere.They do, however, require that filters propagate from one dimension-type table to the other. Nadat filters zijn doorgegeven via de feitentabel, kunnen de kolommen uit de dimensietabel worden samengevat met behulp van de DAX-functie DISTINCTCOUNT, en mogelijk ook met de DAX-functies MIN en MAX.Once filters propagate via the fact-type table, summarization of dimension-type table columns can be achieved using the DISTINCTCOUNT DAX function—and possibly the MIN and MAX DAX functions.

Aangezien de feitentabel zich gedraagt als een overbruggingstabel, kunt u de richtlijnen voor veel-op-veel-relaties volgen om twee dimensietabellen te relateren.As the fact-type table behaves like a bridging table, you can follow the many-to-many relationship guidance to relate two dimension-type tables. Hiervoor is vereist dat u minstens één relatie configureert voor filteren in beide richtingen.It will require configuring at least one relationship to filter in both directions. Raadpleeg Richtlijnen voor veel-op-veel-relaties (veel-op-veel-dimensies relateren) voor meer informatie.For more information, see Many-to-many relationship guidance (Relate many-to-many dimensions).

Zoals eerder in dit artikel is beschreven, heeft dit ontwerp waarschijnlijk een negatieve invloed op de prestaties en heeft het gevolgen voor de gebruikerservaring met betrekking tot sliceritems 'met gegevens'.However, as already described in this article, this design will likely result in a negative impact on performance, and the user experience consequences related to slicer items "with data". Daarom raden we u aan om in plaats hiervan bidirectionele filtering te activeren in een metingsdefinitie met behulp van de DAX-functie CROSSFILTER.So, we recommend that you activate bi-directional filtering in a measure definition by using the CROSSFILTER DAX function instead. De functie CROSSFILTER kan worden gebruikt om filterrichtingen te wijzigen - of zelfs om de relatie uit te schakelen - tijdens de evaluatie van een expressie.The CROSSFILTER function can be used to modify filter directions—or even disable the relationship—during the evaluation of an expression.

Laten we de volgende metingsdefinitie toevoegen aan de tabel Sales.Consider the following measure definition added to the Sales table. In dit voorbeeld is de modelrelatie tussen de tabellen Customer en Sales geconfigureerd om te filteren in één richting.In this example, the model relationship between the Customer and Sales tables has been configured to filter in a single direction.

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

Tijdens de evaluatie van de metingsexpressie Different Countries Sold wordt de relatie tussen de tabellen Customer en Sales in beide richtingen gefilterd.During the evaluation of the Different Countries Sold measure expression, the relationship between the Customer and Sales tables filters in both directions.

In de volgende tabelvisual ziet u de statistieken voor elk verkocht product.The following table visual present statistics for each product sold. De kolom Quantity bevat de som van alle hoeveelheidswaarden.The Quantity column is simply the sum of quantity values. De kolom Different Countries Sold vertegenwoordigt het unieke aantal waarden voor land/regio voor alle klanten die het product hebben aangeschaft.The Different Countries Sold column represents the distinct count of country-region values of all customers who have purchased the product.

Diagram met twee producten in een tabelvisual.

Volgende stappenNext steps

Bekijk de volgende resources voor meer informatie over dit artikel:For more information related to this article, check out the following resources: