Na co si dát pozor při řazení podle jiného sloupce v Power BI

Nastavení řazení hodnot v jednom sloupci podle hodnot v jiném sloupci je v mnoha situacích velmi užitečné nebo dokonce nezbytné. Toto nastavení ale může mít také negativní dopad na měřítka, která mohou za určitých okolností vracet špatné výsledky. To se děje především v měřítku vyhodnoceném v kontextu sloupce seřazeného podle hodnot v jiném sloupci, ve kterém manipulujeme s filtry. V tomto příspěvku si popíšeme, proč tomu tak je a jak měřítka opravit aby opět fungovala správně.

K tomuto tématu je k dispozici také video:

V Power BI je k dispozici funkce "Seřadit podle sloupce", která umožňuje seřadit hodnoty v jednom sloupci podle hodnot v jiném sloupci ze stejné tabulky. Typickým příkladem použití této funkce mohou být názvy měsíců v kalendářní tabulce. Pokud vložíme měsíce z kalendářní tabulky do vizuálu, měsíce jsou automaticky řazeny abecedně. Přirozenější řazení měsíců je ale určitě řazení podle jejich pořadí v roce. Toho můžeme dosáhnout právě seřazením sloupce s názvy měsíců podle sloupce s pořadovými čísly měsíců.

V následující části příspěvku si popíšeme, jaký dopad může mít toto nastavení na výpočty v měřítku.

Řazení podle jiného sloupce a dopad na výpočty v měřítku

Příklady v tomto příspěvku jsou vytvořeny ve cvičném Power BI souboru Adventure Works DW 2020.pbix, který je volně dostupný ke stažení na internetu. Soubor s řešením si můžete stáhnout pod odkazem uvedeným níže pod tímto příspěvkem.

V příkladech budeme mimo jiné pracovat s měřítkem [Prodeje], které má následující definici.

Měřítko:

Prodeje = SUM(Sales[Sales Amount])

Začít můžeme jednoduchým reportem, ve kterém si vytvoříme průřez s roky z kalendářní tabulky, a dále vizuál matice s názvy měsíců v řádcích a s měřítkem [Prodeje] v hodnotách.

Power BI - Řazení hodnot podle jiného sloupce a na co si dát pozor

Jak je možné vidět na obrázku výše, měsíce v řádcích vizuálu jsou seřazeny abecedně, což není pro uživatele příliš přehledné. Před tím, než si hodnoty ve sloupci s názvy měsíců seřadíme podle sloupce s pořadovými čísly měsíců, přidáme si do modelu měřítko, které bude vracet procentuální podíl prodejů v aktuálním měsíci vůči prodejům v celém roce.

Měřítko:

% Podíl prodejů =
VAR ProdejeVCelemRoce =
    CALCULATE
    (
        [Prodeje],
        REMOVEFILTERS('Date'[Měsíc název])
    )
VAR ProdejeVAktualnimMesici = [Prodeje]
VAR Vypocet = DIVIDE(ProdejeVAktualnimMesici, ProdejeVCelemRoce)
RETURN
    Vypocet

V proměnné ProdejeVCelemRoce před vyhodnocením měřítka [Prodeje] odstraňujeme filtry ze sloupce s měsíci, které jsou v řádcích vizuálu. Díky tomu dostaneme v této proměnné prodeje za celý rok, a tuto hodnotu následně použijeme pro dělení prodejů v aktuálním měsíci, čímž dostaneme procentuální podíl prodejů v aktuálním měsíci. Měřítko [% Podíl prodejů] si můžeme vložit do vizuálu matice ve dříve vytvořeném reportu.

Power BI - Řazení hodnot podle jiného sloupce a na co si dát pozor 2

Nové měřítko [% Podíl prodejů] vrací podle očekávání procentuální podíl prodejů v aktuálním měsíci a vybraném roce vůči prodejům za všechny měsíce v celém roce.

Nyní, když máme vytvořené měřítko, ve kterém manipulujeme s filtry, můžeme si seřadit hodnoty ve sloupci 'Date'[Měsíc název] podle sloupce 'Date'[Měsíc číslo], který obsahuje pořadové číslo měsíců v roce. K seřazení sloupce s názvy měsíců stačí tento sloupec označit, a dále na kartě "Nástroje tabulky" otevřít seznam u tlačítka "Seřadit podle sloupce", kde vybereme název sloupce s pořadovým číslem měsíců.

Power BI - Řazení hodnot podle jiného sloupce a na co si dát pozor 3

