Modelrelaties in Power BI Desktop

Dit artikel is bedoeld voor het importeren van gegevensmodelleerders die met Power BI Desktop werken. Het is een belangrijk onderwerp over het ontwerpen van modellen dat essentieel is voor het leveren van intuïtieve, nauwkeurige en optimale modellen.

Zie Stervormig schema en het belang voor Power BI voor meer informatie over een optimaal modelontwerp, inclusief tabelrollen en relaties.

Doel van relatie

Met een modelrelatie worden filters die zijn toegepast op de kolom van de ene modeltabel doorgegeven aan een andere modeltabel. Filters worden doorgegeven zolang er een relatiepad is dat kan worden gevolgd. Hierbij kunnen filters aan meerdere tabellen worden doorgegeven.

Relatiepaden zijn deterministisch, wat betekent dat filters altijd op dezelfde manier worden doorgegeven en zonder willekeurige variatie. Relaties kunnen echter worden uitgeschakeld of gewijzigde filtercontext door modelberekeningen hebben die gebruikmaken van specifieke DAX-functies. Raadpleeg het onderwerp Relevante DAX-functies verderop in dit artikel voor meer informatie.

Belangrijk

Modelrelaties dwingen gegevensintegriteit niet af. Zie het onderwerp Relatie-evaluatie verderop in dit artikel voor meer informatie, waarin wordt uitgelegd hoe modelrelaties zich gedragen wanneer er problemen zijn met de gegevensintegriteit van uw gegevens.

Hier ziet u hoe relaties filters doorgeven met een voorbeeld met animatie.

Diagram met animatie van het doorgeven van relatiefilters.

In dit voorbeeld bestaat het model uit vier tabellen: Categorie, Product, Jaar en Verkoop. De tabel Categorie is gekoppeld aan de tabel Product en de tabel Product is gekoppeld aan de tabel Verkoop. De tabel Jaar is ook gekoppeld aan de tabel Verkoop. Alle relaties zijn een-op-veel (de details worden verderop in dit artikel beschreven).

Een query, mogelijk gegenereerd door een Power BI-kaartvisual, vraagt de totale verkoophoeveelheid op voor verkooporders die zijn gemaakt voor één categorie, Cat-A, en voor één jaar, CY2018. Daarom ziet u filters toegepast op de tabellen Categorie en Jaar. Het filter voor de tabel Categorie wordt doorgegeven aan de tabel Product om twee producten te isoleren die zijn toegewezen aan de categorie Cat-A. Vervolgens worden de filters van de tabel Product doorgegeven aan de tabel Verkoop om slechts twee verkooprijen voor deze producten te isoleren. Deze twee verkooprijen vertegenwoordigen de verkoop van producten die zijn toegewezen aan de categorie Cat-A. De gecombineerde hoeveelheid is 14 eenheden. Tegelijkertijd wordt het filter in de tabel Jaar doorgegeven om de tabel Verkoop verder te filteren, wat resulteert in slechts één verkooprij voor producten die zijn toegewezen aan categorie Cat-A en die zijn besteld in jaar CY2018. De hoeveelheid die door de query wordt geretourneerd, is 11 eenheden. Houd er rekening mee dat als er meerdere filters worden toegepast op een tabel (zoals de tabel Verkoop in dit voorbeeld), het altijd gaat om een AND-bewerking, waarbij alle voorwaarden waar moeten zijn.

Ontwerpprincipes voor stervormige schema's toepassen

We raden u aan stervormige schemaontwerpprincipes toe te passen om een model te produceren dat uit dimensie- en feitentabellen bestaat. Het is gebruikelijk om Power BI in te stellen om regels af te dwingen die dimensietabellen filteren, zodat modelrelaties deze filters efficiënt kunnen doorgeven aan feitentabellen.

