De instelling Referentiële integriteit aannemen toepassen in Power BI Desktop

Wanneer u verbinding maakt met een gegevensbron met Behulp van DirectQuery, kunt u de selectie Referentiële integriteit aannemen gebruiken om efficiëntere query's uit te voeren op uw gegevensbron. Deze functie heeft een paar vereisten van de onderliggende gegevens en is alleen beschikbaar wanneer u DirectQuery gebruikt.

Als u Referentiële integriteit aannemen instelt, kunnen query's in de gegevensbron INNER JOIN-instructies gebruiken in plaats van OUTER JOIN, waardoor de efficiëntie van query's wordt verbeterd.

Screenshot of an Edit Relationship dialog to select Assume Referential Integrity.

Vereisten voor het gebruik van Referentiële integriteit aannemen

Deze instelling is een geavanceerde instelling en is alleen ingeschakeld wanneer u verbinding maakt met gegevens met Behulp van DirectQuery. De volgende vereisten zijn nodig om referentiële integriteit uit te voeren om goed te kunnen werken:

  • Gegevens in de kolom Van in de relatie zijn nooit null of leeg
  • Voor elke waarde in de kolom Van is er een corresponderende waarde in de kolom Aan

In deze context is de kolom Van de kolom Veel in een een-op-veel-relatie of de kolom in de eerste tabel in een een-op-een-relatie.

Voorbeeld van het gebruik van referentiële integriteit aannemen

In het volgende voorbeeld ziet u hoe Referentiële integriteit zich gedraagt wanneer deze wordt gebruikt in gegevensverbindingen. Het voorbeeld maakt verbinding met een gegevensbron die een tabel Orders , een tabel Producten en een Depots-tabel bevat.

  • In de volgende afbeelding met de tabel Orders en de tabel Producten bestaat referentiële integriteit tussen Orders[ProductID] en Products[ProductID]. De kolom [ProductID] in de tabel Orders is nooit Null en elke waarde wordt ook weergegeven in de tabel Producten . Als zodanig moet referentiële integriteit worden ingesteld om efficiëntere query's te krijgen. Als u deze instelling gebruikt, worden de waarden die worden weergegeven in visuals niet gewijzigd.

    Screenshot of Orders table and Products table.

  • In de volgende afbeelding ziet u dat er geen referentiële integriteit bestaat tussen Orders[DepotID] en Depots[DepotID], omdat de DepotID Null is voor sommige orders. Als zodanig mag referentiële integriteit niet worden ingesteld.

    Screenshot of Orders table and Depots table.

  • Ten slotte bestaat er geen referentiële integriteit tussen Orders[CustomerID] en Customers[CustID] in de volgende tabellen. De CustomerID bevat enkele waarden, in dit geval CustX, die niet bestaan in de tabel Klanten . Als zodanig mag referentiële integriteit niet worden ingesteld.

    Screenshot of Orders table and Customers table.

Instelling Referentiële integriteit aannemen

Als u deze functie wilt inschakelen, selecteert u Referentiële integriteit aannemen, zoals wordt weergegeven in de volgende afbeelding.

Screenshot of an Edit Relationship dialog that allows you to select Assume Referential Integrity.

Wanneer deze optie is geselecteerd, wordt de instelling gevalideerd op basis van de gegevens om ervoor te zorgen dat er geen null- of niet-overeenkomende rijen zijn. Voor gevallen met een zeer groot aantal waarden is de validatie echter geen garantie dat er geen problemen zijn met referentiële integriteit.

Bovendien vindt de validatie plaats op het moment van het bewerken van de relatie en worden geen volgende wijzigingen in de gegevens weergegeven.

Wat gebeurt er als u Referentiële integriteit aannemen onjuist instelt?

Als u Referentiële integriteit aannemen instelt wanneer er problemen zijn met referentiële integriteit in de gegevens, leidt deze instelling niet tot fouten. Het leidt echter tot duidelijke inconsistenties in de gegevens. Voor de relatie met de tabel Depots die hier wordt beschreven, resulteert dit bijvoorbeeld in het volgende:

  • Een visual met het totale orderaantal zou een waarde van 40 weergeven
  • Een visual met het totale aantal orders van Depot City zou een totale waarde van slechts 30 weergeven, omdat dit geen order-id 1 zou bevatten, waarbij DepotID Null is.