Pokud se vrátíme zpět do reportu, můžeme si všimnout, že měsíce jsou nyní opravdu seřazeny podle jejich pořadí v roce, a ne podle abecedního pořadí, jak tomu bylo v původním reportu před nastavením řazení podle jiného sloupce.

Power BI - Řazení hodnot podle jiného sloupce a na co si dát pozor 4

Názvy měsíců jsou nyní seřazeny podle pořadí v roce, nicméně současně přestalo fungovat měřítko [% Podíl prodejů], které nyní vrací pro každý měsíc stejnou hodnotu 100 %.

Vysvětlení, proč měřítko [% Podíl prodejů] přestalo fungovat, je skryté na pozadí vizuálu matice. Pro popis problému si zobrazíme DAX dotaz, který vygeneroval Power BI vizuál zobrazený na obrázku výše při načítání dat z modelu.

Power BI - Řazení hodnot podle jiného sloupce a na co si dát pozor 5

Důležité části dotazu pro vyřešení problému s měřítkem [% Podíl prodejů] jsou na obrázku výše zvýrazněny.  V posledním řádku dotazu můžeme vidět, že celý dotaz je mimo jiné seřazen také podle sloupce s pořadovým číslem měsíců. Aby tento sloupec mohl být použitý pro řazení, musí být také součástí načtených dat z modelu, což je možné vidět uvnitř funkce SUMMARIZECOLUMNS(). Šipky směřující k měřítku [% Podíl prodejů] znázorňují filtry, které působí na toto měřítko při jeho vyhodnocení.

Pozn.: Načítání hodnot ze sloupce určeného pro řazení jiného sloupce je vlastnost vztahující se pouze k nástrojům, které pro dotazování do datového modelu generují dotazy v jazyku DAX. Zatímco v Power BI dojde na pozadí také k načtení sloupce použitého k řazení sloupce použitého ve vizuálu, tak například v Excelu, kde jsou dotazy generovány v jazyku MDX, nedochází k načítaní hodnot ze sloupců použitých pro řazení, protože sloupce jsou v Excelu, na rozdíl od Power BI, řazeny podle metadat v modelu.

Měřítko [% Podíl prodejů] přestalo fungovat po seřazení sloupce 'Date'[Měsíc název] podle sloupce 'Date'[Měsíc číslo], protože sloupec použitý pro řazení se stal součástí dotazu na pozadí vizuálu. Všechna měřítka ve vizuálu jsou tedy nově vyhodnocena také v kontextu sloupce 'Date'[Měsíc číslo], i když tento sloupec není přímo zobrazený ve výsledném vizuálu, ale je použitý pouze pro seřazení výsledku.

Pokud tedy v měřítku [% Podíl prodejů] odstraňujeme filtry ze sloupce s názvy měsíců, sloupec s pořadovými čísly měsíců stále na měřítko působí, a to je ten důvod proč měřítko [% Podíl prodejů] přestalo vracet správné výsledky. S touto znalostí je oprava měřítka jednoduchá. Stačí do funkce REMOVEFILTERS() v definici dělitele přidat také sloupec použitý pro řazení.

 Měřítko:

% Podíl prodejů (Opraveno) =
VAR ProdejeVCelemRoce =
    CALCULATE
    (
        [Prodeje],
        REMOVEFILTERS('Date'[Měsíc název], 'Date'[Měsíc číslo])
    )
VAR ProdejeVAktualnimMesici = [Prodeje]
VAR Vypocet = DIVIDE(ProdejeVAktualnimMesici, ProdejeVCelemRoce)
RETURN
    Vypocet

Pokud novou verzi měřítka vložíme do původního vizuálu, můžeme vidět, že výpočet opět začal fungovat, a to i v kontextu sloupce seřazeného podle hodnot v jiném sloupci.

Power BI - Řazení hodnot podle jiného sloupce a na co si dát pozor 6

Jak je nyní možné vidět na obrázku výše, nové měřítko [% Podíl prodejů (Opraveno)] nyní funguje a vrací opět správné výsledky.

Shrnutí

Pokud využíváme možnost řazení hodnot ve sloupci podle hodnot v jiném sloupci, můžeme při výpočtech v měřítku dostávat neočekávané výsledky. Z tohoto důvodu je dobré vědět, že vizuály na pozadí generují dotazy. Tyto dotazy obsahují i případné sloupce určené pro řazení hodnot ve sloupcích, které jsou použity ve vizuálech. V případě že ve výpočtech manipulujeme s filtry, musíme se sloupci určenými pro řazení jiných sloupců počítat a zahrnout je do výpočtů pro dosažení očekávaných výsledků. 

Další příklady můžete najít na stránce Power BI nebo na stránce DAX příklady.

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

Komentáře