Pokyny k obousměrnému vztahu
Tento článek se zaměřuje na vás jako modelátor 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žívání obousměrných relací. Je to proto, že mohou negativně ovlivnit výkon dotazů modelu a mohou uživatelům sestavy způsobit zmatené zážitky.
Existují však 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í vzory návrhu najdete v tématu pokyny k relacím 1:1.
- M:N: Při korelaci dvou tabulek dimenzí je vyžadována přemostění tabulky. K zajištění šíření filtrů v tabulce přemostění se vyžaduje obousměrný filtr. Pro více informací si zobrazte pokyny pro relace M:N.
Možnosti řezu "s daty"
Obousměrné relace můžou poskytovat průřezy, které omezují možnosti 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 nebo modelu Analysis Services.) Abychom vám pomohli vysvětlit, co to znamená, nejprve zvažte následující diagram modelu.
První tabulka má název Customer
a obsahuje tři sloupce: Country-Region
, Customer
a CustomerCode
. Druhá tabulka má název Product
a obsahuje tři sloupce: Color
, Product
a SKU
. Třetí tabulka má název Sales
a obsahuje čtyři sloupce: CustomerCode
, OrderDate
, Quantity
a SKU
. Tabulky Customer
a Product
jsou tabulky dimenzí a každá z nich má relaci 1:N s tabulkou Sales
. 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.
Podrobnosti o řádku tří tabulek jsou popsány v následujícím seznamu s odrážkami:
- Tabulka
Customer
má dva řádky:-
CustomerCode
CUST-01,Customer
Customer-1,Country-Region
Spojené státy -
CustomerCode
CUST-02,Customer
Customer-2,Country-Region
Austrálie
-
- Tabulka
Product
má tři řádky:-
SKU
CL-01,Product
tričko,Color
zelené -
SKU
CL-02,Product
Jeans,Color
Modrá -
SKU
AC-01,Product
klobouk,Color
modrá
-
- Tabulka
Sales
má tři řádky:-
OrderDate
1. ledna 2019,CustomerCode
CUST-01,SKU
CL-01,Quantity
10 -
OrderDate
2. února 2019,CustomerCode
CUST-01,SKU
CL-02,Quantity
20 -
OrderDate
3. března 2019,CustomerCode
CUST-02,SKU
CL-01,Quantity
30
-
Teď zvažte následující stránku sestavy.
Stránka se skládá ze dvou průřezů a vizuálu karty. První filtr je založený na poli Country-Region
a má dvě možnosti: Austrálie a Spojené státy. V současné době se jedná o řezy podle Austrálie. Druhý průřez je založený na poli Product
a má tři možnosti: 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.
Když uživatelé sestavy filtrují podle Austrálie, můžete chtít omezit průřez produktu tak, aby zobrazoval pouze možnosti, u kterých data souvisí s australským prodejem. To je myšleno zobrazením možností řezačky "s daty". Toto chování můžete dosáhnout nastavením relace mezi tabulkami Product
a Sales
, takže filtr bude moci fungovat v obou směrech.
Výběr produktu teď obsahuje jednu možnost: tričko. Tato možnost představuje jediný produkt, který se prodává australským zákazníkům.
Nejdříve doporučujeme pečlivě zvážit, zda tento výkres je vhodný pro uživatele vaší zprávy. Někteří uživatelé reportů považují prostředí za matoucí, protože nerozumí tomu, proč se možnosti toho průřezu dynamicky zobrazují nebo mizí, když interagují s jinými průřezy.
Pokud se rozhodnete zobrazit možnosti řezače spolu s daty, nedoporučujeme nastavovat obousměrné vztahy. 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 u samotného průřezu produktu použít filtr na úrovni vizuálu.
Teď se podíváme na to, že relace mezi tabulkami Product
a Sales
už nebude filtrovat 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 možnosti průřezu produktu s daty, stačí je jednoduše filtrovat podle míry Total Quantity
pomocí podmínky "není prázdné".
Analýza dimenzí na dimenzi
Jiný scénář zahrnující obousměrné relace zachází s tabulkou faktů jako s přemosťovací tabulkou . Tímto způsobem podporuje analýzu dat tabulky dimenzí v kontextu filtru jiné tabulky dimenzí.
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 propojovací tabulce faktů. Vyžadují však, aby se filtry rozšířily z jedné tabulky dimenzí do druhé. Když se filtry šíří prostřednictvím tabulky faktů, lze souhrny sloupců dimenzionální tabulky dosáhnout použitím funkce DAX DISTINCTCOUNT, a případně také funkcemi DAX MIN a MAX.
Vzhledem k tomu, že se tabulka faktů chová jako přemosťovací tabulka, můžete použít pokyny pro relaci mnoho-na-mnoho k propojení dvou tabulek dimenzí. Bude vyžadovat nastavení alespoň jedné relace pro filtrování v obou směrech. Další informace najdete v tématu pokyny k relacím M:N.
Jak už je ale popsáno v tomto článku, bude mít tento návrh pravděpodobně negativní dopad na výkon a důsledky uživatelského prostředí související s možnostmi průřezu "s daty". Proto doporučujeme aktivovat obousměrné filtrování v definici míry pomocí funkce CROSSFILTER DAX. Pomocí funkce CROSSFILTER můžete upravit směry filtru nebo dokonce zakázat relaci během vyhodnocení výrazu.
Zvažte přidání následující definice míry do tabulky Sales
. V tomto příkladu byla relace modelu mezi tabulkami Customer
a Sales
nastavena tak, aby filtrovala jedním směrem.
Different Countries Sold =
CALCULATE(
DISTINCTCOUNT(Customer[Country-Region]),
CROSSFILTER(
Customer[CustomerCode],
Sales[CustomerCode],
BOTH
)
)
Při hodnocení míry Different Countries Sold
se filtruje vztah mezi tabulkami Customer
a Sales
v obou směrech.
Následující vizuál tabulky představuje statistiku pro každý prodaných produktů. Sloupec Quantity
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.
Související obsah
Další informace týkající se tohoto článku najdete v následujících zdrojích informací: