Práca so vzťahmi a kardinalitou

Dokončené

Na rozdiel od iných systémov správy databáz DBMS, služba Power BI pracuje v súvislosti so vzťahmi s konceptom smerovosti. Táto smerovosť hrá dôležitú úlohu pri filtrovaní údajov medzi viacerými tabuľkami. Keď načítate údaje, služba Power BI automaticky vyhľadá vzťahy, ktoré existujú v rámci údajov, a to podľa zodpovedajúcich názvov stĺpcov. Ak chcete upraviť tieto možnosti manuálne, môžete využiť funkciu Správa vzťahov.

Napríklad ste načítali veľa tabuliek z databázy Sales (Predaj) a nasledujúci obrázok je príkladom vášho sémantického modelu. Hoci služba Power BI automaticky zistila niekoľko vzťahov, neviete rozpoznať, čo znamenajú. Chcete sa predsa uistiť, že dané vzťahy zodpovedajú tým, ktoré sa nachádzajú vo vašich údajoch.

Snímka obrazovky s ukážkovým sémantickým modelom

Vzťahy

Nižšie sú uvedené rôzne typy vzťahov, ktoré nájdete v službe Power BI.

Vzťah typu Many-to-one (*:1) alebo one-to-many (1: *)

  • popisuje vzťah, v ktorom sa nachádza veľa inštancií hodnoty v jednom stĺpci, ktoré súvisia iba s jednou zodpovedajúcou inštanciou v inom stĺpci;

  • popisuje smerovosť medzi tabuľkami faktov a dimenzií;

  • je najbežnejší typ smerovosti a predstavuje predvolené nastavenie v službe Power BI počas automatického vytvárania vzťahov.

Príklad vzťahu one-to-many by sme mohli nájsť medzi tabuľkami CountryName (NázovKrajiny) a Territory (Oblasť), keďže sa tu nachádza množstvo oblastí, ktoré sú priradené k jednej jedinečnej krajine.

Snímka obrazovky vzťahu typu many-to-one.

Vzťah typu one-to-one (1:1):

  • popisuje vzťah, v ktorom je medzi dvoma tabuľkami bežná iba jedna inštancia hodnoty;

  • vyžaduje jedinečné hodnoty v oboch tabuľkách;

  • sa vo všeobecnosti neodporúča, pretože tento vzťah ukladá nadbytočné informácie a naznačuje, že model nie je správne navrhnutý. Lepšie je tabuľky kombinovať.

Príkladom vzťahu one-to-one by bol stav, keď by ste mali v dvoch rôznych tabuľkách produkty a ID produktov. Vytvorenie vzťahu typu one-to-one je zbytočné, keďže tieto dve tabuľky by sa mali skombinovať.

Snímka obrazovky vzťahu one-to-one.

Vzťah typu Many-to-many (.):

  • popisuje vzťah, v ktorom sa medzi dvoma tabuľkami nachádzajú rovnaké hodnoty;

  • v tabuľkách v rámci vzťahu nevyžaduje žiadne jedinečné hodnoty;

  • sa neodporúča, pretože nedostatok jedinečných hodnôt by mohol znamenať nejednoznačnosť a vaši používatelia by nemuseli vedieť, na čo jednotlivé stĺpce hodnôt odkazujú.

Na nasledujúcom obrázku je napríklad zobrazený vzťah many-to-many medzi tabuľkami Sales (Predaj) a Order (Objednávka) v stĺpci OrderDate (DátumObjednávky), pretože viaceré predaje môžu mať priradené viaceré objednávky. Spôsobilo to teda nejednoznačnosť, pretože obe tabuľky môžu mať rovnaký dátum objednávky.

Snímka obrazovky vzťahu typu many-to-many.

Smer krížového filtrovania

Údaje je možné filtrovať na jednej alebo oboch stranách vzťahu.

Prípad jednosmerného krížového filtrovania:

  • Na filtrovanie údajov možno použiť iba jednu tabuľku vzťahu. Tabuľku 1 možno napríklad filtrovať podľa Tabuľky 2, ale Tabuľku 2 nemožno filtrovať podľa Tabuľky 1.

    Tip

    Sledujte vo vzťahu medzi tabuľkami smer šípky, aby ste vedeli, ktorým smerom bude filter postupovať. Obyčajne chcete, aby tieto šípky smerovali do tabuľky faktov.

  • V prípade vzťahu typu one-to-many alebo many-to-one bude smer krížového filtrovania zo strany "one", čo znamená, že filtrovanie sa uskutoční v tabuľke, ktorá má veľa hodnôt.