De volgende afbeelding is het modeldiagram van het gegevensmodel voor verkoopanalyse van Adventure Works. Het toont een stervormig schemaontwerp dat bestaat uit één feitentabel met de naam Sales. De andere vier tabellen zijn dimensietabellen die ondersteuning bieden voor de analyse van verkoopmetingen op datum, status, regio en product. Let op de modelrelaties die alle tabellen verbinden. Deze relaties geven filters (direct of indirect) door aan de tabel Verkoop .

Schermopname van een Power BI Desktop modeldiagram met de tabellen en relaties, zoals beschreven in de vorige alinea.

Losgekoppelde tabellen

Het is ongebruikelijk dat een modeltabel niet aan een andere modeltabel is gekoppeld. Een dergelijke tabel in een geldig modelontwerp wordt beschreven als een niet-verbonden tabel. Een losgekoppelde tabel is niet bedoeld om filters door te geven aan andere modeltabellen. In plaats daarvan accepteert het 'gebruikersinvoer' (mogelijk met een slicervisual), zodat modelberekeningen de invoerwaarde op een zinvolle manier kunnen gebruiken. Denk bijvoorbeeld aan een niet-verbonden tabel die is geladen met een bereik van wisselkoerswaarden. Zolang een filter wordt toegepast om te filteren op één tariefwaarde, kan een metingexpressie die waarde gebruiken om verkoopwaarden te converteren.

Met de What if-parameter van Power BI Desktop kan een losgekoppelde tabel worden gemaakt. Zie Een What if-parameter maken en gebruiken om variabelen in Power BI Desktop te visualiseren voor meer informatie.

Eigenschappen van relaties

Een modelrelatie verbindt één kolom in een tabel met één kolom in een andere tabel. (Er is één specifiek geval waarin deze vereiste niet waar is en deze alleen van toepassing is op relaties met meerdere kolommen in DirectQuery-modellen. Zie het artikel OVER DE DAX-functie COMBINEVALUES voor meer informatie.)

Notitie

Het is niet mogelijk om een kolom te koppelen aan een andere kolom in dezelfde tabel. Dit concept wordt soms verward met de mogelijkheid om een externe sleutelbeperking voor een relationele database te definiëren die zelf naar een tabel verwijst. U kunt dit concept van een relationele database gebruiken om bovenliggende en onderliggende relaties op te slaan (elke werknemersrecord is bijvoorbeeld gerelateerd aan een 'rapporteert aan' werknemer). U kunt modelrelaties echter niet gebruiken om een modelhiërarchie te genereren op basis van dit type relatie. Zie Bovenliggende en onderliggende functies als u een bovenliggende en onderliggende hiërarchie wilt maken.

Kardinaliteit

Elke modelrelatie wordt gedefinieerd door een kardinaliteitstype. Er zijn vier opties voor het type kardinaliteit, die de gegevenskenmerken van de gerelateerde kolommen 'van' en 'aan' vertegenwoordigen. De 'een'-zijde betekent dat de kolom unieke waarden bevat; de 'veel'-zijde betekent dat de kolom dubbele waarden kan bevatten.

Notitie

Als een bewerking voor gegevensvernieuwing probeert dubbele waarden te laden in een kolom met een 'een'-zijde, mislukt de volledige gegevensvernieuwing.

De vier opties, samen met de bijbehorende verkorte notaties, worden beschreven in de volgende lijst met opsommingstekens:

  • Een-op-veel (1:*)
  • Veel-op-een (*:1)
  • Een-op-een (1:1)
  • Veel-op-veel (*:*)

Wanneer u een relatie maakt in Power BI Desktop, detecteert de ontwerper automatisch het type kardinaliteit en stelt deze in. Power BI Desktop voert een query uit op het model om te weten welke kolommen unieke waarden bevatten. Voor importmodellen wordt gebruikgemaakt van interne opslagstatistieken; Voor DirectQuery-modellen worden profileringsquery's naar de gegevensbron verzonden. Soms kan Power BI Desktop het echter verkeerd hebben. Dit kan verkeerd zijn wanneer tabellen nog moeten worden geladen met gegevens, of omdat kolommen die naar verwachting dubbele waarden bevatten, momenteel unieke waarden bevatten. In beide gevallen kunt u het type kardinaliteit bijwerken als een kolom met een 'een'-zijde enkele waarden bevat (of als de tabel nog moet worden geladen met rijen gegevens).

Een-op-veel (en veel-op-een) kardinaliteit

De opties voor een-op-veel - en veel-op-een-kardinaliteit zijn in wezen hetzelfde en zijn ook de meest voorkomende kardinaliteitstypen.

Wanneer u een een-op-veel- of veel-op-een-relatie configureert, kiest u de relatie die overeenkomt met de volgorde waarin u de kolommen hebt gekoppeld. Denk na over hoe u de relatie van de tabel Product met de tabel Verkoop zou configureren met behulp van de kolom ProductID die in elke tabel staat. Het type kardinaliteit zou een-op-veel zijn, omdat de kolom ProductID in de tabel Product unieke waarden bevat. Als u de tabellen in omgekeerde richting hebt gekoppeld, Verkoop aan product, is de kardinaliteit veel-op-een.

Een-op-een-kardinaliteit

Een een-op-een-relatie betekent dat beide kolommen unieke waarden bevatten. Dit type kardinaliteit is niet gebruikelijk en doet vermoeden dat het modelontwerp niet optimaal is, omdat er redundante gegevens worden opgeslagen.

Raadpleeg Richtlijnen voor een-op-een-relaties voor meer informatie over het gebruik van dit type kardinaliteit.

Veel-op-veel-kardinaliteit

Een veel-op-veel-relatie betekent dat beide kolommen dubbele waarden kunnen bevatten. Dit type kardinaliteit wordt zelden gebruikt. Het is doorgaans handig bij het ontwerpen van complexe modelvereisten. U kunt het gebruiken om veel-op-veel-feiten te relateren of om feiten met een hogere korrel te relateren. Wanneer bijvoorbeeld verkoopdoelfeits worden opgeslagen op productcategorieniveau en de productdimensietabel op productniveau.

Zie Richtlijnen voor veel-op-veel-relaties voor hulp bij het gebruik van dit type kardinaliteit.

Notitie

Het type kardinaliteit Veel-op-veel wordt momenteel niet ondersteund voor modellen die zijn ontwikkeld voor Power BI Report Server.

Tip

In Power BI Desktop modelweergave kunt u het kardinaliteitstype van een relatie interpreteren door te kijken naar de indicatoren (1 of *) aan weerszijden van de relatielijn. Als u wilt bepalen welke kolommen gerelateerd zijn, moet u de relatielijn selecteren of de cursor erop aanwijzen om de kolommen te markeren.

Schermopname van twee tabellen in het modeldiagram met de kardinaliteitsindicatoren gemarkeerd.

Kruisfilterrichting

Elke modelrelatie wordt gedefinieerd met een kruisfilterrichting. Uw instelling bepaalt de richting(en) die door filters worden doorgegeven. De mogelijke opties voor kruislings filteren zijn afhankelijk van het type kardinaliteit.

Type kardinaliteit Kruisfilteropties
Een-op-veel (of veel-op-een) Enkel
Beide
Een-op-een Beide
Veel-op-veel Enkel (Tabel1 naar tabel2)
Enkel (Tabel2 naar tabel1)
Beide

De kruisfilterrichting Enkel betekent 'een richting' en Beide betekent 'beide richtingen'. Een relatie die wordt gefilterd in beide richtingen, wordt doorgaans beschreven als bidirectioneel.

Voor een-op-veel-relaties is de kruisfilterrichting altijd van de 'een'-kant en optioneel van de 'veel'-kant (bidirectioneel). Voor een-op-een-relaties komt de kruisfilterrichting altijd uit beide tabellen. Ten slotte kan de kruisfilterrichting voor veel-op-veel-relaties afkomstig zijn van een van de tabellen of van beide tabellen. Houd er rekening mee dat wanneer het type kardinaliteit een 'een'-zijde bevat, deze filters altijd van die zijde worden doorgegeven.

Wanneer de kruisfilterrichting is ingesteld op Beide, wordt er een andere eigenschap beschikbaar. Er kan bidirectioneel filteren worden toegepast wanneer Power BI regels voor beveiliging op rijniveau afdwingt. Zie Beveiliging op rijniveau (RLS) met Power BI Desktop voor meer informatie over beveiliging op rijniveau.

U kunt de kruisfilterrichting van de relatie wijzigen, inclusief het uitschakelen van filterdoorgifte, met behulp van een modelberekening. Dit wordt bereikt met behulp van de DAX-functie CROSSFILTER.

Houd er rekening mee dat bidirectionele relaties een negatieve invloed kunnen hebben op de prestaties. Als u een bidirectionele relatie wilt configureren, kan dit leiden tot dubbelzinnige paden voor het doorgeven van filters. In dit geval kan Power BI Desktop de relatiewijziging mogelijk niet doorvoeren en wordt er een foutbericht weer gegeven. Soms kan Power BI Desktop echter toestaan dat er ambigue relatiepaden tussen tabellen worden gedefinieerd. Het oplossen van dubbelzinnigheid in relatiepaden wordt verderop in dit artikel beschreven.

We raden u aan om bidirectionele filtering alleen naar behoefte te gebruiken. Raadpleeg Richtlijnen voor bidirectionele relaties voor meer informatie.

Tip

In de modelweergave van Power BI Desktop kunt u de kruisfilterrichting van een relatie interpreteren door de pijlpunt(en) op de relatielijn te bekijken. Een enkele pijlpunt vertegenwoordigt een filter met één richting in de richting van de pijlpunt en een dubbele pijlpunt vertegenwoordigt een bidirectionele relatie.

Schermopname van twee tabellen in het modeldiagram met de kruisfilterpijlpunt gemarkeerd.

Deze relatie activeren

U kunt slechts één actief pad voor het doorsturen van filters tussen twee modeltabellen gebruiken. Het is echter mogelijk om extra relatiepaden te introduceren, maar u moet deze relaties instellen als inactief. Inactieve relaties kunnen alleen actief worden gemaakt tijdens de evaluatie van een modelberekening. Dit wordt bereikt met behulp van de DAX-functie USERELATIONSHIP .

Over het algemeen raden we u aan om, waar mogelijk, actieve relaties te definiëren. Ze verbreedt het bereik en de mogelijkheden van de wijze waarop rapportauteurs uw model kunnen gebruiken. Het gebruik van alleen actieve relaties betekent dat rollenspeldimensietabellen moeten worden gedupliceerd in uw model.

In specifieke omstandigheden kunt u echter een of meer inactieve relaties definiëren voor een rollenspeldimensietabel. U kunt dit ontwerp overwegen wanneer:

  • Rapportvisuals hoeven niet tegelijkertijd te filteren op verschillende rollen.
  • U gebruikt de DAX-functie USERELATIONSHIP om een specifieke relatie te activeren voor relevante modelberekeningen.

Raadpleeg Richtlijnen voor actieve versus inactieve relaties voor meer informatie.

Tip

In de modelweergave van Power BI Desktop kunt u de status Actief of Inactief van een relatie bekijken. Een actieve relatie wordt weergegeven met een ononderbroken lijn en een inactieve relatie wordt weergegeven als een stippellijn.

Schermopname van twee tabellen in het modeldiagram en twee relaties; één ononderbroken lijn voor actief en één stippellijn voor inactief

Referentiële integriteit aannemen

De eigenschap Referentiële integriteit aannemen is alleen beschikbaar voor een-op-veel- en een-op-een-relaties tussen twee DirectQuery-opslagmodustabellen die tot dezelfde brongroep behoren. U kunt deze eigenschap alleen inschakelen als de kolom aan de 'veel'-zijde geen NULL's bevat.

Wanneer deze optie is ingeschakeld, worden de twee tabellen door systeemeigen query's die naar de gegevensbron worden verzonden, samengevoegd met behulp van een INNER JOIN in plaats van een OUTER JOIN. Het inschakelen van deze eigenschap is in het algemeen beter voor de queryprestaties, hoewel de specifieke gegevensbron hierbij ook een rol speelt.

Schakel deze eigenschap altijd in als er een beperking bestaat voor de refererende databasesleutel tussen de twee tabellen. Zelfs wanneer er geen beperking voor een refererende sleutel bestaat, kunt u overwegen de eigenschap in te schakelen zolang u bepaalde gegevensintegriteit hebt.

Belangrijk

Als de gegevensintegriteit is aangetast, worden de niet-overeenkomende rijen tussen de tabellen door de inner join geëlimineerd. Denk bijvoorbeeld aan een modeltabel Verkoop met de kolomwaarde ProductID die niet voorkwam in de gerelateerde tabel Product . Bij het doorgeven van filters uit de tabel Product naar de tabel Verkoop worden verkooprijen voor onbekende producten verwijderd. Dit zou resulteren in een negatief beeld van de verkoopresultaten.

Zie Instellingen voor referentiële integriteit aannemen in Power BI Desktop voor meer informatie.

Relevante DAX-functies

Er zijn verschillende DAX-functies die relevant zijn voor modelrelaties. In de volgende lijst wordt elke functie kort beschreven:

  • GERELATEERD: haalt de waarde op van de 'een'-kant van een relatie. Dit is handig wanneer u berekeningen uit verschillende tabellen gebruikt die in rijcontext worden geëvalueerd.
  • RELATEDTABLE: Haal een tabel met rijen op van de 'veel'-kant van een relatie.
  • USERELATIONSHIP: Hiermee staat u toe dat een berekening een inactieve relatie gebruikt. (Technisch gezien wijzigt deze functie het gewicht van een specifieke inactieve modelrelatie, waardoor het gebruik ervan wordt beïnvloed.) Dit is handig wanneer uw model een rollenspeldimensietabel bevat en u ervoor kiest om inactieve relaties te maken op basis van deze tabel. U kunt deze functie ook gebruiken om dubbelzinnigheid in filterpaden op te lossen.
  • CROSSFILTER: Hiermee wijzigt u de richting van de relatie tussen filters (van enkel naar beide), of wordt het doorgeven van filters uitgeschakeld (geen). Dit is handig wanneer u modelrelaties wilt wijzigen of negeren tijdens de evaluatie van een specifieke berekening.
  • COMBINEVALUES: Hiermee worden twee of meer tekenreeksen samengevoegd tot één tekenreeks. Het doel van deze functie is ter ondersteuning van relaties met meerdere kolommen in DirectQuery-modellen wanneer tabellen tot dezelfde brongroep behoren.
  • TREATAS: Hiermee wordt het resultaat van een tabelexpressie toegepast als filters voor kolommen uit een losgekoppelde tabel. Het is handig in geavanceerde scenario's wanneer u een virtuele relatie wilt maken tijdens de evaluatie van een specifieke berekening.
  • Bovenliggende en onderliggende functies: een familie van gerelateerde functies die u kunt gebruiken om berekende kolommen te genereren om een bovenliggende/onderliggende hiërarchie te naturaliseren. Vervolgens kunt u deze kolommen gebruiken om een hiërarchie op vast niveau te maken.

Relaties evalueren

Modelrelaties worden bij een evaluatie geclassificeerd als gewoon of beperkt. Dit is geen configureerbare relatie-eigenschap. Dit wordt in feite afgeleid van het type kardinaliteit en de gegevensbron van de twee gerelateerde tabellen. Het is belangrijk om inzicht te krijgen in het evaluatietype omdat de prestaties kunnen worden beïnvloed als de gegevensintegriteit wordt aangetast. Deze implicaties en gevolgen voor de integriteit worden in dit onderwerp beschreven.

