Funkcia DIVIDE v jazyku DAX a v Exceli

Dnes si pozrieme jednoduchú, o to však častejšie použiteľnú funkciu DIVIDE. Táto funkcia slúži na bezpečné delenie dvoch čísel, funguje v PowerPivote aj v Exceli, a vďaka nej nemusíte pri delení čísel používať funkcie ISERROR a IFERROR.

V tomto prípade použijeme na demonštráciu opäť náš vzorový súbor Power BI. Dole popísaný návod bude fungovať rovnako v Power BI, excelovskom PowerPivote a dokonca aj v excelovských vzorcoch! Je to totiž jedna z tých funkcií, ktorú prebral jazyk DAX z anglického Excelu bezo zmeny.

Povedzme, že si zostavíme takúto kontingenčku, kde na riadkoch budú roky, a v stĺpcoch budú merítka Obrat a Plán za daný rok:

Tu vidíte, že plán existuje v tomto prípade iba pre rok 2002. A teraz by sme chceli vypočítať percento plnenia plánu, takže pridáme nové merítko s týmto vzorcom, a naformátujeme výsledok ako percentá:

% plnenia plánu = [Obrat] / [Plan]

Po pridaní do kontingenčky dostanete v horšom prípade túto hlášku:

…a v lepšom prípade dostanete takúto kontingenčku, kde pre ostatné roky bude uvedené “Nekonečno“:

…prípadne hodnoty #ERROR či #NaN, ak pracujete v Exceli.

Vo všetkých prípadoch je problém v tom, že pre iné roky ako 2002 sa pokúšame vydeliť hodnotu Obratu prázdnou hodnotou Plánu. Pre účely DAXu sa toto správa tak, že prázdnu hodnotu nahradí nulou, a pokúsi sa vykonať výpočet. Ktorý skončí buď chybou, alebo výsledkom “nekonečno”. Klasické excelovské riešenie je napísať takýto vzorec:

% plnenia plánu = IF(ISERROR([Obrat] / [Plan]); BLANK(); [Obrat] / [Plan])

…prípadne v excelovských vzorcoch a novšom DAX-e sa priamo použije funkcia IFERROR, ktorú starší DAX nemá:

% plnenia plánu = IFERROR([Obrat] / [Plan]; BLANK())

V oboch prípadoch však ide len o obchádzanie problému, a nerieši sa zdroj problému, ktorý je v tomto prípade delenie nulou. Aj keď to navonok problém vyrieši:

Bez znalosti funkcie DIVIDE môžeme problém vyriešiť napr. takýmto vzorcom:

% plnenia plánu = IF([Plan] = BLANK(); BLANK(); [Obrat] / [Plan])

…alebo aj takto:

% plnenia plánu = IF(ISBLANK([Plan]); BLANK(); [Obrat] / [Plan])

Vo vzorci si otestujeme, či hodnota merítka Plan je prázdna. Ak áno, tak vrátime ako výsledok prázdnu hodnotu. Ak nie, tak vrátime pôvodný podiel Obratu a Planu.

Pre tento zápis však existuje skratkovitá funkcia DIVIDE. Jej syntax je takáto:

DIVIDE(čitateľ; menovateľ; čoVrátiťAkSaNedajúPredeliť)

Táto funkcia sa pokúsi predeliť prvý parameter (čitateľ) hodnotou druhého parametra (menovateľ). Ak sa jej to podarí, tak vráti ako výsledok ich podiel. Ak sa to nepodarí, napr. pri delení nulou alebo prázdnou hodnotou, tak vráti ako výsledok hodnotu tretieho parametra (čoVrátiťAkSaNedajúPredeliť).

Horeuvedený zápis merítka s funkciou IF sa dá teda v tomto prípade skrátiť funkciou DIVIDE takto:

% plnenia plánu = DIVIDE([Obrat]; [Plan]; BLANK())

Všimnite si, že sme v tomto vzorci nepoužili lomítko na predelenie hodnôt. Je to preto, lebo to robí tá funkcia DIVIDE – zoberie prvé dva parametre a pokúsi sa ich predeliť, a ak to nejde, tak vráti ako výsledok tretí parameter. Tretí parameter je mimochodom nepovinný, ale odporúča sa zadať, pretože pre to zvyčajne voláte túto funkciu.

Takže toto je funkcia DIVIDE. Je jednoduchá, ale určite ju veľmi často použijete pri svojich výpočtoch, či už v Exceli, alebo v niektorej z verzií PowerPivotu. Tým pádom nemusíte používať pokútne spôsoby cez funkcie ISERROR a IFERROR, a budete mať čisté, správne riešenie. A okrem iného zapíšete riešenie každodenného problému krátkou a prehľadnou formou 🙂