11. října 2024

Filtrace s Measure ve sliceru, T-Shirt sizing

 Aneb co je to za divný název článku. Measure přece do sliceru dát nejde. Ano, máte pravdu. O čem právě bude pojednávat dnešní článek je, jakým způsobem tohle omezení obcházím.

Obecně totiž measure můžeme v Power BI použít v sekcích: Values, Tooltip, nikoliv však na řádcích, sloupcíh. Measure je od toho, že vrací hodnotu. Nedá se přes ni řezat.

Filtrace je omezená na "Filters on the visual". Osobně ale mívám lištu s filtry pro uživatele takřka výhradně skrytou. Pro uživatelskou interakci používám slicery.

Pojďme na scénář. Na začátku mám následující report nad demo databází Adventure Works

Chtěl bych mít možnost modely škatulkovat podle velikosti prodejů jako Trička 
L (large nad 1M)
M (medium 500k-1M)
S (small pod 500k)
Dalo by se více velikostí, ale pro ilustrativní účely stačí.
Vytvořím si jednoduchou measure pro určení velikosti, naformátuji jako text


Následně vygeneruji tabulku s velikostmi, jako nevázanou dimenzi, pro tento účel můžu použít například DAXovou funkci DATATABLE.
Vytvořím si další measure # Size visibility


Pokud v tabulce velikost není vybráno nic, vrací 1 (_filtered), v případě vybrané velikosti vybere jedničku u vybrané, u ostatních 0. 

Přidáme slicer s velikostí a na potřebných vizuálech filtr přes metriku # Size visibility > 0
A můžeme vesele filtrovat slicerem. Metrika Size visibility je v posledním screenshotu pouze informativní.

Závěr
V článku jsem popsal, jak řeším filtraci slicerem pro measures. Neobejdeme se bez pomocných metrika   pomocné dimenze. Nicméně pokud řešíte jiným efektivnějším způsobem, podělte se :)
















4 komentáře:

  1. Dobrý den, díky za článek, asi to bude vždy nějaký kompromis s dodatečnou parametrickou tabulkou. Jen tak při rychlém náhledu bych ale tipl že měřítko [# Size visibility] nebude fungovat pokud v průřezu vyberete víc než jednu velikost.

    OdpovědětVymazat
    Odpovědi
    1. Dobrý den, fungovat to bude i na multiselect. Ve filtrační podmínce na vizuálu je větší jak 0. A hodnoty sčítám, takže pro jednotlivé velikosti vyhoví jako větší jak 0 všechny jedničky i posčítaný total.

      Vymazat
    2. Tomu rozumím, měl sem namysli funkci SELECTEDVALUE(), která vrací BLANK když není vybraná pouze jedna hodnota. To znamená že když vyberete více než jednu velikost, SELECTEDVALUE() vrátí vždy BLANK a žádná podmínka nebude nikdy splněna, ale možná mi něco uniká :)

      Vymazat
    3. Aha, tahle část. No pravda, když jsem to psal tak jsem nechal slicer jako single select. Výhledově se podívám, jestli ještě někde najdu ten soubor. No možná něco uniklo mě, když jsem to simuloval.

      Vymazat