DAX výraz pro řazení textových hodnot podle čísla v Power BI

Úvodní obrázek

V Power BI nebo v Excelu je k dispozici funkcionalita, která umožňuje seřadit hodnoty v jednom sloupci podle hodnot v jiném sloupci. Toto nastavení je velice užitečné, nicméně skrývá v sobě také malou past, kterou pokud neznáme, může přinést nepříjemnosti při tvorbě měřítek ve kterých manipulujeme s filtry. Jak nastavit řazení hodnot v jednom sloupci podle hodnot v jiném sloupci v Power BI, včetně možných dopadů na DAX výpočty v měřítku, je popsáno v samostatném příspěvku.

V tomto příspěvku si ukážeme jednoduchý trik, díky kterému si můžeme seřadit sloupec s texty podle číselných hodnot v jiném sloupci, a vyhnout se tak možným problémům, které jsou spojené se standardním a doporučovaným řešením s využitím vestavěné Power BI funkcionality, určené pro seřazení sloupce podle hodnot v jiném sloupci.

Pozn.: Postup seřazení sloupce v tomto příspěvku by neměl být preferovanou variantou, jedná pouze o zajímavou alternativu (možná kuriozitu) ke standardnímu řešení, které je popsané v už jednou zmíněném samostatném příspěvku.

V příkladu můžeme použít názvy měsíců, což je typický sloupec, který potřebujeme mít v reportu seřazený podle pořadí měsíců v roce, a ne podle abecedního pořadí. Pokud po načtení kalendářní tabulky vložíme názvy měsíců do vizuálu, bez nastavení řazení tohoto sloupce podle hodnot v jiném sloupci, výsledek může vypadat následovně.

DAX výraz pro řazení textových hodnot podle čísla v Power BI

Jak je možné vidět na obrázku výše, měsíce v řádcích vizuálu jsou seřazeny abecedně, a ne podle pořadí měsíců v roce. Alternativní postup, jak vytvořit další sloupec s názvy měsíců v kalendářní tabulce, který bude seřazen podle sloupce s pořadovým číslem měsíců,  může vypadat následovně.

Počítaný sloupec:

Měsíc název (řazení podle čísla měsíce) =
REPT
(
    UNICHAR(8203),
    MAX('Date'[Měsíc číslo]) - 'Date'[Měsíc číslo]
) &
'Date'[Měsíc název]

Logika výpočtu je založena na předpokladu, že netisknutelný znak UNICHAR 8203 je předřazen při řazení jakémukoliv písmenu v abecedě. Tento znak je prvním argumentem funkce REPT(), která vrátí takový počet těchto netisknutelných znaků s kódem 8203, jaké číslo bude výsledkem ve druhém argumentu funkce. Výsledkem výrazu ve druhém argumentu funkce REPT() je rozdíl mezi maximální hodnotou ve sloupci s pořadovým číslem měsíců (číslo 12 - prosinec),  od kterého odečteme pořadové číslo měsíce v aktuálním řádku. 

V řádku s měsícem leden tak bude ve druhém argumentu funkce REPT() číslo 11 (12 – 1), pro únor se to bude číslo 10 (12 – 2), a tak dále, až do prosince, ve kterém bude výsledkem druhého argumentu funkce REPT() číslo 0 (12 – 12). Pro měsíc leden tak bude před slovem leden vloženo 11 netisknutelných znaků UNICHAR 8203, které zajistí, že měsíc leden bude zařazen ve vizuálech na první místo. V měsíci únor to bude 10 netisknutelných znaků před samotným názvem měsíce a druhé místo v pořadí za měsícem leden, a tak dále. Pokud nový počítaný sloupec vložíme do vizuálu, výsledek bude vypadat následovně.

DAX výraz pro řazení textových hodnot podle čísla v Power BI

Jak je možné vidět na obrázku výše, nový počítaný sloupec je opravdu seřazen podle pořadí měsíců v roce. Tento postup je možné aplikovat také na jiné sloupce, které chceme seřadit podle číselné hodnoty v jiném sloupci stejné tabulky.

Postup seřazení sloupce uvedený v tomto příspěvku může být za určitých okolností alternativou ke standardnímu řešení, které, pokud nevíme jak přesně funguje, může přinášet problémy při definici měřítek, ve kterých manipulujeme s filtry, jak je popsáno v již dříve odkazovaném příspěvku

Praktické  řešené úlohy v jazyku DAX, včetně komlexních příkladů nebo příkladů časových kalkulací, můžete najít na stránce DAX příklady nebo na stránce Power BI.

Stáhnout soubor s řešením.
č. 74

Komentáře