Prípad krížového filtrovania v oboch smeroch alebo obojsmerného krížového filtrovania:

  • Jednu tabuľku zo vzťahu je možné použiť na filtrovanie tej druhej. Tabuľku dimenzií je napríklad možné filtrovať prostredníctvom tabuľky faktov a tabuľku faktov je možné filtrovať prostredníctvom tabuľky dimenzií.

  • Pri použití obojsmerného krížového filtrovania pri vzťahu typu many-to-many môžete zaznamenať nižší výkon.

Upozornenie týkajúce sa obojsmerného krížového filtrovania: Obojsmerné krížové filtrovanie by ste nemali povoliť, pokiaľ nie ste celkom oboznámení s jeho následkami. Povolenie daného filtrovania môže viesť k nejednoznačnosti, nadmernému vzorkovaniu, neočakávaným výsledkom a potenciálne aj k poklesu výkonu.

Kardinalita a smer krížového filtrovania

V prípade vzťahov one-to-one je možné použiť iba obojsmerné krížové filtrovanie. Údaje je možné filtrovať na oboch stranách tohto vzťahu, pričom výsledkom je jedinečná a jednoznačná hodnota. Môžete napríklad filtrovať jedno ID Produktu a vráti sa jeden Produkt, prípadne môžete filtrovať Produkt a vráti sa jedno ID Produktu.

Pre vzťahy many-to-many platí, že si môžete vybrať medzi filtrovaním v jednom smere alebo v oboch smeroch pomocou obojsmerného krížového filtrovania. Nejednoznačnosť, ktorá sa spája s obojsmerným krížovým filtrovaním, sa vyskytuje obzvlášť v prípade vzťahov many-to-many, pretože medzi rozličnými tabuľkami sa budú vytvárať viaceré cesty. Ak vytvoríte mierku, výpočet alebo filter, počas filtrovania údajov sa môžu vyskytnúť neočakávané následky a, v závislosti od typu vzťahu, ktorý si nástroj Power BI pri použití filtra vyberie, konečný výsledok sa môže líšiť. Táto informácia platí aj pre obojsmerné vzťahy a je dôvodom, prečo by ste mali byť pri ich používaní opatrní.

Práve preto sú vzťahy typu many-to-many a obojsmerné vzťahy komplikované. Ak si nie ste istí, ako vaše údaje vyzerajú, keď sú agregované, tieto typy vzťahov s otvoreným koncom a viacerými smermi filtrovania môžu v rámci údajov priniesť viaceré cesty.

Vytvorenie vzťahov typu many-to-many

Predstavme si scenár, v ktorom máte za úlohu vytvoriť vizuál, ktorý skúma rozpočty pre zákazníkov a kontá. Môžete mať viacerých zákazníkov v jednom konte a viacero kont pre jedného zákazníka, takže viete, že musíte vytvoriť vzťah typu many-to-many.

Snímka obrazovky vzťahu typu many-to-many.

Ak chcete vytvoriť tento vzťah, prejdite na Správa vzťahov>Nový. V zobrazenom okne vytvorte vzťah medzi stĺpcom Customer ID (ID zákazníka) v tabuľkách CustomerTable (TabuľkaZákazníkov) a AccountTable (TabuľkaKonta). Vzťah je nastavený na typ Many-to-many a filter je v oboch smeroch. Ak existuje predpoklad, že žiaden zo stĺpcov nebude obsahovať jedinečné hodnoty, okamžite sa vám zobrazí upozornenie, že by ste mali používať iba tento typ vzťahu, pretože výsledkom by mohli byť neočakávané hodnoty. Keďže chcete filtrovať v oboch smeroch, vyberte možnosť obojsmerné krížové filtrovanie.

Vyberte položku OK. Úspešne ste vytvorili vzťah typu many-to-many.

Snímka obrazovky vzťahu typu many-to-many v časti Spravovať vzťahy.

Ďalšie informácie nájdete v téme Vzťahy typu many-to-many v službe Power BI.