Dělení v DAX funkce DIVIDE

Úvodní obrázek

K ošetření dělení nulou je v jazyku DAX dostupná funkce DIVIDE(). Funkce DIVIDE() má dva povinné argumenty, které představují dělence a dělitele. Alternativně můžeme použít třetí volitelný argument. Třetí argument představuje alternativní výsledek, který bude výsledkem funkce DIVIDE() pokud se pokusíme dělit číslo nulou nebo prázdnou hodnotou BLANK. Pokud třetí argument s alternativním výsledkem nezadáme, je přednastaven na prázdnou hodnotu BLANK.

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

Syntaxe funkce DIVIDE:

DIVIDE(<dělenec>, <dělitel> [,<alternativní výsledek>])

Prvním argumentem funkce DIVIDE() je dělenec, tedy ve zlomku horní hodnota. Druhým argumentem funkce DIVIDE() je dělitel - spodní hodnota ve zlomku.

Příklad DIVIDE

Následující tabulka má 7 řádků, ve čtvrtém řádku je ve sloupci nazvaném Dělitel hodnota 0, v šestém řádku je pak ve stejném sloupci prázdná hodnota BLANK. 

Dělení v DAX funkce DIVIDE

Nejdříve si můžeme ukázat co se stane, pokud použijeme k dělení hodnot z výše uvedené tabulky operátor lomítko (/). 

Počítaný sloupec:

Prosté dělení = 'Dělění'[Dělenec]/'Dělění'[Dělitel]

Výsledek nového počítaného sloupce bude vypadat následovně.

Dělení v DAX funkce DIVIDE 2

Pokud se pokoušíme dělit nulou nebo hodnotou BLANK, výsledkem je speciální hodnota Infinity. S takto vytvořeným sloupcem již je obtížné pracovat, protože jakákoliv hodnota přičtená k hodnotě Infinity je vždy zase Infinity. 

Měřítko:

Suma výsledku dělení = SUM('Dělění'[Prosté dělení])

Měřítko [Suma výsledku dělení] proto bude vracet hodnotu Infinity vždy, pokud jedna z hodnot v aktuálním kontextu vyhodnocení bude obsahovat právě hodnotu Infinity.

Dělení v DAX funkce DIVIDE 3

Pokud mohou některé hodnoty ze sloupce určeného k dělení obsahovat prázdné hodnoty BLANK nebo hodnotu 0, můžeme k ošetření dělení nulou použít právě funkci DIVIDE().

Počítaný sloupec:

Dělení funkce DIVIDE = DIVIDE('Dělění'[Dělenec],'Dělění'[Dělitel])

Výsledek nového počítaného sloupce můžeme vidět na následujícím obrázku.

Dělení v DAX funkce DIVIDE 4

Jak můžeme vidět, namísto hodnoty Infinity je v případě dělení nulou vrácen alternativní výsledek s prázdnou hodnotou BLANK. Namísto hodnoty BLANK pak můžeme ve třetím argumentu funkce DIVIDE() zadat vlastní alternativní výsledek.

Počítaný sloupec:

Dělení funkce DIVIDE 2 = DIVIDE('Dělění'[Dělenec],'Dělění'[Dělitel], 0)

Pokud zadáváme alternativní ve funkci DIVIDE() v počítaném sloupci, musíme si dát pozor na to, aby tento výsledek byl stejného datového typu jako výsledek dělení hodnot v prvních dvou argumentech. Jinak řečeno, v počítaném sloupci nemůžeme zadat jako alternativní výsledek ve funkci DIVIDE() text.

Dělení v DAX funkce DIVIDE 5

Funkci DIVIDE() můžeme samozřejmě použít k dělení také v měřítku. Na rozdíl od počítaného sloupce již můžeme v měřítku zadat alternativní výsledek ve funkci DIVIDE() i ve formě textu.

Měřítko:

Dělení DIVIDE měřítko =
DIVIDE
(
    SUM('Dělění'[Dělenec]),
    SUM('Dělění'[Dělitel]),
    "Dělení nulou"
)

Výše uvedené měřítko vrací v případě dělení nulou text uvedený ve třetím argumentu funkce DIVIDE().

Dělení v DAX funkce DIVIDE 6

Třetí argument funkce DIVIDE() musí být konstanta. Pokud bychom chtěli vrátit v případě dělení nulou hodnotu dělence, můžeme použít například funkci IFERROR().

Počítaný sloupec:

Dělení IFERROR =
IFERROR
(
    'Dělění'[Dělenec]/'Dělění'[Dělitel],
    'Dělění'[Dělenec]
)

Výsledek nového počítaného sloupce pak vypadá následovně.

Dělení v DAX funkce DIVIDE 7

Jak je možné vidět na obrázku výše, v případě dělení nulou je výsledkem nového počítaného sloupce hodnota uvedená v dělenci. 

Shrnutí

Funkci DIVIDE() bychom měli používat v situacích kdy existuje možnost, že v děliteli může být hodnota 0 nebo BLANK. Pokud dělíme hodnotu konstantou, můžeme spolehlivě použít operátor dělení (/). Použití funkce DIVIDE() je z pohledu výkonnostního obvykle lepší než použití funkce IF(), IFERROR() nebo kombinace funkcí IF() a ISERROR() pro ověření, zda výraz nenabývá hodnoty 0 nebo BLANK. Další možností ošetření dělení nulou je použití filtrů ve funkci CALCULATE() před samotným dělením, nicméně tato pokročilá technika je již nad rámec tohoto příspěvku a její použití dává smysl pouze při práci obrovskými tabulkami, tedy v situacích kdy máme problém s rychlostí vyhodnocení výpočtu.

Oficiální Microsoft dokumentace funkce DIVIDE:
https://docs.microsoft.com/cs-cz/dax/divide-function-dax

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

Komentáře