Funkce LOOKUPVALUE() v jazyku DAX je velmi podobná funkci SVYHLEDAT() v Excelu. Na rozdíl od Excelu, v Tabulárním modelu jsou obvykle mezi tabulkami vytvořeny relace. V takovém případě je efektivnější a jednoduší pro načtení hodnot z jiné tabulky použít funkci RELATED(). Funkci LOOKUPVALUE() obvykle používáme v jazyku DAX pouze ve vybraných specifických případech.
LOOKUPVALUE() vrací hodnotu z prohledávané tabulky, která odpovídá podmínce ve druhém a třetím argumentu funkce. Pokud potřebujeme, můžeme volitelně přidat více podmínek v dalších argumentech funkce, vždy v páru prohledávaný sloupec a hledaná hodnota. Syntaxe funkce LOOKUPVALUE() vypadá následovně.
Syntaxe funkce LOOKUPVALUE():
Prvním argumentem funkce je název sloupce, ze kterého chceme získat výslednou hodnotu. Výsledná hodnota bude ze stejného řádku prohledávané tabulky, ve kterém bude hodnota z prohledávaného sloupce ve druhém argumentu funkce odpovídat hledané hodnotě ve třetím argumentu funkce. Hledaná hodnota ve třetím argumentu funkce může být načtena ze sloupe na základě aktuálního kontextu řádku, ve kterém je funkce vyvolána. Dále můžeme ve třetím argumentu funkce použít konstantu nebo jinou funkci vracející v aktuálním kontextu skalární hodnotu.
Příklad LOOKUPVALUE
Počítaný sloupec:
Prvním argumentem funkce je název sloupce, ze kterého chceme získat výslednou hodnotu - sloupec s barvami produktů. Druhým argumentem je název sloupce z prohledávané tabulky, ve kterém chceme najít hodnotu ze třetího argumentu funkce. Podmínka ověřuje v každém řádku tabulky 'Sales', zda se hodnota ze sloupce 'Sales'[ProductKey] v aktuálním řádku iterace rovná některé z hodnot ve sloupci 'Product'[ProductKey] v prohledávané tabulce. Pokud je nalezena shoda, dojde k načtení hodnoty ze sloupce 'Product'[Color] do aktuálního řádku v tabulce 'Sales', ve kterém je podmínka splněna. Výsledkem je nový počítaný sloupec v tabulce 'Sales', který obsahuje barvy prodaných produktů.
Další důležitou poznámkou je fakt, že mezi tabulkou 'Sales' a tabulkou 'Product' je vytvořená relace. Tabulka 'Sales' je s tabulkou 'Product' ve vztahu MANY-TO-ONE, to znamená že každému záznamu v tabulce 'Sales' odpovídá vždy jenom jeden záznam v tabulce 'Product'.
V takovém případě není nutné používat funkci LOOKUPVALUE(). Díky relaci můžeme získat kteroukoliv hodnotu z tabulky 'Product' jednodušeji a efektivněji použitím funkce RELATED().
Počítaný sloupec:
Pokud existují mezi tabulkami relace, můžeme se vyhnout použití funkce LOOKUPVALUE() a požadované hodnoty získat i jednodušeji.
Vyhledání hodnoty na základě více podmínek pomocí LOOKUPVALUE
Tabulku s kurzy a roky si můžeme v Power BI souboru vytvořit jednoduše kliknutím na možnost "New table" na kartě "Modeling".
Do DAX editoru můžeme vložit následující kód, který vygeneruje tabulku se třemi sloupci a osmi řádky. Tabulka bude představovat kurzovní lístek, podle kterého budeme následně přepočítávat původní hodnoty v tabulce 'Sales'.
Počítaná tabulka:
Výsledná tabulka by měla vypadat následovně.
V tabulce 'Sales' jsou v použitém modelu prodeje za čtyři roky. Tabulka s kurzovním lístkem proto obsahuje osm řádků. Každý řádek představuje záznam pro daný rok a měnu s kurzem vůči USD ke konci kalendářního roku. Mezi tabulkou 'Sales' a novou tabulkou obsahující kurzy v CZK a v EUR není vytvořená relace. Právě v tomto případě může být pro vyhledání hodnot vhodná funkce LOOKUPVALUE().
V tabulce 'Sales' není k dispozici záznam o roku, ve kterém došlo k prodeji. Tento údaj musíme získat ze sloupce 'Sales'[OrderDateKey], který je ve formátu "rrrrMMdd". Aktuální rok prodeje získáme z tohoto sloupce jednoduše pomocí funkce LEFT(), díky které načteme z hodnot ve sloupci 'Sales'[OrderDateKey] pouze první čtyři znaky. Dále budeme k výpočtu hodnoty prodejů ve vybrané měně potřebovat hodnotu prodejů v původní měně a zkratku měny, do které budeme hodnotu prodejů převádět. Všechny tyto mezivýpočty si můžeme uložit do proměnných, a následně je použít k získání výsledné hodnoty v požadované měně. Výpočet hodnoty prodejů v CZK může vypadat následovně.
Počítaný sloupec:
Výsledkem funkce LOOKUPVALUE() je v každém řádku tabulky kurz v CZK měně, který odpovídá roku, ve kterém došlo k uskutečnění objednávky. Tímto kurzem v každém řádku nového počítaného sloupce vynásobíme původní hodnotu prodejů v USD, která je v tabulce 'Sales' ve sloupci 'Sales'[Sales Amount].
Počítaný sloupec:
Stejně jako u CZK měny, i nyní musíme ve funkci LOOKUPVALUE() použít dvě podmínky, abychom ze sloupce 'Kurzovní lístek'[Kurz] získali jednu výslednou hodnotu s kurzem v aktuálním roce. První podmínkou je aktuální rok vzniku objednávky, druhou podmínkou je zvolená měna.
Shrnutí
Funkce LOOKUPVALUE() je užitečná funkce, která může nahradit chybějící relace v modelu. Na druhou stranu vždy, když existuje mezi prohledávanou tabulkou a tabulkou, do které chceme hodnoty přidat odpovídající relace, můžeme namísto funkce LOOKUPVALUE() použít funkci RELATED(). Funkci LOOKUPVALUE() můžeme využít v případech, kdy hledaná hodnota odpovídá více podmínkám a nemůžeme nebo nechceme vytvářet mezi tabulkami relaci na základě složených klíčů. Dále může být funkce LOOKUPVALUE() užitečná v situacích, kdy je hledaná hodnota ve stejné tabulce, do které chceme výsledek funkce přidat. Při použití funkce LOOKUPVALUE() bychom měli mít jistotu, že definovaným podmínkám bude v prohledávané tabulce odpovídat pouze jedna hodnota. V opačném případě může funkce vracet chybu, kterou můžeme nahradit alternativním výsledkem, který vkládáme do posledního argumentu funkce. V případě, že hledaným podmínkám neodpovídá žádná hodnota v prohledávané tabulce, výsledkem funkce bude hodnota BLANK, případně hodnota z alternativního výsledku, pokud tuto hodnotu zadáme.
Komentáře
Okomentovat