DAX funkce SELECTCOLUMNS

Úvodní obrázek

Tento příspěvek obsahuje příklady použití funkce SELECTCOLUMNS() v Power BI. Pomocí funkce SELECTCOLUMNS() můžeme z tabulky zadané v prvním argumentu vybrat pouze některé sloupce. Funkce SELECTCOLUMNS() ale umožňuje také vytvoření nových sloupců, které nejsou součástí tabulky zadané v prvním argumentu. Výsledkem funkce SELECTCOLUMNS() je vždy tabulka, a proto můžeme tuto funkci použít přímo v definici počítané tabulky nebo v DAX dotazech. Funkci SELECTCOLUMNS() můžeme použít také v měřítku nebo v počítaném sloupci, nicméně vždy musíme myslet na to, že výsledný výraz v měřítku nebo v počítaném sloupci musí v aktuálním kontextu vracet skalární hodnotu.

Syntaxe funkce SELECTCOLUMNS() vypadá následovně.

Syntaxe funkce SELECTCOLUMNS:

SELECTCOLUMNS
(
    <Tabulka>
    [[, <Název sloupce>], <Výraz>
    [[, <Název sloupce>], <Výraz> [, ...]]]
)

Prvním argumentem funkce SELECTCOLUMNS() je tabulka. Zde můžeme použít buď existující tabulku z modelu, nebo jakýkoliv výraz nebo funkci vracející tabulku.

Druhým argumentem funkce SELECTCOLUMNS() je název sloupce, který se zadává v uvozovkách. Druhý argument, tedy název sloupce, je nepovinný v případě, kdy pouze vybíráme ze zadané tabulky v prvním argumentu určité sloupce. Pokud v tomto případě vynecháme název sloupce, výsledné sloupce budou pojmenovány podle originálních názvů sloupců tak, jak jsou pojmenovány v tabulce v prvním argumentu, a to ve formátu 'Název tabulky'[Název sloupce]

Pokud pomocí funkce SELECTCOLUMNS() vytváříme nové sloupce, druhý argument, tedy název výsledného sloupce, je povinný. Obecně, vynechání argumentů určených pro nové názvy sloupců není dobrá praxe. Ve starších verzích DAX enginu tato syntaxe s vynecháním názvů není vůbec povolena.

Třetím argumentem funkce SELECTCOLUMNS() může být odkaz na sloupce z tabulky zadané v prvním argumentu, nebo výraz, který bude vracet v kontextu řádku tabulky v prvním argumentu skalární hodnotu.

Zadat můžeme libovolný počet argumentů, vždy v páru nový název sloupce (nepovinně viz výše) a skalární výraz.

Funkce SELECTCOLUMNS() pak vrací tabulku se všemi řádky z tabulky v prvním argumentu, včetně případných duplicit, a pouze s těmi sloupci, které jsou explicitně uvedeny ve druhém a dalších argumentech.

Příklad použití funkce SELECTCOLUMNS

Všechny 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 je dostupný ke stažení níže pod tímto příspěvkem. V použitém cvičném Power BI souboru je navíc vytvořeno měřítko [Prodeje], které má následující definici.

Měřítko:

Prodeje = SUM(Sales[Sales Amount])

Měřítko [Prodeje] jednoduše sčítá hodnoty ze sloupce 'Sales'[Sales Amount] a vrací tak sumu za prodané produkty v aktuálním kontextu vyhodnocení.

Funkce SELECTCOLUMNS v počítané tabulce

Funkce SELECTCOLUMNS() vrací tabulku a můžeme ji proto použít přímo v definici nové počítané tabulky, což je současně ideální způsob, jak si vysvětlit všechny aspekty této funkce. Zaměřit se můžeme například na tabulku 'Customer', která obsahuje informace o jednotlivých zákaznících a má následující strukturu.

DAX funkce SELECTCOLUMNS

Pokud bychom chtěli v Power BI modelu vytvořit novou počítanou tabulku, která bude obsahovat pouze jednoznačné identifikátory zákazníků a jména zákazníků, můžeme použít funkci SELECTCOLUMNS() následujícím způsobem.

Počítaná tabulka:

Zákazníci =
SELECTCOLUMNS
(
    Customer,
    "ID zákazníka", Customer[Customer ID],
    "Zakazník", Customer[Customer]
)

Výsledkem bude nová počítaná tabulka, která bude obsahat pouze dva sloupce z tabulky 'Customer', sloupec s jednoznačnými identifikátory zákazníků a sloupec se jmény zákazníků.

DAX funkce SELECTCOLUMNS 2

Pomocí funkce SELECTCOLUMNS() můžeme také vytvořit nový sloupec. V definici nového sloupce můžeme použít jakýkoliv výraz, který bude vracet v kontextu řádku tabulky v prvním argumentu skalární hodnotu. Můžeme si tak například vytvořit tabulku, která bude obsahovat jména a ID zákazníků a sumu za prodeje produktů u každého zákazníka.

Počítaná tabulka:

