Použití nastavení Předpokládat referenční integritu v Power BI DesktopuApply the Assume Referential Integrity setting in Power BI Desktop

Při připojování ke zdroji dat pomocí DirectQuery můžete použít výběr Předpokládat referenční integritu a umožnit tak, aby se na vašem zdroji dat spouštěly účinnější dotazy.When connecting to a data source using DirectQuery, you can use the Assume Referential Integrity selection to enable running more efficient queries against your data source. Tato funkce má několik požadavků týkajících se podkladových dat a je k dispozici pouze při použití DirectQuery.This feature has a few requirements of the underlying data, and it is only available when using DirectQuery.

Nastavení Předpokládat referenční integritu umožňuje dotazům na zdroj dat používat příkazy INNER JOIN místo příkazů OUTER JOIN, což zvyšuje účinnost dotazu.Setting Assume referential integrity enables queries on the data source to use INNER JOIN statements rather than OUTER JOIN, which improves query efficiency.

Snímek obrazovky s dialogovým oknem pro úpravu relace s výběrem možnosti Předpokládat referenční integritu

Požadavky pro použití nastavení Předpokládat referenční integrituRequirements for using Assume referential integrity

Jedná se o pokročilé nastavení a je povoleno pouze při připojování k datům pomocí DirectQuery.This is an advanced setting, and is only enabled when connecting to data using DirectQuery. Aby nastavení Předpokládat referenční integritu fungovalo správně, je potřeba splnit následující požadavky:The following requirements are necessary for Assume referential integrity to work properly:

  • Data ve sloupci Od v relaci nesmí mít nikdy hodnotu Null nebo nesmí být prázdná.Data in the From column in the relationship is never Null or blank
  • Pro každou hodnotu ve sloupci Od existuje odpovídající hodnota ve sloupci Do.For each value in the From column, there is a corresponding value in the To column

V tomto kontextu je sloupec Od N v relaci 1:N, nebo je to sloupec v první tabulce v relaci 1:1.In this context, the From column is the Many in a One-to-Many relationship, or it is the column in the first table in a One-to-One relationship.

Příklad použití nastavení Předpokládat referenční integrituExample of using Assume referential integrity

Následující příklad ukazuje, jak se nastavení Předpokládat referenční integritu chová při použití v datových připojeních.The following example demonstrates how Assume referential integrity behaves when used in data connections. Příklad se připojuje ke zdroji dat, který obsahuje tabulku Orders (Objednávky), tabulku Products (Produkty) a tabulku Depots (Sklady).The example connects to a data source that includes an Orders table, a Products table, and a Depots table.

  1. Na následujícím obrázku, který zobrazuje tabulku Orders (Objednávky) a tabulku Products (Produkty) si všimněte, že referenční integrita existuje mezi Orders[ProductID] (Objednávky[ID produktu]) a Products[ProductID] (Produkty[ID produktu]).In the following image that shows the Orders table and the Products table, note that referential integrity exists between Orders[ProductID] and Products[ProductID]. Sloupec [ProductID] ([ID produktu]) v tabulce Orders (Objednávky) nikdy nemá hodnotu Null a každá hodnota se také zobrazuje v tabulce Products (Produkty).The [ProductID] column in the Orders table is never Null, and every value also appears in the Products table. Nastavení Předpokládat referenční integritu musí být nastaveno, aby bylo možné dosáhnout účinnějších dotazů (použitím tohoto nastavení nedojde ke změnám hodnot zobrazených ve vizuálech).As such, Assume Referential Integrity should be set to get more efficient queries (using this setting does not change the values shown in visuals).

    Snímek obrazovky s tabulkami objednávek a produktů

  2. Na dalším obrázku si všimněte, že mezi Orders[DepotID] (Objednávky[ID skladu]) a Depots[DepotID] (Sklady[ID skladu]) neexistuje žádná referenční integrita, protože DepotID (ID skladu) má pro některé položky Orders (Objednávky) hodnotu Null.In the next image, notice that no referential integrity exists between Orders[DepotID] and Depots[DepotID], because the DepotID is Null for some Orders. Nastavení Předpokládat referenční integritu by jako takové nemělo být nastaveno.As such, Assume Referential Integrity should not be set.

    Snímek obrazovky s tabulkami objednávek a skladů

  3. Žádná referenční integrita dále neexistuje mezi Orders[CustomerID] (Objednávky[ID zákazníka]) a Customers[CustID] (Zákazníci[ID zákazníka]) v následujících tabulkách. CustomerID (ID zákazníka) obsahuje hodnoty (v tomto případě CustX (Zákazník X)), které v tabulce Customers (Zákazníci) neexistují.Finally, no referential integrity exists between Orders[CustomerID] and Customers[CustID] in the following tables; the CustomerID contains some values (in this case, CustX) that do not exist in the Customers table. Nastavení Předpokládat referenční integritu by jako takové nemělo být nastaveno.As such, Assume Referential Integrity should not be set.

    Snímek obrazovky s tabulkami objednávek a zákazníků

Nastavení Předpokládat referenční integrituSetting Assume referential integrity

Pokud chcete tuto funkci povolit, zaškrtněte políčko vedle Předpokládat referenční integritu, jak je znázorněno na následujícím obrázku.To enable this feature, select the checkbox next to Assume Referential Integrity as shown in the following image.

Snímek obrazovky s dialogovým oknem pro úpravu relace, kde můžete vybrat možnost Předpokládat referenční integritu

Pokud je nastavení vybrané, ověří se oproti datům, aby se zajistilo, že neexistují žádné hodnoty Null nebo neshodující se řádky.When selected, the setting is validated against the data to ensure there are no Null or mismatched rows. V případech s velkým počtem hodnot ale ověření nezaručuje, že neexistují žádné problémy související s referenční integritou.However, for cases with a very large number of values, the validation is not a guarantee that there are no referential integrity issues.

Kromě toho k ověření dochází během úprav relace a neodráží žádné následné změny dat.In addition, the validation occurs at the time of editing the relationship, and does not reflect any subsequent changes to the data.

Co se stane, když nastavíte funkci Předpokládat referenční integritu nesprávně?What happens if you incorrectly set Assume referential integrity?

Pokud nastavíte Předpokládat referenční integritu při existujících potížích s referenční integritou dat, nedojde k chybě.If you set Assume Referential Integrity when there are referential integrity issues in the data, this will not result in errors. Důsledkem ale budou viditelné nekonzistence dat.However, it will result in apparent inconsistencies in the data. Například v případě relace k tabulce Depots (Sklady) popsané výše by výsledkem bylo toto:For example, in the case of the relationship to the Depots table described above, it would result in the following:

  • Vizuál zobrazující celkové množství Order Qty (Množství objednávky) by zobrazil hodnotu 40.A visual showing the total Order Qty would show a value of 40
  • Vizuál zobrazující celkové množství Order Qty by Depot City (Množství objednávky podle města skladu) by zobrazil celkovou hodnotu pouze 30, protože by nezahrnul Order ID1, kde DepotID (ID objednávky) je Null.A visual showing the total Order Qty by Depot City would show a total value of only 30, because it would not include Order ID 1, where DepotID is Null.

Další krokyNext steps

Přečtěte si další informace o DirectQuery.Learn more about DirectQuery

Získejte další informace o Relacích v Power BI.Get more information about Relationships in Power BI

Přečtěte si další informace o Zobrazení relací v Power BI Desktopu.Learn more about Relationship View in Power BI Desktop.