Allereerst is het belangrijk dat u enige theoretische kennis over modellen hebt om de evaluatie van relaties volledig te begrijpen.

Een import- of DirectQuery-model haalt alle gegevens op uit de Vertipaq-cache of de brondatabase. In beide gevallen kan Power BI bepalen dat er een 'een'-zijde van een relatie bestaat.

Een samengesteld model kan echter bestaan uit tabellen met verschillende opslagmodi (importeren, DirectQuery of dual) of meerdere DirectQuery-bronnen. Elke bron, inclusief de Vertipaq-cache met geïmporteerde gegevens, wordt beschouwd als een brongroep. Modelrelaties kunnen vervolgens worden geclassificeerd als een interne brongroep of een inter/cross-brongroep. Een relatie binnen een brongroep verbindt twee tabellen binnen een brongroep, terwijl een relatie tussen meerdere brongroepen tabellen in twee brongroepen met elkaar verbindt. Houd er rekening mee dat relaties in import- of DirectQuery-modellen altijd binnen een brongroep zijn.

Hier volgt een voorbeeld van een samengesteld model.

Diagram van een samengesteld model dat uit twee brongroepen bestaat.

In dit voorbeeld bestaat het samengestelde model uit twee brongroepen: een Vertipaq-brongroep en een DirectQuery-brongroep. De Vertipaq-brongroep bevat drie tabellen en de DirectQuery-brongroep bevat twee tabellen. Er bestaat één relatie tussen meerdere brongroepen om een tabel in de Vertipaq-brongroep te koppelen aan een tabel in de DirectQuery-brongroep.

Gewone relaties

Een modelrelatie is gewoon wanneer de query-engine de 'een'-zijde van de relatie kan bepalen. Er wordt bevestigd dat de 'een'-zijde enkele waarden bevat. Alle een-op-veel-relaties binnen brongroepen zijn normale relaties.

In het volgende voorbeeld zijn er twee reguliere relaties, beide gemarkeerd als R. Relaties omvatten de een-op-veel-relatie in de Vertipaq-brongroep en de een-op-veel-relatie in de DirectQuery-bron.

Diagram van een samengesteld model dat bestaat uit twee brongroepen met de reguliere relaties gemarkeerd.

Voor importmodellen, waarbij alle gegevens worden opgeslagen in de Vertipaq-cache, maakt Power BI een gegevensstructuur voor elke reguliere relatie tijdens het vernieuwen van gegevens. De gegevensstructuren bestaan uit geïndexeerde toewijzingen van alle kolom-naar-kolom-waarden. Het doel hiervan is het koppelen van tabellen tijdens het uitvoeren van query's te versnellen.

Tijdens het uitvoeren van query's kunnen normale relaties tabeluitbreidingen uitvoeren. Tabeluitbreiding resulteert in het maken van een virtuele tabel. Hierin worden de systeemeigen kolommen van de basistabel opgenomen en deze worden vervolgens uitgebreid naar gekoppelde tabellen. Voor importtabellen wordt tabeluitbreiding uitgevoerd in de query-engine; voor DirectQuery-tabellen wordt dit gedaan in de systeemeigen query die naar de brondatabase wordt verzonden (zolang de eigenschap Referentiële integriteit aannemen niet is ingeschakeld). De query-engine past vervolgens de filters toe op de uitgebreide tabel en groepeert de waarden in de kolommen van deze tabel.

Notitie

Inactieve relaties worden ook uitgebreid, zelfs wanneer de relatie niet wordt gebruikt door een berekening. Bidirectionele relaties hebben geen invloed op tabeluitbreiding.

