DAX – porovnání konkrétního řádku se všemi řádky tabulky
S tímto tématem se setkáte na našich kurzech ExcelTown.
Aktuálně: kurzy můžete absolvovat jak online, tak prezenčně.
Tento článek popisuje, jak v daxovém výpočtu porovnávat všechny řádky s aktuálním. Jako např. v této tabulce. Máme lidi, kteří mají počet bodů, a naším úkolem je zjistit, na jaké pozici se umístili - kdo má nejvíce bodů, skončil na první pozici, atd.
Než se pustíme do vysvětlování, tak jen dvě upozornění:
- Tento výpočet se týká řádkového kontextu, použijete ho tedy pro dopočítání nového sloupce (ne míry).
- Tento konkrétní případ by šel řešit i funkcí RANK.EQ, nám jde ale o vysvětlení principu, který bychom mohli využít i u složitějších výpočtů - viz další příklad.
V čem je vlastně problém?
Asi by vás napadlo začít nějak takhle:
- = COUNTROWS(
FILTER(
'times',
...
jenže teď přijde ten problém. Potřebujete definovat, že hodnota Points v tabulce, kterou postupně procházíme, musí být vyšší než hodnota Points u konkrétního člověka. Jak ale odlišit tyto dvě "Points"?
Využijeme práce s kontextem:
- Position =
var his_points = 'times'[Points]
var his_rank = COUNTROWS(
FILTER(
'times',
'times'[Points]>his_points))
return
his_rank+1
Proč takhle?
Na začátku si definujeme proměnnou his_points, reprezentující body řádku, pro který počítáme pořadí. V tuto chvíli jsme ještě v řádkovém kontextu, takže třeba pro Betty získáme číslo 98.
Tuto hodnotu si v proměnné zapamatujeme.
V další proměnné pak funkcí FILTER budeme procházet všechny řádky (kontext je tedy rozšířený na celou tabulku). Nicméně proměnná his_points už je spočtená z dřívějška, takže to funguje.
Výpočet by šel udělat i trochu jinak - pomocí funkce EARLIER.
- Position earlier = COUNTROWS(
FILTER('times',
'times'[Points]>EARLIER(times[Points])))
+1
S tímto tématem se setkáte na našich kurzech ExcelTown.
Aktuálně: kurzy můžete absolvovat jak online, tak prezenčně.