Zdieľať cez


Vhodné použitie chybových funkcií

Ako modelár údajov môžete pri písaní DAX výrazu, ktorý môže vyvolať chybu času vyhodnocovania, zvážiť použitie dvoch užitočných funkcií DAX.

  • Funkcia ISERROR použije jeden výraz a vráti TRUE, ak bude výsledkom tohto výrazu chyba.
  • Funkcia IFERROR použije dva výrazy. Ak je výsledkom prvého výrazu chyba, vráti sa hodnota pre druhý výraz. V skutočnosti ide o optimalizovanú implementáciu vnorenia funkcie ISERROR v rámci funkcie IF.

Hoci tieto funkcie môžu byť užitočné a môžu prispieť k písaniu zrozumiteľných výrazov, môžu tiež výrazne znížiť výkon výpočtov. Príčinou je, že tieto funkcie zvyšujú počet požadovaných kontrol nástroja ukladacieho priestoru.

Väčšina chýb času vyhodnocovania je spôsobená neočakávanými PRÁZDNYMI alebo nulovými hodnotami alebo neplatnou konverziou typu údajov.

Odporúčania

Používaniu funkcií ISERROR a IFERROR je lepšie sa vyhnúť. Namiesto toho použite defenzívne stratégie pri vývoji modelu a písaní výrazov. Možné stratégie:

  • Zabezpečenie načítania kvalitných údajov do modelu: Pomocou transformácií Power Query môžete odstrániť alebo nahradiť neplatné alebo chýbajúce hodnoty a nastaviť správne typy údajov. Transformácia Power Query sa dá použiť aj na filtrovanie riadkov, keď sa vyskytnú chyby, ako je napríklad neplatná konverzia údajov.

    Kvalitu údajov možno ovládať aj nastavením stĺpca modelu vlastnosti Is Nullable na možnosť Vypnuté, čím zlyhá obnovenie údajov v prípade zistenia PRÁZDNYCH hodnôt. Ak sa vyskytne táto chyba, údaje načítané ako výsledok úspešného obnovenia zostanú v tabuľkách.

  • Použitie funkcie IF: Výraz logického testu funkcie IF môže určiť, či sa vyskytne chybný výsledok. Podobne ako funkcie ISERROR a IFERROR môže táto funkcia viesť k ďalším kontrolám nástroja ukladacieho priestoru, ale pravdepodobne bude fungovať lepšie, pretože netreba upozorniť na žiadnu chybu.

  • Používanie funkcií odolných voči chybám: Niektoré funkcie DAX môžu testovať a kompenzovať chybové podmienky. Tieto funkcie vám umožňujú zadať alternatívny výsledok, ktorý sa vráti namiesto toho. Jednou z nich je funkcia DIVIDE. Ďalšie informácie o tejto funkcii nájdete v článku DAX: DIVIDE porovnanie funkcie a operátora delenia (/).

Príklad

Nasledujúci výraz mierky testuje, či sa vyskytne chyba. V tejto inštancii vráti BLANK (čo je prípad, keď neposkytnete funkcii IF výraz value-if-false).

Profit Margin
= IF(ISERROR([Profit] / [Sales]))

Táto ďalšia verzia výrazu mierky bola vylepšená pomocou funkcie IFERROR namiesto funkcií IF a ISERROR.

Profit Margin
= IFERROR([Profit] / [Sales], BLANK())

Táto konečná verzia výrazu mierky však dosahuje rovnaký výsledok ešte efektívnejšie a elegantnejšie.

Profit Margin
= DIVIDE([Profit], [Sales])