Pokyny k obousměrné relaciBi-directional relationship guidance

Tento článek je určený pro modelátory dat, kteří pracují s Power BI Desktopem.This article targets you as a data modeler working with Power BI Desktop. Poskytuje pokyny týkající se toho, kdy vytvářet obousměrné relace modelu.It provides you with guidance on when to create bi-directional model relationships. Obousměrná relace je taková relace, která filtruje v obou směrech.A bi-directional relationship is one that filters in both directions.

Poznámka

Článek neobsahuje úvod do relací v modelu.An introduction to model relationships is not covered in this article. Pokud se ještě nevyznáte v relacích, jejich vlastnostech a způsobu jejich konfigurace, doporučujeme si napřed přečíst článek Relace modelů v Power BI Desktopu.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.

Je také důležité, abyste uměli navrhnout hvězdicové schéma.It's also important that you have an understanding of star schema design. Další informace najdete v článku Vysvětlení hvězdicového schématu a jeho důležitosti pro Power BI.For more information, see Understand star schema and the importance for Power BI.

Obecně doporučujeme použití obousměrných relací minimalizovat.Generally, we recommend minimizing the use of bi-directional relationships. Mohou negativně ovlivnit výkon dotazů pro model a uživatelé sestavy mohou získat matoucí zkušenosti.They can negatively impact on model query performance, and possibly deliver confusing experiences for your report users.

Existují tři scénáře, kdy může obousměrné filtrování řešit konkrétní požadavky:There are three scenarios when bi-directional filtering can solve specific requirements:

Speciální relace modeluSpecial model relationships

Obousměrné relace hrají důležitou roli při vytváření těchto dvou speciálních typů relací modelů:Bi-directional relationships play an important role when creating the following two special model relationship types:

  • Relace jednoho k jednomu jinému: Všechny relace 1:1 musí být obousměrné – není možné je konfigurovat jinak.One-to-one: All one-to-one relationships must be bi-directional—it isn't possible to configure otherwise. Tyto typy vztahů obecně nedoporučujeme vytvářet.Generally, we don't recommend creating these types of relationships. Kompletní diskuzi a alternativní návrhy najdete v tématu Pokyny k relaci 1:1.For a complete discussion and alternative designs, see One-to-one relationship guidance.
  • Relace několika k několika jiným: Při propojování dvou tabulek typu dimenze se vyžaduje tabulka přemostění.Many-to-many: When relating two dimension-type tables, a bridging table is required. Obousměrný filtr se vyžaduje k zajištění toho, že se filtry rozšíří v tabulce přemostění.A bi-directional filter is required to ensure filters propagate across the bridging table. Další informace najdete v tématu Pokyny k relacím M:N (propojení dimenzí M:N).For more information, see Many-to-many relationship guidance (Relate many-to-many dimensions).

Položky průřezu s datySlicer items "with data"