Voor een-op-veel-relaties vindt tabeluitbreiding plaats van de 'veel' naar de 'een'-zijde met behulp van LEFT OUTER JOIN semantiek. Als er geen overeenkomende waarde bestaat tussen de 'veel'-zijde en de 'een'-zijde, wordt er een lege virtuele rij toegevoegd aan de 'een'-zijde van de tabel. Dit gedrag is alleen van toepassing op normale relaties, niet op beperkte relaties.

Tabeluitbreiding vindt ook plaats voor een-op-een-relaties binnen brongroepen, maar met behulp van FULL OUTER JOIN semantiek. Dit jointype zorgt ervoor dat lege virtuele rijen aan beide zijden worden toegevoegd, indien nodig.

Lege virtuele rijen zijn in feite onbekende leden. Onbekende leden vertegenwoordigen schendingen van referentiële integriteit, waarbij de 'veel'-zijde geen bijbehorende waarde heeft aan de 'een'-zijde. In het ideale geval zouden deze lege waarden niet bestaan. Ze kunnen worden geëlimineerd door de brongegevens op te schonen of te herstellen.

Hier ziet u hoe tabeluitbreiding werkt met een voorbeeld met animatie.

Diagram met animatie van tabeluitbreiding.

In dit voorbeeld bestaat het model uit drie tabellen: Categorie, Product en Verkoop. De tabel Categorie is gekoppeld aan de tabel Product met een een-op-veel-relatie en de tabel Product is gekoppeld aan de tabel Verkoop met een een-op-veel-relatie. De tabel Categorie bevat twee rijen, de tabel Product bevat drie rijen en de tabellen Verkoop bevatten vijf rijen. Er zijn overeenkomende waarden aan beide zijden van alle relaties, wat betekent dat er geen schendingen van de referentiële integriteit zijn. Tijdens het uitvoeren van de query wordt er een uitgebreide tabel getoond. De tabel bestaat uit de kolommen van alle drie de tabellen. Het is in feite een gedenormaliseerd perspectief van de gegevens in de drie tabellen. Er wordt een nieuwe rij toegevoegd aan de tabel Verkoop en deze heeft een productie-id-waarde (9) die geen overeenkomende waarde bevat in de tabel Product. Dit is een schending van de referentiële integriteit. In de uitgebreide tabel bevat de nieuwe rij (lege) waarden in de kolommen van de tabellen Categorie en Product.

Beperkte relaties

Een model relatie is beperkt wanneer er geen gegarandeerde 'een'-zijde is. Een beperkte relatie kan om twee redenen optreden:

  • De relatie gebruikt een veel-op-veel-kardinaliteit (zelfs als een of beide kolommen unieke waarden bevatten).
  • De relatie is een bronoverschrijdende groep (wat alleen het geval kan zijn voor samengestelde modellen).

In het volgende voorbeeld zijn er twee beperkte relaties, beide gemarkeerd als L. De twee relaties omvatten de veel-op-veel-relatie in de Vertipaq-brongroep en de een-op-veel-relatie tussen brongroepen.

Diagram van een samengesteld model dat bestaat uit twee tabellen met de beperkte relaties gemarkeerd.

Voor importmodellen worden gegevensstructuren nooit gemaakt voor beperkte relaties. In dat geval worden tabeldeelnames tijdens de query door Power BI opgelost.

Tabeluitbreidingen vindt nooit plaats voor beperkte relaties. Tabelkoppelingen worden bereikt met behulp van INNER JOIN semantiek en daarom worden lege virtuele rijen niet toegevoegd om schendingen van referentiële integriteit te compenseren.

Er zijn andere beperkingen met betrekking tot beperkte relaties:

  • De RELATED DAX-functie kan niet worden gebruikt om de kolomwaarden aan de 'een'-zijde op te halen.
  • Het afdwingen van beveiliging op rijniveau heeft topologiebeperkingen.

Tip

In Power BI Desktop modelweergave kunt u een relatie interpreteren als beperkt. Een beperkte relatie wordt weergegeven met haakjesachtige markeringen ( ) na de kardinaliteitsindicatoren.

Schermopname van twee tabellen in het modeldiagram met de beperkte relatie gemarkeerd.

Dubbelzinnigheid van relatiepad oplossen

Bidirectionele relaties kunnen leiden tot meerdere, en dus dubbelzinnige, filterdoorgiftepaden tussen modeltabellen. Bij het evalueren van dubbelzinnigheid kiest Power BI het filterdoorgiftepad op basis van de prioriteit en het gewicht.

Prioriteit

Prioriteitslagen definiëren een reeks regels die Power BI gebruikt om dubbelzinnigheid in relatiepaden op te lossen. De eerste regelovereenkomst bepaalt het pad dat Power BI volgt. In elke onderstaande regel wordt beschreven hoe filters van een brontabel naar een doeltabel stromen.

  1. Een pad dat bestaat uit een-op-veel-relaties.
  2. Een pad dat bestaat uit een-op-veel- of veel-op-veel-relaties.
  3. Een pad dat bestaat uit veel-op-een-relaties.
  4. Een pad dat bestaat uit een-op-veel-relaties van de brontabel naar een tussenliggende tabel, gevolgd door veel-op-een-relaties van de tussenliggende tabel naar de doeltabel.
  5. Een pad dat bestaat uit een-op-veel- of veel-op-veel-relaties van de brontabel naar een tussenliggende tabel, gevolgd door veel-op-een- of veel-op-veel-relaties van de tussenliggende tabel naar de doeltabel.
  6. Een ander pad.

Wanneer een relatie is opgenomen in alle beschikbare paden, wordt deze uit alle paden verwijderd.

Gewicht

Elke relatie in een pad heeft een gewicht. Standaard is het gewicht van elke relatie gelijk, tenzij de functie USERELATIONSHIP wordt gebruikt. Het padgewicht is het maximum van alle relatiegewichten langs het pad. Power BI gebruikt de padgewichten om dubbelzinnigheid tussen meerdere paden in dezelfde prioriteitslaag op te lossen. Er wordt geen pad met een lagere prioriteit gekozen, maar het pad met het hogere gewicht. Het aantal relaties in het pad heeft geen invloed op het gewicht.

U kunt het gewicht van een relatie beïnvloeden met behulp van de functie USERELATIONSHIP . Het gewicht wordt bepaald door het geneste niveau van de aanroep van deze functie, waarbij de binnenste aanroep het hoogste gewicht krijgt.

Bekijk het volgende voorbeeld. De meting Productverkoop wijst een hoger gewicht toe aan de relatie tussen Sales[ProductID] en Product[ProductID], gevolgd door de relatie tussen Inventory[ProductID] en Product[ProductID].

Product Sales = 
CALCULATE(
    CALCULATE(
        SUM(Sales[SalesAmount]), 
        USERELATIONSHIP(Sales[ProductID], Product[ProductID])
    ),
    USERELATIONSHIP(Inventory[ProductID], Product[ProductID])
)

Notitie

Als Power BI meerdere paden detecteert die dezelfde prioriteit en hetzelfde gewicht hebben, wordt een dubbelzinnige padfout geretourneerd. In dit geval moet u de dubbelzinnigheid oplossen door het gewicht van relaties te beïnvloeden met behulp van de functie USERELATIONSHIP of door modelrelaties te verwijderen of te wijzigen.

Voorkeuren voor prioriteit

De volgende lijst geeft een overzicht van de prestaties bij het doorgeven van filters, van de snelste tot de langzaamste prestaties:

  1. Een-op-veel-relatie binnen een brongroep
  2. Veel-op-veel-modelrelaties die worden bereikt met een tussenliggende tabel en die betrekking hebben op ten minste één bidirectionele relatie
  3. Veel-op-veel-kardinaliteitsrelaties
  4. Relaties tussen meerdere brongroepen

Volgende stappen

Bekijk de volgende bronnen voor meer informatie over dit artikel: