Zdieľať cez


Pokyny na dvojsmerné vzťahy

Tento článok je určený pre modelárov údajových pracujúcich 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. 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ú 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 návrhy nájdete v téme Pokyny na vedenie vzťahov typu One-to-one.
  • Many-to-many: Pri vytváraní vzťahu medzi dvomi tabuľkami dimenzií sa vyžaduje 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 v téme Pokyny na vytvorenie vzťahov typu Many-to-many (Vytvorenie vzťahov dimenzií typu Many-to-many).

Položky rýchleho filtra "s údajmi"

Obojsmerné vzťahy môžu poskytnúť rýchle filtre, ktoré obmedzia položky na také, v ktorých 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.

Diagram znázorňujúci model obsahujúci tri tabuľky. Návrh je popísaný v nasledujúcom odseku.

Prvá tabuľka sa nazýva Customer a obsahuje tri stĺpce: Krajina – oblasť, Zákazník a KódZákazného zákazníka. Druhá tabuľka sa nazýva Produkt a obsahuje tri stĺpce: Farba, Produkt a SKU. Tretia tabuľka sa nazýva Sales (Predaj) a obsahuje štyri stĺpce: CustomerCode (KódZákazného zákazníka), OrderDate (DátumObjednávky), Quantity (Množstvo) a SKU (SKU). Tabuľky Zákazník a Produkt sú tabuľky dimenzií a každá z nich má vzťah one-to-many k tabuľke Predaj . 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.

Poznámka

V diagrame modelu aplikácie Power BI Desktop nie je možné zobraziť riadky tabuľky. Robí sa to v tomto článku, aby sme podporili diskusiu s jasnými príkladmi.

Diagram znázorňujúci, že model teraz zobrazuje riadky tabuľky. Podrobnosti riadkov sú popísané v nasledujúcom odseku.

Podrobnosti riadkov pre tri tabuľky sú popísané v nasledujúcom zozname s odrážkami:

  • Tabuľka Customer má dva riadky:
    • KódZákateľa CUST-01, Zákazník Zákazník-1, Krajina – oblasť USA
    • KódZákateľa CUST-02, Zákazník Zákazník-2, Krajina – oblasť Austrália
  • Tabuľka Produkt obsahuje tri riadky:
    • SKU CL-01, Produkt Tričko, Farba Zelená
    • SKU CL-02, Product Jeans, Modrá farba
    • SKU AC-01, Produkt Klobúk, Farba Modrá
  • Tabuľka Predaj obsahuje tri riadky:
    • DátumObjednávky 1. januára 2019, KódZákatku CUST-01, SKU CL-01, Množstvo 10
    • DátumObjednávky 2. februára 2019, KódZákatku CUST-01, SKU CL-02, Množstvo 20
    • DátumObjednávky 3. marca 2019, KódZákatku CUST-02, SKU CL-01, Množstvo 30

Teraz zvážte nasledujúcu stranu zostavy.

Diagram znázorňujúci stranu zostavy obsahujúcu tri vizuály. Podrobnosti sú popísané v nasledujúcom odseku.

Strana sa skladá z dvoch rýchlych filtrov a vizuálu karty. Prvý rýchly filter je Krajina – oblasť a obsahuje dve položky: Austrália a USA. Aktuálne filtruje podľa položky Austrália. Druhý rýchly filter je Produkt a obsahuje tri položky: 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 filtre podľa Austrálie, možno budete chcieť obmedziť rýchly filter Produkt na zobrazenie položiek, v ktorých sa údaje vzťahujú na austrálsky predaj. To je to, čo majú zobrazovať položky rýchleho filtra "s údajmi". Toto správanie môžete dosiahnuť nakonfigurovaním vzťahu medzi tabuľkami Produkt a Predaj na filtrovanie v oboch smeroch.

Diagram znázorňujúci model, že vzťah medzi tabuľkami Produkt a Predaj je teraz obojsmerný.

Rýchly filter Produkt teraz uvádza jednu položku: Tričko. Táto položka predstavuje jediný produkt, ktorý sa predáva austrálskym zákazníkom.

Diagram znázorňujúci stranu zostavy obsahujúcu tri vizuály a vyznačený prvok Produkt. Podrobnosti sú popísané v nasledujúcom odseku.

Najskôr starostlivo zvážite, či tento návrh funguje pre používateľov zostáv. Pre niektorých používateľov zostáv je toto prostredie mätúce. Nechápu, prečo sa položky rýchleho filtra pri interakcii s ostatnými rýchlymi filtrami dynamicky zobrazujú alebo miznú.

Ak sa rozhodnete zobraziť položky rýchleho filtra "s údajmi", neodporúčame konfigurovať obojsmerné vzťahy. Obojsmerné vzťahy vyžadujú viac spracovania a môžu mať negatívny vplyv na výkon dotazov, najmä ak sa počet obojsmerných vzťahov vo vašom modeli zvýši.

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 Produkt .

Teraz si zoberme, že vzťah medzi tabuľkami Produkt a Predaj sa už nefiltruje v oboch smeroch. Do tabuľky Predaj sa pridala nasledujúca definícia mierky.

Total Quantity = SUM(Sales[Quantity])

Ak chcete zobraziť položky rýchleho filtra Produkt "s údajmi", je potrebné filtrovať ho podľa mierky Celkové množstvo pomocou podmienky "nie je prázdne".

Diagram znázorňujúci, že tabla Filtre pre rýchly filter Produkt teraz filtruje podľa hodnoty

Analýza od dimenzie k dimenzii

Iný scenár, ktorý zahŕňa obojsmerné vzťahy, zaobchádza s tabuľkou faktov ako s premosťovanou tabuľkou. Týmto spôsobom podporuje analýzu údajov tabuľky dimenzií v kontexte filtra inej tabuľky dimenzií.

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 je možné 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. Po rozšírení filtrov prostredníctvom tabuľky faktov je možné vytvoriť súhrn stĺpcov tabuľky dimenzií pomocou funkcie jazyka DAX DISTINCTCOUNT – prípadne funkcií MIN a MAX jazyka DAX.

Keďže tabuľka faktov sa správa ako premosťovacia tabuľka, môžete postupovať podľa pokynov na vzťah typu many-to-many a vytvoriť vzťah medzi dvomi tabuľkami dimenzií. Bude potrebná konfigurácia aspoň jedného vzťahu na filtrovanie v oboch smeroch. Ďalšie informácie nájdete v téme Pokyny na vytvorenie vzťahov typu Many-to-many (Vytvorenie vzťahov dimenzií 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 položkami rýchleho filtra "s údajmi". Preto namiesto toho odporúčame aktivovať obojsmerné filtrovanie v definícii mierky pomocou funkcie CROSSFILTER DAX. Funkciu CROSSFILTER možno 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 Predaj . V tomto príklade je modelový vzťah medzi tabuľkami Zákazník a Predaj nakonfigurovaný na filtrovanie v jednom smere.

Different Countries Sold =
CALCULATE(
    DISTINCTCOUNT(Customer[Country-Region]),
    CROSSFILTER(
        Customer[CustomerCode],
        Sales[CustomerCode],
        BOTH
    )
)

Počas vyhodnocovania výrazu mierky Predaj v rôznych krajinách vzťah medzi tabuľkami Zákazník a Predaj sa 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 Predaj v rôznych krajinách predstavuje jedinečný počet hodnôt Krajina – oblasť všetkých zákazníkov, ktorí produkt zakúpili.

Diagram znázorňujúci, že vo vizuáli tabuľky sú uvedené dva produkty. V stĺpci Predaj v rôznych krajinách má položka Džínsy hodnotu 1 a položka Tričko hodnotu 2.

Ďalšie informácie súvisiace s týmto článkom nájdete v nasledujúcich zdrojoch: