V tomto příspěvku si ukážeme jeden z možných postupů, pomocí kterého můžeme z hodnot, které pocházejí z více sloupců jednoho řádku tabulky získat agregovanou hodnotu v novém počítaném sloupci. Typ zamýšlené agregace není pro použitou logiku zásadní, a může být jednoduše vybrán volbou adekvátní DAX funkce. Například pomocí funkce MAXX() můžeme získat nejvyšší hodnotu z jednoho řádku tabulky, pomocí funkce AVERAGEX() průměrovat hodnoty, pomocí funkce MINX() získáme minimální hodnotu z více sloupců jednoho řádku tabulky, a tak dále.
K tomuto tématu je k dispozici také video:
Pro zjednodušení budeme v tomto příspěvku pracovat z jednou malou tabulkou, která obsahuje záznamy o teplotách naměřených ve vybraných městech.
Poznámka: Použitá tabulka zobrazená na obrázku níže záměrně není ve správné struktuře z pohledu datového modelování. Ve správně strukturované tabulce by měly být časy měření v samostatném sloupci, a naměřené hodnoty pouze v jednom sloupci. Čas měření by pak byl ve správně strukturované tabulce určen aktuálním časem v aktuálním řádku tabulky.
Použitá tabulka má 8 sloupců. V prvním sloupci je název města, ve druhém sloupci den, ve kterém došlo k měření teplot, a v dalších sloupcích naměřené teploty.
Představme si nyní situaci, kdy bychom chtěli v této tabulce vytvořit tři nové počítané sloupce. První sloupec by obsahoval nejvyšší denní teplotu, druhý sloupec nejnižší denní teplotu, a třetí sloupec průměrnou denní teplotu.
Celý problém si můžeme popsat na výpočtu nejvyšší denní naměřené teploty. K tomuto účelu by se jako první pravděpodobně nabízela funkce MAX(). Problémem ale je, že všechny agregační funkce jsou primárně určené pro agregace hodnot z jednoho sloupce, a ne z jednoho řádku tabulky. Funkce MAX() a funkce MIN() sice mohou být použity také se dvěma argumenty, kdy výsledkem bude nejvyšší, respektive nejnižší hodnota ze dvou vložených hodnot. My ale chceme získat nejvyšší hodnotu ze šesti sloupců, a při použití funkce MAX() bychom tak museli vnořit pět těchto funkcí do sebe.
U průměru, produktu a nebo u dalších typů agregací bychom pak museli hledat jiné řešení, protože například ve funkci SUM() a nebo ve funkci AVERAGE() již nemůžeme použít dva argumenty, a vnořování těchto funkcí by nám náš problém již nevyřešilo.
Proto si ukážeme univerzální postup, který bude vracet agregovanou hodnotu z více sloupců z jednoho řádku tabulky, kdy typ agregace bude záležet pouze na použité funkci.
Celá logika není nijak složitá. V novém počítaném sloupci si nejprve pomocí konstruktoru tabulky vytvoříme z jednotlivých hodnot v řádcích novou virtuální tabulku. Konstruktor tabulky se vytváří pomocí složených závorek. Do konstruktoru tabulky bude stačit vložit odkazy na jednotlivé sloupce, které chceme pro výpočet použít. V počítaném sloupci totiž pracujeme s kontextem řádku, který nám zajistí přístup k aktuální hodnotě z každého použitého sloupce.
Následně můžeme tuto virtuální tabulku vytvořenou pomocí konstruktoru tabulky vložit do jakékoliv agregační nebo statistické funkce, která má na konci názvu písmeno X. Funkce s X na konci názvu totiž přijímají v prvním argumentu tabulku, a ve druhém argumentu odkaz na sloupec z této tabulky určený k agregaci.
Pro získání nejvyšší hodnoty ze všech naměřených hodnot v aktuálním řádku tabulky tak můžeme použít například následující definici nového počítaného sloupce.
Počítaný sloupec:
Prvním argumentem funkce MAXX() je tabulka, která obsahuje jeden sloupec se všemi hodnotami měření z aktuálního řádku tabulky. Následně funkce MAXX() vybere z tohoto sloupce nejvyšší hodnotu. Druhým argumentem funkce MAXX() je odkaz na sloupec z tabulky vytvořené konstruktorem tabulky, kdy tento sloupec je automaticky pojmenovaný názvem [Value].
Pokud bychom pro daný den chtěli získat nejnižší naměřenou hodnotu, stačí nahradit funkci MAXX() funkcí MINX() následujícím způsobem.
Počítaný sloupec:
Pro výpočet průměru pak použijeme funkci AVERAGEX().
Počítaný sloupec:
Výsledná tabulka se všemi novými počítanými sloupci pak vypadá následovně.
Jak je možné vidět na obrázku výše, sloupec 'Města a teploty'[Nejvyšší hodnota] obsahuje nejvyšší denní naměřené hodnoty z každého řádku tabulky. Sloupec 'Města a teploty'[Nejnižší hodnota] obsahuje nejnižší denní hodnoty a poslední sloupec obsahuje průměrné denní hodnoty.
Komentáře
Okomentovat