DAX funkce ADDCOLUMNS

Úvodní obrázek

Tento příspěvek obsahuje vybrané příklady s použitím DAX funkce ADDCOLUMNS() v Power BI. Funkce ADDCOLUMNS() vrací tabulku a můžeme ji proto použít přímo v počítaných tabulkách nebo v DAX dotazech. Funkce ADDCOLUMNS() se často používá také v definici měřítka nebo počítaného sloupce, nicméně v těchto případech obvykle jako součást komplexních výrazů, protože výraz v měřítku a v počítaném sloupci musí vracet v aktuálním kontextu vždy skalární hodnotu.

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

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

Syntaxe funkce ADDCOLUMNS:

ADDCOLUMNS
(
    <tabulka>,
    <název sloupce>,
    <výraz>
    [, <název sloupce>, <výraz>]…
)

Funkce ADDCOLUMNS() přidá do tabulky uvedené v prvním argumentu sloupec nebo sloupce zadané v dalších argumentech. Tabulka v prvním argumentu může být buď již existující tabulka v modelu, nebo jakýkoliv výraz nebo funkce která vrací tabulku.

Druhým argumentem funkce ADDCOLUMNS() je název nového sloupce, který se zadává v uvozovkách. Třetím argumentem je výraz, který bude vyhodnocen v kontextu řádku tabulky zadané v prvním argumentu a jehož výsledné hodnoty budou tvořit hodnoty nového sloupce. Nových sloupců můžeme pomocí funkce ADDCOLUMNS() přidat libovolné množství, vždy v páru název sloupce a výraz tvořící hodnoty sloupce.

Výsledkem funkce ADDCOLUMNS() je tabulka se všemi sloupci z tabulky zadané v prvním argumentu a navíc se sloupci vytvořenými samotnou funkcí ADDCOLUMNS() na základě zadaných argumentů.

Příklad ADDCOLUMNS

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 souboru je navíc měřítko [Prodeje], které má následující definici.

Měřítko:

Prodeje = SUM(Sales[Sales Amount])

Měřítko [Prodeje] vrací jednoduše sumu za prodané produkty v aktuálním kontextu vyhodnocení.

Funkce ADDCOLUMNS v počítané tabulce

Funkce ADDCOLUMNS() vrací tabulku a můžeme ji proto použít přímo pro definici nové počítané tabulky v Power BI. Pomocí nové počítané tabulky si tak můžeme jednoduše vysvětlit jak tato funkce funguje. Uvažujme například tabulku 'Customer', která v použitém modelu obsahuje záznamy o jednotlivých zákaznících. Tato tabulka má následující strukturu.

DAX funkce ADDCOLUMNS

Tuto tabulku můžeme, stejně jako kteroukoliv jinou tabulku z použitého modelu, použít v prvním argumentu funkce ADDCOLUMNS(). Druhý argumentem funkce ADDCOLUMNS() je název nového sloupce zadaný v uvozovkách. Ve třetím argumentu pak můžeme použít jakýkoliv výraz, který bude vracet v každém řádu zadané tabulky skalární hodnotu. V definici nového sloupce se můžeme také odkazovat přímo na sloupce z tabulky v prvním argumentu. Můžeme tak například vytvořit novou počítanou tabulku na základě tabulky 'Customer', která bude navíc obsahovat nový sloupec, ve kterém spojíme jména a města zákazníků z původních sloupců do jednoho nového sloupce.

Počítaná tabulka:

Zákazníci =
ADDCOLUMNS
(
    Customer,
    "Zákazník a město",
    Customer[Customer] & " - " & Customer[City]
)

Výsledkem nové počítané tabulky je kopie původní tabulky 'Customer', která navíc obsahuje nový sloupec 'Zákazníci'[Zákazník a město].

DAX funkce ADDCOLUMNS 2

Stejným způsobem můžeme k existující tabulce přidat libovolné množství sloupců. Následující výraz tak bude obsahovat dva nové sloupce přidané k původní tabulce 'Customer'.

Počítaná tabulka:

Zákazníci (2) =
ADDCOLUMNS
(
    Customer,
    "Zákazník a město",
    Customer[Customer] & " - " & Customer[City],
    "Zákazník a ID",
    Customer[Customer] & " (" & Customer[CustomerKey] & ")"
)

Výsledkem bude nová počítaná tabulka, která bude obsahovat dva nové sloupce přidané k původní tabulce 'Customer'.

DAX funkce ADDCOLUMNS 3

V prvním argumentu funkce ADDCOLUMNS() můžeme použít také funkce které vracejí tabulku. Příkladem může být funkce FILTER() v prvním argumentu funkce ADDCOLUMNS(), pomocí které můžeme zafiltrovat tabulku pouze na ty řádky, které odpovídají zadané podmínce.

V následující definici nové počítané tabulky dojde v prvním argumentu funkce ADDCOLUMNS() nejdříve k zafiltrování tabulky 'Customer' pouze na ty řádky, které obsahují ve sloupci 'Customer'[City] hodnotu "Victoria". Následně funkce ADDCOLUMNS() použije tuto zafiltrovanou tabulku a přidá k ní nový sloupec, který bude obsahovat sumu prodejů u každého zákazníka z Kanadského města Victoria.

Počítaná tabulka:

Zákazníci z města Victoria a jejich prodeje =
ADDCOLUMNS
(
    FILTER
    (
        Customer,
        Customer[City] = "Victoria"
    ),
    "Prodeje",
    [Prodeje]
)

Výsledkem je nová počítaná tabulka, která obsahuje všechny sloupce z původní tabulky a navíc nový sloupec s hodnotou prodejů u každého zákazníka. Tabulka ale obsahuje pouze ty řádky, ve kterých platí podmínka definovaná ve funkci FILTER().

DAX funkce ADDCOLUMNS 4

Funkce ADDCOLUMNS() se často používá také v definici počítaného sloupce nebo měřítka. V těchto případech ale nemůžeme použít funkci ADDCOLUMNS() přímo, ale pouze jako součást jiných funkcí, protože výsledkem funkce ADDCOLUMNS() je tabulka, a výsledkem měřítka a počítaného sloupce musí být vždy skalární hodnota.

Funkce ADDCOLUMNS v měřítku

Před uvedením příkladu použití funkce ADDCOLUMNS() v měřítku si můžeme vytvořit jednoduchý report se dvěma vizuály. Vizuál Průřez bude obsahovat roky z kalendářní tabulky. Do vizuálu Tabulka pak vložíme měsíce z kalendářní tabulky a měřítko [Prodeje].

DAX funkce ADDCOLUMNS 5

V měřítku můžeme používat funkci ADDCOLUMNS() bez jakýchkoliv omezení. Myslet ale musíme na to, že výsledkem měřítka není tabulka, ale skalární hodnota. Funkci ADDCOLUMNS() tak budeme v měřítku používat pouze k vytvoření virtuální tabulky, která bude dále použita v jiných funkcích, pomocí kterých získáme z tabulky vytvořené funkcí ADDCOLUMNS() v aktuálním kontextu jednu hodnotu.

Následující měřítko obsahuje v první proměnné s názvem ProduktyAProdeje virtuální tabulku, která bude obsahovat názvy produktů a v novém sloupci vytvořeným funkcí ADDCOLUMNS() hodnotu prodejů u každého produktu, který se prodával v daném měsíci a vybraném roce. Následně je tato virtuální tabulka, která existuje pouze v čase vyhodnocení měřítka, použita v proměnné ProdejeNejlepsiProdukt. V této proměnné je vybrána pomocí funkce MAXX() pouze jedna nejvyšší hodnota z nového sloupce [@Prodeje].

Měřítko:

Prodeje nejlepšího produktu =
VAR ProduktyAProdeje =
    ADDCOLUMNS
    (
        VALUES('Product'[Product]),
        "@Prodeje",
        [Prodeje]
    )
VAR ProdejeNejlepsiProdukt =
    MAXX
    (
        ProduktyAProdeje,
        [@Prodeje]
    )
RETURN
    ProdejeNejlepsiProdukt

Díky použití funkce MAXX() máme jistotu, že výsledkem měřítka bude vždy jedna skalární hodnota, která v kontextu jednotlivých měsíců odpovídá sumě za prodeje produktu s nejvyššími tržbami v aktuálním měsíci vybraného roku.

DAX funkce ADDCOLUMNS 6

Všechny příklady v tomto příspěvku jsou pouze ilustrativní s cílem popsat chování a způsob použití funkce ADDCOLUMNS(). Funkce ADDCOLUMNS() je jednoduchá funkce, která má široké spektrum využití v různých typech výpočtů. Praktické příklady, některé také s použitím funkce ADDCOLUMNS(), můžete najít na stránce DAX příklady nebo na stránce Power BI.

Oficiální Microsoft dokumentace funkce ADDCOLUMNS:
https://learn.microsoft.com/cs-cz/dax/addcolumns-function-dax

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

Komentáře