Zákazníci a prodeje =
SELECTCOLUMNS
(
    Customer,
    "ID zákazníka", Customer[Customer ID],
    "Zakazník", Customer[Customer],
    "Prodeje", [Prodeje]
)

V nové počítané tabulce budou první dva sloupce obsahovat hodnoty získané z tabulky 'Customer'. Třetí sloupec obsahuje v definici měřítko [Prodeje], které bude vracet prodeje za produkty u každého zákazníka, a jedná se o nový sloupec vytvořený funkcí SELECTCOLUMNS().

DAX funkce SELECTCOLUMNS 3

Pokud při vytváření nových sloupců pomocí funkce SELECTCOLUMNS() používáme v definici nového sloupce měřítko, je důležité si uvědomit, že měřítko je vyhodnoceno v kontextu řádku tabulky v prvním argumentu, a nikoliv v kontextu sloupců, které jsou vytvořené pomocí funkce SELECTCOLUMNS(). To může mít dopad na výslednou hodnotu měřítka v každém řádku. Efekt změny kontextu řádku na kontext filtru, který nastává, pokud je měřítko použito v kontextu řádku, je popsán v samostatném příspěvku pod tímto odkazem.

V prvním argumentu funkce SELECTCOLUMNS() můžeme použít také výraz nebo funkci, která vrací tabulku. To je možné vidět v následujícím příkladu, kde je v prvním argumentu funkce SELECTCOLUMNS() použita funkce FILTER(), pomocí které dojde k zafiltrování tabulky 'Customer' pouze na ty řádky, které obsahují ve sloupci 'Customer'[City] hodnotu "Victoria".

Počítaná tabulka:

Zákazníci z města Victoria a prodeje =
SELECTCOLUMNS
(
    FILTER
    (
        Customer,
        Customer[City] = "Victoria"
    ),
    "Zákazník", Customer[Customer],
    "Město", Customer[City],
    "Prodeje", [Prodeje]
)

Výsledná tabulka pak bude obsahovat pouze ty zaměstnance a jejich prodeje, kteří jsou z města Victoria.

DAX funkce SELECTCOLUMNS 4

Funkci SELECTCOLUMNS() můžeme použít také v definici měřítka nebo počítaného sloupce. Pouze musíme myslet na to, že funkce SELECTCOLUMNS() vrací tabulku, a výsledkem počítaného sloupce nebo měřítka musí být v aktuálním kontextu jedna skalární hodnota.

Funkce SELECTCOLUMNS v měřítku

Před ukázkou použití funkce SELECTCOLUMNS() v měřítku si můžeme v Power BI souboru vytvořit vizuál Tabulka s roky v řádcích a s měřítkem [Prodeje] v hodnotách.

DAX funkce SELECTCOLUMNS 5

Pokud chceme použít funkci SELECTCOLUMNS() v měřítku, musíme vytvořit takový výpočet, který bude v aktuálním kontextu vyhodnocení vracet skalární hodnotu. Funkce SELECTCOLUMNS() vrací tabulku a pouze tabulka s jedním řádkem a jedním sloupcem může být automaticky převedena na skalární hodnotu.

V příkladu s použitím funkce SELECTCOLUMNS() v měřítku můžeme použít například tabulku 'Reseller', která obsahuje záznamy o obchodech, přes které dochází k prodejům produktů. Tuto tabulku si v první proměnné zafiltrujeme pouze na prodejce, který má v aktuálním kontextu vyhodnocení nejvyšší tržby. Následně pomocí funkce SELECTCOLUMNS() vybereme ze všech sloupců v tabulce 'Reseller' pouze sloupec s názvem nejlepšího prodejce. Před vypsáním názvu prodejce si ještě musíme ověřit, zda je výsledkem funkce SELECTCOLUMNS() opravdu pouze jeden řádek, protože funkce TOPN() by mohla v případě stejných tržeb u více prodejců vrátit více řádků.

Měřítko:

Nejlepší prodejce =
VAR NejProdejce =
    TOPN
    (
        1,
        Reseller,
        [Prodeje]
    )
VAR Vysledek =
    SELECTCOLUMNS
    (
        NejProdejce,
        "@Prodejce",
        Reseller[Reseller]
    )
RETURN
    IF
    (
        COUNTROWS(Vysledek) = 1,
        Vysledek
    )

Pokud měřítko [Nejlepší prodejce] vložíme do původního vizuálu s roky v řádcích, výsledkem měřítka bude název nejlepšího prodejce v aktuálním roce, a v řádku souhrnů název nejlepšího prodejce napříč všemi roky.

DAX funkce SELECTCOLUMNS 6

Všechny příklady v tomto příspěvku byly vytvořeny pouze za účelem znázornění chování funkce SELECTCOLUMNS(). Praktické příklady, některé také s použitím funkce SELECTCOLUMNS(), můžete najít na stránce DAX příklady nebo na stránce Power BI.

Oficiální dokumentace funkce SELECTCOLUMNS:
https://learn.microsoft.com/cs-cz/dax/selectcolumns-function-dax

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

Komentáře