Pokyny k obousměrnému vztahu

Tento článek se zaměřuje na modelátora dat, který pracuje s Power BI Desktopem. Poskytuje pokyny, kdy vytvořit obousměrné relace modelu. Obousměrná relace je ta, která filtruje v obou směrech.

Poznámka:

Úvod do relací modelu není popsaný v tomto článku. Pokud nejste úplně obeznámeni s relacemi, jejich vlastnostmi nebo jejich konfigurací, doporučujeme, abyste si nejdřív přečetli relace modelu v článku Power BI Desktopu .

Je také důležité, abyste porozuměli návrhu hvězdicového schématu. Další informace najdete v tématu Vysvětlení hvězdicového schématu a důležitosti pro Power BI.

Obecně doporučujeme minimalizovat použití obousměrných relací. Můžou mít negativní dopad na výkon dotazů modelu a můžou uživatelům sestavy přinést matoucí prostředí.

Existují tři scénáře, kdy obousměrné filtrování dokáže vyřešit konkrétní požadavky:

Zvláštní relace modelu

Obousměrné relace hrají důležitou roli při vytváření následujících dvou speciálních typů relací modelu:

  • 1:1: Všechny relace 1:1 musí být obousměrné – jinak není možné nakonfigurovat. Obecně nedoporučujeme vytvářet tyto typy relací. Kompletní diskuzi a alternativní návrhy najdete v pokynech k relacím 1:1.
  • N:N: Při korelaci dvou tabulek typu dimenze se vyžaduje přemostění tabulky. K zajištění šíření filtrů v tabulce přemostění se vyžaduje obousměrný filtr. Další informace najdete v tématu Pokyny k relacím M:N (Relace dimenzí M:N).

Položky průřezu "s daty"

Obousměrné relace můžou doručovat průřezy, které omezují položky na umístění dat. (Pokud znáte kontingenční tabulky a průřezy Excelu, jedná se o výchozí chování při získávání dat z sémantického modelu Power BI (dříve označovaného jako datová sada) nebo modelu Analysis Services.) Abychom vám pomohli vysvětlit, co to znamená, nejprve zvažte následující diagram modelu.

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

První tabulka má název Customer (Zákazník) a obsahuje tři sloupce: Country-Region(Země), Customer (Zákazník) a CustomerCode (Kód zákazníka). Druhá tabulka má název Product (Produkt) a obsahuje tři sloupce: Color (Barva), Product (Produkt) a SKU (SKU). Třetí tabulka má název Sales a obsahuje čtyři sloupce: CustomerCode, OrderDate, Quantity a SKU. Tabulky Customer (Zákazník) a Product (Produkt) jsou tabulky dimenzí a každá má relaci 1:N s tabulkou Sales (Prodej). Každá relace filtruje v jednom směru.

Abychom vám pomohli popsat, jak funguje obousměrné filtrování, diagram modelu byl upraven tak, aby zobrazil řádky tabulky. Všechny příklady v tomto článku jsou založené na těchto datech.

Poznámka:

V diagramu modelu Power BI Desktopu není možné zobrazit řádky tabulky. V tomto článku se podporuje diskuze s jasnými příklady.

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

Podrobnosti o řádku tří tabulek jsou popsány v následujícím seznamu s odrážkami:

  • Tabulka Customer (Zákazník) má dva řádky:
    • CustomerCode CUST-01, Customer-1, Country-Region USA
    • CustomerCode CUST-02, Customer-2 , Country-Region Australia
  • Tabulka Product obsahuje tři řádky:
    • SKU CL-01, Tričko produktu , Barva zelená
    • SKU CL-02, Produkt džíny, Barva modrá
    • SKU AC-01, Produktový klobouk, barva modrá
  • Tabulka Sales (Prodej) má tři řádky:
    • OrderDate January 1 2019, CustomerCode CUST-01, SKU CL-01, Quantity 10
    • OrderDate February 2 2019, CustomerCode CUST-01, SKU CL-02, Quantity 20
    • OrderDate March 3 2019, CustomerCode CUST-02, SKU CL-01, Quantity 30

Teď zvažte následující stránku sestavy.

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

Stránka se skládá ze dvou průřezů a vizuálu karty. První průřez je určen pro zemi a oblast má dvě položky: Austrálie a USA. V současné době se jedná o řezy podle Austrálie. Druhý průřez je určen pro produkt a má tři položky: Klobouk, Džíny a tričko. Nejsou vybrány žádné položky (to znamená, že nejsou filtrovány žádné produkty ). Vizuál karty zobrazí množství 30.

Při průřezu uživatelů sestavy podle Austrálie můžete chtít omezit průřez product tak, aby zobrazoval položky, ve kterých se data týkají australského prodeje. To znamená zobrazení položek průřezu "s daty". Toto chování můžete dosáhnout konfigurací relace mezi tabulkou Product (Produkt) a Sales (Prodej) a filtrováním v obou směrech.

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

Průřez produktu teď obsahuje jednu položku: tričko. Tato položka představuje jediný produkt, který se prodává australským zákazníkům.

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

Nejprve doporučujeme pečlivě zvážit, jestli tento návrh funguje pro uživatele sestavy. Někteří uživatelé sestavy najdou matoucí prostředí. Nerozumí tomu, proč se položky průřezu dynamicky zobrazují nebo mizí při interakci s jinými průřezy.

Pokud se rozhodnete zobrazit položky průřezu s daty, nedoporučujeme konfigurovat obousměrné relace. Obousměrné relace vyžadují více zpracování, takže můžou negativně ovlivnit výkon dotazů – zejména s rostoucím počtem obousměrných relací v modelu.

Existuje lepší způsob, jak dosáhnout stejného výsledku: Místo obousměrných filtrů můžete použít filtr na úrovni vizuálu u samotného průřezu Produktu .

Teď se podíváme na to, že relace mezi tabulkou Product (Produkt) a Sales (Prodej) už nefiltruje v obou směrech. Do tabulky Sales byla přidána následující definice míry.

Total Quantity = SUM(Sales[Quantity])

Pokud chcete zobrazit položky průřezu Produktu s daty, stačí je jednoduše filtrovat podle míry Total Quantity pomocí podmínky "není prázdné".

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

Analýza dimenzí na dimenzi

Jiný scénář zahrnující obousměrné relace považuje tabulku typu fakta jako přemostění tabulky. Tímto způsobem podporuje analýzu dat tabulky typu dimenze v kontextu filtru jiné tabulky typu dimenze.

Při použití ukázkového modelu v tomto článku zvažte, jak na tyto otázky odpovědět:

  • Kolik barev bylo prodáno australským zákazníkům?
  • Kolik zemí/oblastí zakoupilo džíny?

Na obě otázky lze odpovědět bez shrnutí dat v tabulce typu fakta. Vyžadují však, aby se filtry rozšířily z jedné tabulky typu dimenze do druhé. Jakmile se filtry rozšíří prostřednictvím tabulky faktů, můžete souhrny sloupců tabulky typu dimenze dosáhnout pomocí funkce DISTINCTCOUNT DAX – a případně funkcí MIN a MAX DAX.

Vzhledem k tomu, že se tabulka typu fakta chová jako tabulka přemostění, můžete postupovat podle pokynů relací M:N a spojit dvě tabulky typu dimenze. Bude vyžadovat konfiguraci alespoň jedné relace pro filtrování v obou směrech. Další informace najdete v tématu Pokyny k relacím M:N (Relace dimenzí M:N).

Jak už je však popsáno v tomto článku, bude mít tento návrh pravděpodobně negativní dopad na výkon a uživatelské zkušenosti související s položkami průřezu "s daty". Proto doporučujeme aktivovat obousměrné filtrování v definici míry pomocí funkce CROSSFILTER DAX. Funkci CROSSFILTER lze použít k úpravě směrů filtru (nebo dokonce zakázání relace) během vyhodnocení výrazu.

Představte si následující definici míry přidanou do tabulky Sales( Prodej ). V tomto příkladu byla relace modelu mezi tabulkami Customer a Sales nakonfigurovaná tak, aby filtrovala v jednom směru.

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

Během vyhodnocení výrazu míry Different Countries Sold se relace mezi tabulkami Customer (Zákazník) a Sales (Prodej) filtruje v obou směrech.

Následující vizuál tabulky představuje statistiku pro každý prodaných produktů. Sloupec Množství je jednoduše součet hodnot množství. Sloupec Different Countries Sold představuje jedinečný počet hodnot zemí a oblastí všech zákazníků, kteří produkt zakoupili.

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

Další informace týkající se tohoto článku najdete v následujících zdrojích informací: