USERELATIONSHIP() je funkce pro úpravu filtrů ve funkci CALCULATE(), díky které můžeme manipulovat s relacemi. Pokud mezi dvěma tabulkami existuje více relací, může být v jednu chvíli aktivní pouze jedna z nich. Použitím funkce USERELATIONSHIP() změníme neaktivní relaci na aktivní a původní relaci dočasně zneaktivníme.
Příklad USERELATIONSHIP
V souboru Adventure Works DW 2020 Power BI Desktop Sample jsou mezi tabulkou 'Sales' a tabulkou 'Date' tři relace. Aktivní je relace nastavená mezi sloupci 'Sales'[OrderDateKey] a 'Date'[DateKey].
V příkladu uvedeném v tomto příspěvku budeme pracovat s měřítkem [Prodeje], které má následující definici.
Měřítko:
Pokud přidáme do Power BI reportu tabulku s fiskálními roky v řádcích, a do hodnot vložíme měřítko, které počítá sumu prodejů z tabulky 'Sales', výsledek může vypadat následovně.
Hodnota měřítka [Prodeje] v prvním řádku tabulky zobrazuje sumu hodnot ze sloupce 'Sales'[Sales Amount], které odpovídají filtru pro fiskální rok 2018. Tento filtr prochází přes aktivní relaci, která je nastavena mezi tabulkami 'Sales' a 'Date' přes sloupce 'Sales'[OrderDateKey] a 'Date'[DateKey]. Hodnota měřítka [Prodeje] v prvním řádku tedy nemusí odpovídat sumě utržené za prodané produkty, ale jedná se o sumu hodnot jednotlivých objednávek v daném roce. Pokud bychom pro výpočet chtěli použít neaktivní relaci, která je nastavena mezi sloupci 'Sales'[DueDateKey] a 'Date'[DateKey], můžeme použít funkci USERELITONSHIP().
Funkce USERELATIONSHIP() se používá jako modifikátor funkce CALCULATE(). USERELATIONSHIP() má dva povinné argumenty - názvy sloupců představující neaktivní relaci, kterou chceme aktivovat. Při výpočtu výrazu v prvním argumentu funkce CALCULATE() pak bude pro výpočet použita relace aktivovaná funkcí USERELATIONSHIP(). Relace, která je nastavena jako aktivní v modelu, bude pro tento výpočet dočasně deaktivována.
Měřítko:
Výsledek může vypadat následovně.
Na obrázku výše je vidět rozdíly mezi výsledky měřítek [Prodeje] a [Prodeje podle data splatnosti]. Rozdíl je dán tím, že většina objednávek v tabulce 'Sales' má odložené datum splatnosti.
Další důležitou vlastností všech modifikátorů filtrů v CALCULATE() je, že jsou vyhodnoceny před všemi ostatními explicitními filtry. Explicitními filtry rozumíme filtry definované uvnitř funkce CALCULATE().
Měřítko:
Filtr uvedený v měřítku výše je nastavený na fiskální rok 2018. Protože jsou modifikátory v CALCULATE() vyhodnoceny přednostně, tak tento filtr využívá při vyhodnocení relaci definovanou ve funkci USERELATIONSHIP(). Výsledek měřítka proto odpovídá v každém řádku tabulky sumě prodejů ve fiskálním roce 2018, právě podle data splatnosti.
Jak je vidět na předcházejícím obrázku, filtr nastavený ve funkci CALCULATE() na fiskální rok 2018 je opravdu vyhodnocen až po aktivovaní relace vytvořené na základě datumu splatnosti.
Shrnutí
Funkce USERELATIONSHIP() může pro výpočet uvedený ve funkci CALCULATE() aktivovat relaci, která je v modelu nastavena jako neaktivní. Tato funkcionalita je výhodná především v situacích, kdy mezi dvěma tabulkami existují vztahy založené na hodnotách z více různých sloupců. Nemusíme tak duplikovat filtrovací tabulku, ale ve výpočtu můžeme neaktivní relaci aktivovat právě pomocí funkce USERELATIONSHIP().
Komentáře
Okomentovat