Zobrazení počátečního stavu v prvním řádku Power BI vizuálu

Úvodní obrázek

V tomto příspěvku si ukážeme jednu z možností, jakým způsobem můžeme v prvním řádku vizuálu Matice zobrazovat počáteční stav vybraného měřítka. Jinými slovy v prvním řádku vizuálu budeme chtít vidět souhrn, který bude odpovídat součtu hodnot před aktuálně vybraným obdobím v Průřezu. V ostatních řádcích Matice ale budeme zobrazovat hodnoty za aktuálně vybrané období.

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

Pracovat budeme s měřítkem [Prodeje], které má následující definici.

Měřítko:

Prodeje = SUM(Sales[Sales Amount])

Začít můžeme přípravou Power BI reportu. Do vizuálu Průřez si vložíme roky z kalendářní tabulky, a do vizuálu Matice měsíce a měřítko [Prodeje].

Zobrazení počátečního stavu v prvním řádku Power BI vizuálu

Na obrázku výše je v Průřezu vybraný rok 2020. V řádcích vizuálu proto vidíme pouze měsíce z vybraného roku, pro které jsou současně k dispozici informace o prodejích ve faktové tabulce 'Sales'. Poslední měsíc s prodeji je v použitém modelu měsíc červen 2020.

Naším úkolem nyní bude přidat do vizuálu Matice jeden řádek v rámci kterého se bude zobrazovat hodnota prodejů za všechny dny před vybraným obdobím v Průřezu.

Přidání další hodnoty do řádků, sloupců nebo na osy vizuálů vždy vyžaduje úpravu modelu, protože v řádcích nebo na osách vizuálu nemůžeme zobrazovat hodnoty měřítek, ale pouze atributy z tabulek v modelu.

V našem příkladu se přirozeně nabízí přidat další záznam do tabulky 'Date', který bude obsahovat ve sloupci s měsíci, nebo obecně v každém sloupci který můžeme pro tento účel použít, hodnotu, kterou budeme chtít zobrazit v prvním řádku vizuálu, například text "Počáteční stav". Tento krok, tedy umělé přidání dalšího řádu do tabulky 'Date', může ale mít za určitých okolností negativní dopad na další vizuály, ve kterých jsou použity sloupce z kalendářní tabulky, nebo případně na již existující DAX výpočty. Další variantou, jak zobrazovat "Počáteční stav" v prvním řádku vizuálu je vytvořit si pro tento účel novou datumovou tabulku, která by byla kopií originální 'Date' tabulky, nicméně navíc by obsahovala uměle přidaný řádek s hodnotami "Počáteční stav". Sloupce z této tabulky bychom následně použili pouze v jednom konkrétním vizuálu, a všechny stávající vizualizace a výpočty by zůstaly nedotčené. Tento postup by ale zbytečně zvětšoval model o další tabulku a také znepřehledňoval model.

Pokud budeme vycházet z předpokladu že pracujeme s vizuálem Matice, kde můžeme vložit do řádků vizuálu hierarchicky více sloupců z tabulky 'Date', bude nám stačit přidat nový sloupec do tabulky 'Date', který bude v každém řádku obsahovat text "Počáteční stav".

Počítaný sloupec:

Počateční stav = "Počáteční stav"

Následně můžeme nový sloupec vložit na první místo do řádků vizuálu, před sloupec s měsíci.

Zobrazení počátečního stavu v prvním řádku Power BI vizuálu 2

Jak můžeme vidět na obrázku výše, v prvním řádku vizuálu již nyní vidíme text "Počáteční stav". Měřítko [Prodeje] pak v rámci tohoto řádku vrací stejnou hodnotu jako je hodnota v řádku souhrnů Celkem. Důvodem je že v novém sloupci 'Date'[Počáteční stav] je v každém řádku tabulky, a tedy pro každý den stejná hodnota, hodnota "Počáteční stav". Pokud tedy působí na měřítko [Prodeje] filtr nastavený na sloupec 'Date'[Počáteční stav] a hodnotu "Počáteční stav", tento filtr ve skutečnosti vrací všechny řádky z tabulky 'Date', které jsou dostupné v aktuálním kontextu vyhodnocení, v našem příkladu všechny dny roku 2020. To jsou stejné dny které jsou dostupné také v řádku souhrnů Celkem.

Přidáním nového počítaného sloupce jsme tedy vyřešili pouze jednu část problému, zbytek budeme muset vyřešit pomocí jazyka DAX přímo v měřítku. 

Cílem tedy bude zobrazovat v řádku "Počáteční stav" hodnotu prodejů za všechny dny před prvním dnem vybraným v Průřezu. Nastavit filtr v měřítku na všechny dny před prvním dnem dostupným v aktuálním kontextu vyhodnocení není nic složitého. K tomu stačí přidat do funkce CALCULATE() logický filtr na sloupec 'Date'[Date]. Složitější část výpočtu ale spočívá v tom, že pro jednotlivé měsíce v řádcích vizuálu budeme chtít stále zobrazovat hodnotu měřítka [Prodeje], bez jakýchkoliv manipulací s filtry. To samé platí pro řádek souhrnů. Ve výpočtu tedy musíme nějakým způsobem zjistit, zda se nacházíme v řádku "Počáteční stav", a pouze v tomto řádku vizuálu zobrazovat prodeje za všechny dny před prvním dnem v aktuálním kontextu vyhodnocení, tedy v našem příkladu prodeje před rokem 2020.

Měřítko:

Prodeje a počáteční stav =
VAR PrvniDenVeVizualu = CALCULATE(MIN('Date'[Date]), ALLSELECTED('Date'))
VAR ProdejePredPrvnimDnem =
    CALCULATE
    (
        [Prodeje],
        REMOVEFILTERS('Date'),
        'Date'[Date] < PrvniDenVeVizualu
    )
VAR ZobrazitPocatecniStav =
    AND
    (
        COUNTROWS('Date') = COUNTROWS(ALLSELECTED('Date')),
        ISFILTERED('Date'[Počateční stav])
    )
VAR Prodeje = [Prodeje]
VAR Vypocet =
    IF
    (
        ZobrazitPocatecniStav,
        ProdejePredPrvnimDnem,
        Prodeje
    )
RETURN
    Vypocet

V měřítku [Prodeje a počáteční stav] nejdříve v první proměnné zjišťujeme první den který je dostupný v rámci vizuálu Matice. Pokud je tedy v Průřezu vybraný rok 2020, jedná se o 1. 1. 2020. Následně je v proměnné ProdejePredPrvnimDnem uložena hodnota prodejů za všechny dny před 1. 1. 2020. V proměnné ZobrazitPocatecniStav jsou ve funkci AND() dvě logické podmínky. První logická podmínka vrací hodnotu TRUE v případě, že tabulka 'Date' není  efektivně filtrována hodnotami z řádků vizuálu Matice. To platí pouze v řádku souhrnů Celkem a v řádku "Počátení stav". Abychom rozlišili mezi těmito dvěma řádky, ověřujeme pomocí funkce ISFILTERED() zda je v aktuálním kontextu přímo filtrovaný sloupec 'Date'[Počáteční stav]. Kombinace těchto dvou podmínek platí pouze pro řádek "Počáteční stav", a pokud tedy v proměnné Vypocet ve funkci IF() platí, že jsme v řádku "Počáteční stav", zobrazíme hodnotu prodejů za období před prvním dnem zobrazeným ve vizuálu Matice. Pokud podmínka není splněna, zobrazíme hodnotu měřítka [Prodeje].

Zobrazení počátečního stavu v prvním řádku Power BI vizuálu 3

Na obrázku výše nyní můžeme vidět, že měřítko [Prodeje a počáteční stav] vrací v prvním řádku vizuálu prodeje za roky 2017 až 2019. V řádcích s jednotlivými měsíci vidíme prodeje za aktuální měsíc a v řádku souhrnů prodeje za celý rok 2020, který je vybraný ve vizuálu Průřez.

V řádku Celkem tedy nyní nezobrazujeme součet všech hodnot z jednotlivých řádků, které vidíme ve vizuálu, ale pouze prodeje za vybraný rok v Průřezu. Pokud bychom chtěli vidět v řádku Celkem prodeje jak za dny před vybraným obdobím, tak za všechny měsíce zobrazené v řádcích vizuálu, můžeme použít mírně upravenou druhou verzi výpočtu.

Měřítko:

Prodeje a počáteční stav (v2) =
VAR PrvniDenVeVizualu = CALCULATE(MIN('Date'[Date]), ALLSELECTED('Date'))
VAR ProdejePredPrvnimDnem =
    CALCULATE
    (
        [Prodeje],
        REMOVEFILTERS('Date'),
        'Date'[Date] < PrvniDenVeVizualu
    )
VAR ZobrazitRadekSouhrnu = COUNTROWS('Date') = COUNTROWS(ALLSELECTED('Date'))
VAR ZobrazitPocatecniStav =
    AND(ZobrazitRadekSouhrnu, ISFILTERED('Date'[Počateční stav]))
VAR Prodeje = [Prodeje]
VAR Vypocet =
    IF
    (
        ZobrazitPocatecniStav,
        ProdejePredPrvnimDnem,
        IF
        (
            ZobrazitRadekSouhrnu,
            ProdejePredPrvnimDnem + Prodeje,
            Prodeje
        )
    )
RETURN
    Vypocet

V nové verzi výpočtu navíc oproti původnímu měřítku ověřujeme v proměnné ZobrazitRadekSouhrnu, zda se při vyhodnocení měřítka nacházíme v řádku Celkem. V proměnné Vypocet následně v případě, že nejsme v řádku "Počáteční stav" a současně jsme v řádku Celkem, vypíšeme součet prodejů za vybrané období a prodejů za dny před vybraným obdobím, tedy součet proměnných ProdejePredPrvnimDnem a Prodeje. Pokud nejsme ani v řádku "Počáteční stav" a ani v řádku Celkem, nacházíme se v řádcích s měsíci a vypíšeme hodnoty aktuálních prodejů.

Zobrazení počátečního stavu v prvním řádku Power BI vizuálu 4

Jediný rozdíl mezi měřítkem [Prodeje a počáteční stav] a měřítkem [Prodeje a počáteční stav (v2)] můžeme vidět v řádku souhrnů celkem, kde u měřítka [Prodeje a počáteční stav] zobrazujeme pouze prodeje za období které je vybrané v Průřezu, zatímco v měřítku [Prodeje a počáteční stav (v2)] zobrazujeme prodeje jak za období které je vybrané v Průřezu, tak za všechny dny které předcházejí tomuto období.

Komentáře