DAX funkce RELATED a RELATEDTABLE

Power BI model

Funkce RELATED() vrací skalární hodnotu a je užitečná v situacích, kdy potřebujeme přistupovat z jedné tabulky k hodnotám v jiné tabulce. Funkce RELATEDTABLE() pak vrací tabulku, která může sloužit jako zdroj pro další výpočty. Funkce RELATED() a RELATEDTABLE() mohou být použity pouze mezi tabulkami, mezi kterými jsou vytvořené relace. Obě funkce mohou být použity i v rámci řetězce relací, pokud typ všech relací v řetězci odpovídá požadavkům zvolené funkce.

Příklad použití funkce RELATED

Funkce RELATED() má jeden povinný argument, kterým je název sloupce. RELATED() vrací skalární hodnotu, která odpovídá jedné hodnotě v cílovém sloupci. Ten je vyhodnocen v kontextu řádku, ve kterém je funkce použita. Pokud by aktuálnímu kontextu řádku odpovídalo více hodnot v zadaném sloupci, funkce vrátí chybu. 

Vytvoření nového sloupce s funkcí RELATED

Příklad s použitím funkce RELATED() si můžeme vytvořit ve cvičném souboru Contoso Sales Sample for Power BI Desktop.pbix. V použitém modelu jsou mimo jiné tabulky 'Product', 'ProductSubcategory' a 'ProductCategory'. Pokud bychom chtěli mít v tabulce s produkty pro každý jeden produkt také název kategorie, do které daný produkt patří, můžeme použít funkci RELATED(), protože pro každý produkt existuje v tabulce s kategoriemi pouze jedna odpovídající kategorie.

DAX - Funkce RELATED a RELATEDTABLE

Stačí tedy při vytváření nového počítaného sloupce v tabulce 'Product' zadat jako argument funkce RELATED() název sloupce, který obsahuje požadované hodnoty z tabulky 'ProductCategory', která je ve vztahu MANY-TO-ONE na straně ONE. Definice nového počítaného sloupce může vypadat následovně.

Počítaný sloupec:

Kategorie = RELATED(ProductCategory[ProductCategory])

Výsledkem je nový počítaný sloupec v tabulce 'Product'.

DAX - Funkce RELATED a RELATEDTABLE 2

Funkci RELATED() můžeme použit také v měřítku, jak je možné vidět na následujícím příkladu.

Použití funkce RELATED v měřítku

Funkce RELATED() může být vyvolána také v iteračních funkcích, ve kterých vzniká potřebný kontext řádku. Příkladem může být situace, kdy v tabulce 'Sales' máme množství prodaných produktů, a v tabulce 'Product' jsou jednotkové ceny produktů, které chceme použít pro výpočet sumy prodejů.

DAX - Funkce RELATED a RELATEDTABLE 3

Pokud bychom chtěli pro každý řádek tabulky 'Sales' vypočítat součin prodaného množství z tabulky 'Sales' a jednotkové ceny z tabulky 'Produkt', následující postup nebude fungovat.

DAX - Funkce RELATED a RELATEDTABLE 4

Požadovaný výsledek dostaneme díky funkci RELATED(), prostřednictvím které můžeme přistupovat do tabulky, jenž je ve vazbě MANY-TO-ONE na straně ONE. Funkční definice měřítka pak může vypadat následovně.

Měřítko:

Prodané množství x jednotková cena =
SUMX
(
Sales,
Sales[SalesQuantity] * RELATED('Product'[UnitPrice])
)

Výsledné měřítko pak vrací sumu za prodané produkty v aktuálním kontextu vyhodnocení.

DAX - Funkce RELATED a RELATEDTABLE 5

Funkci RELATED() můžeme použít pouze pokud je jejím výsledkem jedna skalární hodnota. Pokud by danému kontextu řádku odpovídalo v prohledávané tabulce více hodnot, můžeme použít funkci RELATEDTABLE().

Příklad použití funkce RELATEDTABLE

Pokud chceme přistupovat k tabulce, která je ve vztahu MANY-TO-ONE na straně MANY, nemůžeme již použít funkci RELATED(), protože pro každý řádek tabulky na straně ONE může existovat více záznamů v cílové tabulce na straně MANY. 

Pro určité typy výpočtů ale můžeme použít funkci RELATEDTABLE(). Argumentem funkce je název tabulky. Výsledkem funkce jsou všechny řádky tabulky, které odpovídají kontextu filtru právě iterovaného řádku, ve kterém je funkce vyhodnocena.

Příkladem může být situace, kdy chceme vytvořit nový počítaný sloupec v tabulce s kategoriemi, který bude obsahovat počet produktů, které patří do každé kategorie.

DAX - Funkce RELATED a RELATEDTABLE 6

Protože funkce RELATEDTABLE() vrací tabulku, následující postup není správný, protože nemůžeme vložit do jednoho řádku jinou tabulku, ale pouze skalární hodnotu.

DAX - Funkce RELATED a RELATEDTABLE 7

Pokud chceme zjistit počet produktů v každé kategorii, musíme použít funkci vracející skalární hodnotu. Jednou z těchto funkcí je funkce COUNTROWS(), která spočítá počet řádku v tabulce zadané jako argument této funkce. Definice počítaného sloupce v tabulce 'ProductCategory', který bude obsahovat počet produktů z  tabulky 'Product' v každé kategorii, může vypadat následovně.

Počítaný sloupec:

Počet produktů v kategorii =
COUNTROWS
(
RELATEDTABLE('Product')
)

Výsledkem je nový počítaný sloupec v tabulce 'ProductCategory'.

DAX - Funkce RELATED a RELATEDTABLE 8

Funkce RELATEDTABLE() by ve výše uvedeném příkladu mohla být nahrazena funkcí CALCULATETABLE() se stejným výsledkem, díky změně kontextu řádku na kontext filtru. Tato vlastnost je typická také pro funkci CALCULATE(). Více informací o změně kontextu řádku na kontext filtru můžete najít pod tímto odkazem. Některé praktické příklady s použitím různých DAX funkcí můžete najít na stránce Power BI - Příklady nebo na stránce DAX - příklady.

Komentáře