Obousměrné relace můžou poskytovat průřezy, které omezují položky na místo, kde data existují.Bi-directional relationships can deliver slicers that limit items to where data exists. (Pokud už znáte kontingenční tabulky a průřezy Excelu, jedná se o výchozí chování při získávání zdrojů dat z datové sady Power BI nebo modelu Analysis Services.) Abychom si vysvětlili, co to znamená, zvažte nejprve následující diagram modelu.(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 znázorňující model, který obsahuje tři tabulky

První tabulka se jmenuje Customer (Zákazník) a obsahuje tři sloupce: Country-Region (Země/Oblast), Customer (Zákazník) a CustomerCode (KódZákazníka).The first table is named Customer, and it contains three columns: Country-Region, Customer, and CustomerCode. Druhá tabulka se jmenuje Product (Produkt) a obsahuje tři sloupce: Color (Barva), Product (Produkt) a SKU (Skladová položka).The second table is named Product, and it contains three columns: Color, Product, and SKU. Třetí tabulka se jmenuje Sales (Prodeje) a obsahuje čtyři sloupce: CustomerCode (KódZákazníka), OrderDate (DatumObjednávky), Quantity (Množství) a SKU (Skladová položka).The third table is named Sales, and it contains four columns: CustomerCode, OrderDate, Quantity, and SKU. Tabulky Customer (Zákazník) a Product (Produkt) jsou tabulky typu dimenze a každá z nich má k tabulce Sales (Prodeje) relaci 1:N.The Customer and Product tables are dimension-type tables, and each has a one-to-many relationship to the Sales table. Každá relace filtruje v jednom směru.Each relationship filters in a single direction.

Abychom si mohli popsat, jak funguje obousměrné filtrování, upravíme diagram modelu, aby zobrazoval řádky tabulek.To help describe how bi-directional filtering works, the model diagram has been modified to reveal the table rows. Všechny příklady v tomto článku jsou založené na těchto datech.All examples in this article are based on this data.

Poznámka

V diagramu modelu v Power BI Desktopu nejdou řádky tabulek zobrazit.It's not possible to display table rows in the Power BI Desktop model diagram. Uděláme to v tomto článku, abychom výklad doplnili jasnými příklady.It's done in this article to support the discussion with clear examples.

Diagram znázorňující, že model teď ukazuje řádky tabulky

Podrobnosti o řádcích těchto tří tabulek jsou popsané v následujícím seznamu s odrážkami:The row details for the three tables are described in the following bulleted list:

  • Tabulka Customer (Zákazník) má dva řádky:The Customer table has two rows:
    • CustomerCode (KódZákazníka) CUST-01, Customer (Zákazník) Customer-1, Country-Region (Země/Oblast) United States (Spojené státy)CustomerCode CUST-01, Customer Customer-1, Country-Region United States
    • CustomerCode (KódZákazníka) CUST-02, Customer (Zákazník) Customer-2, Country-Region (Země/Oblast) Australia (Austrálie)CustomerCode CUST-02, Customer Customer-2, Country-Region Australia
  • Tabulka Product (Produkt) má tři řádky:The Product table has three rows:
    • SKU (Skladová položka) CL-01, Product (Produkt) T-shirt (Tričko), Color (Barva) Green (Zelená)SKU CL-01, Product T-shirt, Color Green
    • SKU (Skladová položka) CL-02, Product (Produkt) Jeans (Džíny), Color (Barva) Blue (Modrá)SKU CL-02, Product Jeans, Color Blue
    • SKU (Skladová položka) AC-01, Product (Produkt) Hat (Klobouk), Color (Barva) Blue (Modrá)SKU AC-01, Product Hat, Color Blue
  • Tabulka Sales (Prodeje) má tři řádky:The Sales table has three rows:
    • OrderDate (DatumObjednávky) January 1 2019 (1. ledna 2019), CustomerCode (KódZákazníka) CUST-01, SKU (Skladová položka) CL-01, Quantity (Množství ) 10OrderDate January 1 2019, CustomerCode CUST-01, SKU CL-01, Quantity 10
    • OrderDate (DatumObjednávky) February 2 2019 (2. února 2019), CustomerCode (KódZákazníka) CUST-01, SKU (Skladová položka) CL-02, Quantity (Množství ) 20OrderDate February 2 2019, CustomerCode CUST-01, SKU CL-02, Quantity 20
    • OrderDate (DatumObjednávky) March 3 2019 (3. března 2019), CustomerCode (KódZákazníka) CUST-02, SKU (Skladová položka) CL-01, Quantity (Množství ) 30OrderDate March 3 2019, CustomerCode CUST-02, SKU CL-01, Quantity 30

Teď si představme následující stránku sestavy.Now consider the following report page.

Diagram znázorňující stránku sestavy obsahující tři vizuály

Stránka se skládá ze dvou průřezů a vizuálu karty.The page consists of two slicers and a card visual. První průřez je určen pro Country-Region (Země/Oblast) a má dvě položky: Australia (Austrálie) a United States (Spojené státy).The first slicer is for Country-Region and it has two items: Australia and United States. Momentálně provádí průřez podle položky Australia.It currently slices by Australia. Druhý průřez je určen pro Product (Produkt) a má tři položky: Hat (Klobouk), Jeans (Džíny) a T-shirt (Tričko).The second slicer is for Product, and it has three items: Hat, Jeans, and T-shirt. Nejsou vybrané žádné položky (tzn. nefiltrují se žádné produkty).No items are selected (meaning no products are filtered). Vizuál karty zobrazuje množství 30.The card visual displays a quantity of 30.

Když uživatelé sestavy vytváří průřez podle položky Australia, můžete chtít průřez pro Product (Produkt) omezit tak, aby se zobrazily položky, ve kterých se data vztahují k prodejům do Austrálie.When report users slice by Australia, you might want to limit the Product slicer to display items where data relates to Australian sales. Jedná se o zobrazení položek průřezu s daty.It's what's meant by showing slicer items "with data". Tohoto chování můžete dosáhnout konfigurací relace mezi tabulkami Product (Produkt) a Sales (Prodeje) tak, aby docházelo k filtrování v obou směrech.You can achieve this behavior by configuring the relationship between the Product and Sales table to filter in both directions.

Diagram znázorňující model, že relace mezi tabulkami Product (Produkt) a Sales (Prodeje) je nyní obousměrná

Průřez Product (Produkt) teď obsahuje jednu položku: T-shirt (Tričko).The Product slicer now lists a single item: T-shirt. Tato položka představuje jediný produkt prodaný zákazníkům z Austrálie.This item represents the only product sold to Australian customers.

Diagram znázorňující stránku sestavy obsahující tři vizuály s vyvolanými produkty Podrobnosti jsou popsané v následujícím odstavci.

Nejprve doporučujeme pečlivě zvážit, jestli tento návrh vyhovuje uživatelům sestavy.We first suggest you consider carefully whether this design works for your report users. Pro některé uživatele sestavy může být matoucí.Some report users find the experience confusing. Nerozumí tomu, proč se položky průřezu při komunikaci s jinými průřezy dynamicky zobrazují nebo mizí.They don't understand why slicer items dynamically appear or disappear when they interact with other slicers.

Pokud se rozhodnete zobrazovat položky průřezu s daty, nedoporučujeme konfigurovat obousměrné relace.If you do decide to show slicer items "with data", we don't recommend you configure bi-directional relationships. Obousměrné relace vyžadují další zpracování, takže můžou negativně ovlivnit výkon dotazů – zejména když se počet obousměrných relací v modelu zvýší.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.

Stejného výsledku můžete dosáhnout lepším způsobem: Místo použití obousměrných filtrů můžete pro samotný průřez Product (Produkt) použít filtr na úrovni vizuálu.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.

Představme si teď, že relace mezi tabulkami Product (Produkt) a Sales (Prodeje) už neprovádí filtrování v obou směrech.Let's now consider that the relationship between the Product and Sales table no longer filters in both directions. A že do tabulky Sales (Prodeje) byla přidána následující definice míry.And, the following measure definition has been added to the Sales table.

Total Quantity = SUM(Sales[Quantity])

Aby se zobrazily položky průřezu Product (Produkt) s daty, je jednoduše potřeba provést filtrování podle míry Total Quantity (Celkové množství) s využitím podmínky „není prázdné“.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 znázorňující, že podokno Filtry pro průřez Product (Produkt) nyní filtruje podle „Total Quantity není prázdné“

Analýza dimenzíDimension-to-dimension analysis

Odlišný scénář zahrnující obousměrné relace považuje tabulku typu fakta za tabulku přemostění.A different scenario involving bi-directional relationships treats a fact-type table like a bridging table. Podporuje tak analýzu dat tabulky typu dimenze v kontextu filtru jiné tabulky typu dimenze.This way, it supports analyzing dimension-type table data within the filter context of a different dimension-type table.

Pomocí ukázkového modelu v tomto článku zvažte, jak se dají zodpovědět následující otázky:Using the example model in this article, consider how the following questions can be answered:

  • Kolik barev bylo prodáno australským zákazníkům?How many colors were sold to Australian customers?
  • V kolika zemích si zákazníci koupili džíny?How many countries purchased jeans?

Na obě otázky se dá odpovědět bez shrnutí dat v tabulce přemostění typu fakta.Both questions can be answered without summarizing data in the bridging fact-type table. Vyžadují ale, aby se filtry rozšířily z jedné tabulky typu dimenze do druhé.They do, however, require that filters propagate from one dimension-type table to the other. Jakmile se filtry rozšíří prostřednictvím tabulky typu fakta, dá se vytvořit souhrn sloupců tabulky typu dimenze pomocí funkce DAX DISTINCTCOUNT – a pravděpodobně funkcí DAX MIN a 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.

Vzhledem k tomu, že se tabulka typu fakta chová jako tabulka přemostění, můžete postupovat podle pokynů pro relace M:N a spojit dvě tabulky typu dimenze.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. Pro filtrování v obou směrech bude nutné nakonfigurovat alespoň jednu relaci.It will require configuring at least one relationship to filter in both directions. Další informace najdete v tématu Pokyny k relacím M:N (propojení dimenzí M:N).For more information, see Many-to-many relationship guidance (Relate many-to-many dimensions).

Jak už ale bylo v tomto článku řečeno, bude mít tento návrh nejspíš negativní dopad na výkon a zkušenosti uživatelů související s položkami průřezu s daty.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". Místo toho proto doporučujeme aktivovat obousměrné filtrování v definici míry pomocí funkce DAX CROSSFILTER.So, we recommend that you activate bi-directional filtering in a measure definition by using the CROSSFILTER DAX function instead. Funkci CROSSFILTER lze použít pro úpravu směrů filtru nebo dokonce zakázání relace během vyhodnocování výrazu.The CROSSFILTER function can be used to modify filter directions—or even disable the relationship—during the evaluation of an expression.

Vezměte v úvahu následující definici míry přidanou do tabulky Sales (Prodeje).Consider the following measure definition added to the Sales table. V tomto příkladu je relace modelu mezi tabulkami Customer (Zákazník) a Sales (Prodeje) nakonfigurovaná tak, aby filtrovala v jednom směru.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
    )
)

Během vyhodnocování výrazu míry Different Countries Sold (Různé země, do kterých se prodává) filtruje relace mezi tabulkami Customer (Zákazník) a Sales (Prodeje) v obou směrech.During the evaluation of the Different Countries Sold measure expression, the relationship between the Customer and Sales tables filters in both directions.

Následující vizuál tabulky představuje statistiku pro každý prodaný produkt.The following table visual present statistics for each product sold. Sloupec Quantity (Množství) je jednoduše součet hodnot množství.The Quantity column is simply the sum of quantity values. Sloupec Different Countries Sold (Různé země, do kterých se prodává) představuje počet odlišných hodnot země/oblast u všech zákazníků, kteří si produkt koupili.The Different Countries Sold column represents the distinct count of country-region values of all customers who have purchased the product.

Diagram znázorňující, že ve vizuálu tabulky jsou uvedeny dva produkty

Další krokyNext steps

Další informace související s tímto článkem najdete v následujících tématech:For more information related to this article, check out the following resources: