Pokyny na dvojsmerné vzťahy
Tento článok je určený pre modelárov údajov, ktorí pracujú s aplikáciou Power BI Desktop. Nájdete v ňom pokyny týkajúce sa toho, kedy sa majú vytvárať obojsmerné modelové vzťahy. Obojsmerný vzťah je taký, ktorý filtruje údaje v oboch smeroch.
Poznámka
Úvod o vzťahoch v modeloch nie je zahrnutý v tomto článku. Ak nie ste úplne oboznámení so vzťahmi, ich vlastnosťami alebo o tom, ako ich konfigurovať, odporúčame si najprv prečítať článok Modelové vzťahy v aplikácii Power BI Desktop .
Dôležité je aj to, aby ste pochopili návrh hviezdicovej schémy. Ďalšie informácie nájdete v téme Vysvetlenie hviezdicovej schémy a dôležitosti pre Power BI.
Vo všeobecnosti odporúčame minimalizovať používanie obojsmerných vzťahov. Dôvodom je, že môžu mať negatívny vplyv na výkon dotazu na model a prípadne priniesla používateľom zostáv mätúce prostredie.
Existujú však tri scenáre, v ktorých môže obojsmerné filtrovanie vyriešiť konkrétne požiadavky:
Špeciálne modelové vzťahy
Obojsmerné vzťahy zohrávajú dôležitú rolu pri vytváraní nasledujúcich dvoch špeciálnych typov modelových vzťahov:
- One-to-one: Všetky vzťahy typu one-to-one musia byť obojsmerné – nie je možné nakonfigurovať ich inak. Vo všeobecnosti neodporúčame vytvárať tieto typy vzťahov. Kompletné informácie a alternatívne vzory návrhu nájdete v téme pokyny na vzťahov typu One-to-one.
Many-to-many: Keď sa tabuľkách dimenzií, vyžaduje sa premosťovacia tabuľka . Vyžaduje sa obojsmerný filter, aby sa zabezpečilo rozšírenie filtrov do premosťovačnej tabuľky. Ďalšie informácie nájdete pokyny nana vzťahy typu many-to-many.
Možnosti rýchleho filtra "s údajmi"
Obojsmerné vzťahy môžu poskytnúť rýchle filtre, ktoré obmedzia možnosti na to, kde existujú údaje. (Ak poznáte excelové kontingenčné tabuľky a rýchle filtre, pri získavaní údajov zo sémantického modelu služby Power BI alebo modelu služby Analysis Services je to predvolené správanie.) Ak chcete lepšie vysvetliť, čo to znamená, najskôr zvážte nasledujúci diagram modelu.
Prvá tabuľka sa nazýva Customer
., a obsahuje tri stĺpce: Country-Region
, Customer
a CustomerCode
. Druhá tabuľka sa nazýva Product
a obsahuje tri stĺpce: Color
, Product
a SKU
. Tretia tabuľka sa nazýva Sales
a obsahuje štyri stĺpce: CustomerCode
, OrderDate
, Quantity
a SKU
. tabuľky Customer
a Product
sú tabuľky dimenzií a každá z nich má vzťah "one-to-many" k tabuľke Sales
. Každý vzťah sa filtruje v jednom smere.
S cieľom pomôcť opísať, ako funguje obojsmerné filtrovanie, bol diagram modelu upravený tak, aby sa zobrazili riadky tabuľky. Všetky príklady v tomto článku vychádzajú z týchto údajov.
Podrobnosti riadkov pre tri tabuľky sú popísané v nasledujúcom zozname s odrážkami:
- Tabuľka
Customer
má dva riadky:-
CustomerCode
CUST-01Customer
Customer-1Country-Region
Spojené štáty -
CustomerCode
CUST-02Customer
Customer-2Country-Region
Australia
-
- Tabuľka
Product
má tri riadky:-
SKU
CL-01Product
tričkoColor
Zelený -
SKU
CL-02,Product
DžínsyColor
Modrá -
SKU
AC-01,Product
Hat,Color
Blue
-
- Tabuľka
Sales
má tri riadky:1. januára 2019 CUST-01 CL-01 10 -
OrderDate
2. februára 2019CustomerCode
CUST-01SKU
CL-02Quantity
20 -
OrderDate
3. marca 2019CustomerCode
CUST-02SKU
CL-01Quantity
30
Teraz zvážte nasledujúcu stranu zostavy.
Strana sa skladá z dvoch rýchlych filtrov a vizuálu karty. Prvý rýchly filter je založený na poli Country-Region
a má dve možnosti: Austrália a USA. Aktuálne filtruje podľa položky Austrália. Druhý rýchly filter je založený na poli Product
a má tri možnosti: Klobúk, Džínsy a Tričko. Nie sú vybraté žiadne položky (čo znamená, že nie sú filtrované žiadne produkty ). Vizuál karty zobrazuje množstvo 30.
Keď používatelia zostavy vytvárajú rýchle filtrovanie podľa Austrálie, možno budete chcieť obmedziť rýchly filter produktu na zobrazenie možností, v ktorých údajov súvisí s austrálskym predajom. To je to, čo majú zobrazovať možnosti rýchleho filtra "s údajmi". Toto správanie môžete dosiahnuť nastavením vzťahu medzi Product
a Sales
tabuľkami na filtrovanie v oboch smeroch.
Rýchly filter produktu teraz uvádza jednu možnosť: Tričko. Táto možnosť predstavuje jediný produkt, ktorý sa predáva austrálskym zákazníkom.
Najskôr odporúčame starostlivo zvážiť, či tento návrh funguje pre vašich používateľov zostáv. Pre niektorých používateľov zostáv je toto prostredie mätúce, pretože nechápu, prečo sa možnosti rýchleho filtra pri interakcii s inými rýchlymi filtrami dynamicky zobrazujú alebo miznú.
Ak sa rozhodnete zobraziť možnosti rýchleho filtra "s údajmi", neodporúčame nastaviť obojsmerné vzťahy. Obojsmerné vzťahy vyžadujú viac spracovania a môžu mať negatívny vplyv na výkon dotazov, najmä keď sa počet obojsmerných vzťahov v modeli zvyšuje.
Rovnaký výsledok môžete dosiahnuť aj lepším spôsobom: Namiesto používania obojsmerných filtrov môžete použiť filter na úrovni vizuálu na samotný rýchly filter produktu.
Teraz si zoberme, že vzťah medzi Product
a Sales
tabuľkami už nie je filtrovaný v oboch smeroch. Do tabuľky Sales
bola pridaná nasledujúca definícia mierky.
Total Quantity = SUM(Sales[Quantity])
Ak chcete zobraziť možnosti rýchleho filtra produktu "s údajmi", je potrebné filtrovať ho podľa Total Quantity
mierky pomocou podmienky "nie je prázdne".
Analýza od dimenzie k dimenzii
Iný scenár, ktorý zahŕňa obojsmerné vzťahy, zaobchádza s
Pomocou vzorového modelu v tomto článku zvážte, ako možno odpovedať na nasledujúce otázky:
- Koľko farieb sa predávalo austrálskym zákazníkom?
- Koľko krajín alebo oblastí zakúpilo džínsy?
Na obe otázky možno odpovedať bez sumarizácie údajov v premosťovanej tabuľke faktov. Vyžaduje sa však, aby sa filtre šírili z jednej tabuľky dimenzií do druhej. Keď sa filtre šíria prostredníctvom tabuľky faktov, sumarizáciu stĺpcov tabuľky dimenzií možno dosiahnuť pomocou funkcie DISTINCTCOUNT jazyka DAX – a prípadne pomocou funkcie MIN a MAX jazyka DAX.
Keďže tabuľka faktov sa správa ako premosťovacia tabuľka, môžete použiť pokyny na vzťah typu many-to-many na vytvorenie vzťahu medzi dvomi tabuľkami dimenzií. Bude potrebné nastaviť aspoň jeden vzťah na filtrovanie v oboch smeroch. Ďalšie informácie nájdete pokyny nana vzťahy typu many-to-many.
Ako už bolo v tomto článku popísané, tento návrh pravdepodobne bude mať za následok negatívny vplyv na výkon a prostredie používateľov v súvislosti s možnosťami rýchleho filtra "s údajmi". Preto namiesto toho odporúčame aktivovať obojsmerné filtrovanie v definícii mierky pomocou funkcie CROSSFILTER DAX. Funkciu CROSSFILTER môžete použiť na úpravu smerov filtrovania – alebo dokonca na zakázanie vzťahu – počas vyhodnocovania výrazu.
Zvážte pridanie nasledujúcej definície mierky do tabuľky Sales
. V tomto príklade bol modelový vzťah medzi Customer
a Sales
tabuľkami nastavený tak, aby filtrovali v jednosmernom.
Different Countries Sold =
CALCULATE(
DISTINCTCOUNT(Customer[Country-Region]),
CROSSFILTER(
Customer[CustomerCode],
Sales[CustomerCode],
BOTH
)
)
Počas vyhodnocovania Different Countries Sold
mierky sa vzťah medzi Customer
a Sales
tabuľkami filtruje v oboch smeroch.
V nasledujúcom vizuáli tabuľky sa nachádzajú štatistiky pre každý predávaný produkt. Stĺpec Quantity
je jednoduchým súčtom hodnôt množstva. Stĺpec Different Countries Sold
predstavuje jedinečný počet hodnôt Krajina – oblasť všetkých zákazníkov, ktorí produkt zakúpili.
Súvisiaci obsah
Ďalšie informácie súvisiace s týmto článkom nájdete v nasledujúcich zdrojoch:
- Vzťahy modelov v aplikácii Power BI Desktop
- Vysvetlenie hviezdicovej schémy a jej dôležitosti pre Power BI
- Pokyny na prístup k vzťahom one-to-one
- Pokyny na vzťahy typu many-to-many
- Pokyny na riešenie problémov so vzťahmi
- Máte nejaké otázky? Skúste sa spýtať na komunity Fabric
- Návrhy? prispievať nápadmi na zlepšenie v látkach