Použitie vzťahov typu many-to-many v aplikácii Power BI Desktop
Pomocou vzťahov s kardinalitou many-to-many v aplikácii Power BI Desktop môžete spájať tabuľky, ktoré používajú kardinalitu typu many-to-many. Môžete jednoduchšie vytvárať dátové modely, ktoré obsahujú dva zdroje údajov alebo viac. Vzťahy s kardinalitou many-to-many sú súčasťou možností väčších zložených modelov v aplikácii Power BI Desktop. Ďalšie informácie o zložených modeloch nájdete v téme Používanie zložených modelov v aplikácii Power BI Desktop.
Na čo sa vyrieši vzťah s kardinalitou many-to-many
Pred sprístupnením vzťahov s kardinalitou many-to-many bol vzťah medzi dvoma tabuľkami definovaný v službe Power BI. Aspoň jeden zo stĺpcov v tabuľke, ktoré boli zapojené do vzťahu, musel obsahovať jedinečné hodnoty. Často ich však neobsahuje ani jeden stĺpec.
Dve tabuľky mohli mať napríklad stĺpec s označením KrajinaOblasť. Hodnoty krajinyOblasť však neboli jedinečné ani v jednej z tabuliek. Na spojenie takýchto tabuliek bolo potrebné vytvoriť alternatívne riešenie. Jedným alternatívnym riešením by mohlo byť uvedenie ďalších tabuliek s potrebnými jedinečnými hodnotami. Vďaka vzťahom s kardinalitou many-to-many môžete takéto tabuľky spájať priamo pomocou vzťahu s kardinalitou many-to-many.
Použitie vzťahov s kardinalitou many-to-many
Pri definovaní vzťahu medzi dvoma tabuľkami v službe Power BI je nutné definovať kardinalitu vzťahu. Napríklad vzťah medzi tabuľkami PredajProduktov a Produkt – pomocou stĺpcov ProductSales[ProductCode] a Product[ProductCode]– by bol definovaný ako vzťah typu Many-1. Vzťah takto definujeme, pretože pre každý produkt je množstvo predajov a stĺpec v tabuľke Produkt (ProductCode) je jedinečný. Pri definovaní kardinality vzťahu ako Many-1, 1-Many alebo 1-1 ho služba Power BI overí a zabezpečí, aby kardinalita, ktorú ste vybrali, zodpovedá skutočným údajom.
Pozrite sa napríklad na jednoduchý model na tomto obrázku:
Teraz si predstavte, že tabuľka Produkt zobrazuje len dva riadky, ako je to znázornené:
Predstavte si tiež, že tabuľka Predaj obsahuje len štyri riadky, vrátane riadka pre produkt C. Z dôvodu chyby referenčnej integrity riadok v produkte C v tabuľke Produkt neexistuje.
Stĺpce NázovProduktu a Cena (z tabuľky Produkt) spolu s celkovým Qty pre každý produkt (z tabuľky PredajProduktov) by sa zobrazili takto:
Ako môžete vidieť na predchádzajúcom obrázku, vo vyobliekaní sa nachádza prázdny riadok s názvom NázovProduktu , ktorý súvisí s predajom pre produkt C. Tento prázdny riadok zodpovedá nasledujúcim aspektom:
Všetky riadky v tabuľke PredajProduktov , pre ktoré neexistuje žiadny zodpovedajúci riadok v tabuľke Produkt . Ide o problém s referenčnou integritou, ako vidíme pri produkte C v tomto príklade.
Všetky riadky v tabuľke PredajProduktov , pre ktoré má cudzí kľúč stĺpca hodnotu null.
Pre tieto dôvody v oboch prípadoch prázdny riadok zodpovedá predaju, pričom stĺpce NázovProduktu a Cena nie sú známe.
Niekedy sa stáva, že tabuľky sú spojené dvomi stĺpcami, no žiadn zo stĺpcov nie je jedinečný. Pozrime sa napríklad na tieto dve tabuľky:
Tabuľka Predaj zobrazuje údaje o predaji podľa Štátu a každý riadok obsahuje objem predaja pre typ predaja v danom štáte. Medzi tieto štáty patria KALIFORNIA (CA), Washington (WA) a TX (TX).
Tabuľka ÚdajeOMeste zobrazuje údaje o mestách vrátane obyvateľstva a štátu (vrátane štátov Kalifornia (CA), Washington (WA) a New York).
Stĺpec pre štát je teraz v oboch tabuľkách. Je rozumné chcieť nahlásiť celkový predaj podľa štátu aj celkový počet obyvateľov každého štátu. Nastáva však problém: stĺpec Štát nie je jedinečný ani v jednej tabuľke.
Predchádzajúce alternatívne riešenie
Ešte pred verziou vydanou v júli 2018 nemohli ste medzi týmito tabuľkami vytvoriť priamy vzťah. Bežným alternatívnym riešením bolo:
Vytvorenie tretej tabuľky, ktorá obsahuje iba jedinečné identifikátory Štát. Mohlo ísť o:
- Vypočítaná tabuľka (definovaná pomocou jazyka Data Analysis Expressions [DAX]).
- Tabuľka založená na dotaze, ktorý je definovaný v Editor Power Query a na základe ktorého by sa mohli zobraziť jedinečné identifikátory pochádzajúce z jednej z tabuliek.
- Celú kombinovanú množinu.
Potom vytvorte vzťah medzi dvomi pôvodnými tabuľkami a danou novou tabuľkou s použitím bežných vzťahov typu Many-1 .
Mohli by ste nechať tabuľku s alternatívnym riešením viditeľnú. Prípadne môžete tabuľku s alternatívnym riešením skryť, aby sa nezobývala v zozname Polia . Ak by ste tabuľku skryli, vzťahy typu Many-1 by boli bežne nastavené na filtrovanie v oboch smeroch a pole Štát by ste mohli použiť z jednej z tabuliek. Toto krížové filtrovanie by sa rozšírilo do inej tabuľky. Tento prístup je znázornený na nasledujúcom obrázku:
Vizuál zobrazujúci údaj Štát (z tabuľky ÚdajeOMeste) spolu s celkovým údajom obyvateľstva a celkovou položkou Predaj by potom mal vyzerať nasledovne:
Poznámka
Vzhľadom na fungovanie štátov z tabuľky ÚdajeOMeste v tomto alternatívnych riešeniach sú v zozname tejto tabuľky len dané štáty, a preto je štát TX vylúčený. A okrem toho, na rozdiel od vzťahov Many-1 , zatiaľ čo riadok súčtu zahŕňa všetky hodnoty Predaja (vrátane predaja v TX (TX)), podrobnosti neobsahujú prázdny riadok zahŕňajúci podobné nezhodné riadky. Podobne by žiaden prázdny riadok nezahŕňal položku Predaj , ktorej hodnota pre položku Štát by bola null.
Predpokladajme, že by ste do vizuálu pridali aj Mesto. Počet obyvateľov na Mesto by bol známy a v položke Predaj zobrazenej pre Mesto by sa jednoducho zopakovala hodnota Predaja pre zodpovedajúci Štát. Tento scenár sa zvyčajne vyskytuje, keď sa zoskupenie stĺpcov nesúvisí s niektorými agregovanými mierkami, ako je to znázornené tu:
Povedzme, že tu zadefinujete novú tabuľku predaja ako kombináciu všetkých štátov, a urobíme ju viditeľnou v zozname Polia . Rovnaký vizuál by zobrazoval Štát (v novej tabuľke), celkový počet obyvateľov a celkový predaj:
Ako vidíte, štát TX (so známou položkou Údaje o predaji , ale neznámy počet obyvateľov ) a Štát New York so známymi údajmi o obyvateľstve , ale neznámou položkou Predaj sa zahrnú. Toto alternatívne riešenie nie je optimálne a má množstvo problémov. Pre vzťahy s kardinalitou many-to-many prejdú nasledujúce problémy tak, ako je to popísané v nasledujúcej časti.
Ďalšie informácie o implementácii tohto alternatívneho riešenia nájdete v téme Pokyny na prácu so vzťahmi Many-to-many.
Použitie vzťahu s kardinalitou many-to-many namiesto alternatívneho riešenia
Tabuľky, ako napríklad tie, ktoré sme opísali skôr, môžete vytvoriť priamo bez potreby uchýliť sa k podobným alternatívnym riešeniam. Teraz je možné nastaviť kardinalitu vzťahu na many-to-many. Toto nastavenie naznačuje, že žiadna z tabuliek neobsahuje jedinečné hodnoty. V prípade takýchto vzťahov môžete stále kontrolovať, ktorá tabuľka filtruje druhú tabuľku. Prípadne môžete použiť obojsmerné filtrovanie, pričom každá tabuľka filtruje druhú.
V aplikácii Power BI Desktop sa kardinalita nastaví na typ many-to-many , pokiaľ je určené, že ani jedna tabuľka neobsahuje jedinečné hodnoty pre stĺpce vo vzťahu. V takýchto prípadoch výstražné hlásenie potvrdí, že chcete nastaviť vzťah a že zmena nie je nezamýšľaným účinkom problému s údajmi.
Napríklad pri vytváraní vzťahu priamo medzi tabuľkami ÚdajeOMeste a Predaj – pričom filtre by mali prúdiť z tabuľky ÚdajeOMeste do tabuľky Predaj – aplikácia Power BI Desktop zobrazí dialógové okno Upraviť vzťah :
Výsledné zobrazenie vzťahu bude potom zobrazovať priamy vzťah typu many-to-many medzi danými dvoma tabuľkami. Vzhľad tabuliek v zozname Polia a neskoršie správanie pri vytváraní vizuálov je potom podobné ako použitie alternatívneho riešenia. V alternatívnych riešeniach tabuľka navyše, ktorá zobrazuje odlišné údaje o štáte, nie je viditeľná. Ako sme uviedli predtým, zobrazil by sa vizuál s údajmi Štát, Obyvateľstvo a Predaj :
Hlavné rozdiely medzi vzťahmi s kardinalitou many-to-many a typickejšími vzťahmi typu Many-1 sú nasledovné:
Zobrazené hodnoty neobsahujú prázdny riadok predstavujúci nezhodné riadky v inej tabuľke. Hodnoty tiež nerátajú riadkom, ktorých stĺpec je použitý vo vzťahu v inej tabuľke s hodnotou null.
Nie je možné použiť
RELATED()
funkciu , pretože vo vzťahu môže byť viac ako jeden riadok.Použitím funkcie v
ALL()
tabuľke sa neodstránia filtre použité na iné súvisiace tabuľky, ktoré sú s ním vo vzťahu typu many-to-many. Mierka z predchádzajúceho príkladu, ktorá je definovaná podľa tohto príkladu, by neodstránila filtre v stĺpcoch so súvisiacou tabuľkou ÚdajeOMeste:Vizuál zobrazujúci údaje Štát, Predaj a Predaj celkom by mal mať za následok tento grafický prvok:
Vzhľadom na spomenuté rozdiely sa uistite, že výpočty, ktoré používajú ALL(<Table>)
metódu , ako % z celkovej hodnoty vracajú požadované výsledky.
Dôležité informácie a obmedzenia
Existuje niekoľko obmedzení pre túto verziu vzťahov s kardinalitou many-to-many a zložených modelov.
Nasledujúce dynamické Pripojenie (multidimenzionálne) zdroje sa nedajú používať so zloženými modelmi:
- SAP HANA
- SAP Business Warehouse
- SQL Server Analysis Services
- Sémantické modely Služby Power BI
- Azure Analysis Services
Keď sa pripojíte k týmto multidimenzionálnym zdrojom pomocou režimu DirectQuery, nemôžete sa pripojiť k inému zdroju DirectQuery ani ho kombinovať s importovanými údajmi.
Pri používaní vzťahov s kardinalitou many-to-many sa aj naďalej vzťahujú existujúce obmedzenia použitia režimu DirectQuery. Mnohé z týchto obmedzení sa teraz týkajú jednotlivých tabuliek v závislosti od ich režimu úložiska. Napríklad vypočítaný stĺpec importovaných tabuliek môže odkazovať na iné tabuľky, ale vypočítaný stĺpec v tabuľke DirectQuery stále môže odkazovať len na stĺpce v tej istej tabuľke. Ďalšie obmedzenia sa vzťahujú na model ako celok, ak je niektorá z tabuliek v rámci modelu v režime DirectQuery. Napríklad funkcie Rýchle Prehľady a Q&A napríklad nie sú v modeli k dispozícii, ak niektorá z tabuliek v ňom má režim úložiska typu DirectQuery.
Súvisiaci obsah
Ďalšie informácie o zložených modeloch a režime DirectQuery nájdete v nasledujúcich článkoch:
Pripomienky
https://aka.ms/ContentUserFeedback.
Pripravujeme: V priebehu roka 2024 postupne zrušíme službu Problémy v službe GitHub ako mechanizmus pripomienok týkajúcich sa obsahu a nahradíme ju novým systémom pripomienok. Ďalšie informácie nájdete na stránke:Odoslať a zobraziť pripomienky pre