DAX: Vhodné použití chybových funkcíDAX: Appropriate use of error functions

Když jako modelátor dat píšete příkaz v jazyce DAX, který by mohl vyvolat chybu při vyhodnocování, doporučujeme používat dvě užitečné funkce jazyka DAX.As a data modeler, when you write a DAX expression that might raise an evaluation-time error, you can consider using two helpful DAX functions.

  • Funkce ISERROR přijímá jeden výraz a vrací hodnotu TRUE, pokud je výsledkem daného výrazu chyba.The ISERROR function, which takes a single expression and returns TRUE if that expression results in error.
  • Funkce IFERROR přijímá dva výrazy.The IFERROR function, which takes two expressions. Pokud je výsledkem prvního výrazu chyba, vrátí se hodnota druhého výrazu.Should the first expression result in error, the value for the second expression is returned. Jde o lépe optimalizovanou implementaci vnořování funkce ISERROR uvnitř funkce IF.It is in fact a more optimized implementation of nesting the ISERROR function inside an IF function.

Přestože mohou být tyto funkce užitečné a usnadňovat psaní srozumitelných výrazů, mohou také významně snížit výkon výpočtů.However, while these functions can be helpful and can contribute to writing easy-to-understand expressions, they can also significantly degrade the performance of calculations. K tomu může dojít proto, že tyto funkce zvyšují počet požadovaných kontrol modulu úložiště.It can happen because these functions increase the number of storage engine scans required.

Většina chyb při vyhodnocování je způsobena neočekávanými prázdnými nebo nulovými hodnotami nebo neplatným převodem datového typu.Most evaluation-time errors are due to unexpected BLANKs or zero values, or invalid data type conversion.

DoporučeníRecommendations

Použití funkcí ISERROR a IFERROR je lepší se vyhnout.It's better to avoid using the ISERROR and IFERROR functions. Při vývoji modelu a psaní výrazů místo toho použijte obranné strategie.Instead, apply defensive strategies when developing the model and writing expressions. Příklady takových strategií:Strategies can include:

  • Zajistěte, aby se do modelu načítala kvalitní data: Pomocí transformací doplňku Power Query odeberte nebo nahraďte neplatné nebo chybějící hodnoty a nastavte správné datové typy.Ensuring quality data is loaded into the model: Use Power Query transformations to remove or substitute invalid or missing values, and to set correct data types. Transformace Power Query můžete použít také pro filtrování řádků, když dojde k chybám, například k neplatnému převodu dat.A Power Query transformation can also be used to filter rows when errors, like invalid data conversion, occur.

    Kvalitu dat lze mít pod kontrolou tak, že vlastnost sloupce modelu Může mít hodnotu null nastavíte na možnost Vypnuto. To zabrání aktualizaci dat, pokud by byly zjištěny prázdné hodnoty.Data quality can also be controlled by setting the model column Is Nullable property to Off, which will fail the data refresh should BLANKs be encountered. Pokud dojde k této chybě, v tabulkách zůstanou data, která byla výsledkem úspěšné aktualizace.If this failure occurs, data loaded as a result of a successful refresh will remain in the tables.

  • Použití funkce IF: Pomocí logického testovacího výrazu funkce IF lze zjistit, jestli by se zobrazil výsledek chyby.Using the IF function: The IF function logical test expression can determine whether an error result would occur. Poznámka: Stejně jako funkce ISERROR a IFERROR může mít tato funkce za následek další kontroly modulu úložiště, ale bude pravděpodobně pracovat lépe než výše uvedené funkce, protože nevyžaduje vyvolání chyby.Note, like the ISERROR and IFERROR functions, this function can result in additional storage engine scans, but will likely perform better than them as no error needs to be raised.

  • Použití funkcí tolerantních k chybám: Některé funkce DAX budou testovat a kompenzovat chybové podmínky.Using error-tolerant functions: Some DAX functions will test and compensate for error conditions. Tyto funkce umožňují zadat alternativní výsledek, který by se vrátil místo toho.These functions allow you to enter an alternate result that would be returned instead. Příkladem takové funkce je DIVIDE.The DIVIDE function is one such example. Další informace o této funkci najdete v článku Jazyk DAX: Funkce DIVIDE vs. operátor dělení (/).For additional guidance about this function, read the DAX: DIVIDE function vs divide operator (/) article.

PříkladExample

Následující výraz míry testuje, jestli by došlo k vyvolání chyby.The following measure expression tests whether an error would be raised. V tomto případě vrátí prázdnou hodnotu (což je stane, když do funkce IF nezadáte výraz „není-li pravda“).It returns BLANK in this instance (which is the case when you do not provide the IF function with a value-if-false expression).

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

Tato další verze výrazu míry byla vylepšena tím, že místo funkcí IF a ISERROR používá funkce IFERROR.This next version of the measure expression has been improved by using the IFERROR function in place of the IF and ISERROR functions.

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

Tato konečná verze výrazu míry dosáhne stejného výsledku, ale efektivněji a elegantněji.However, this final version of the measure expression achieves the same outcome, yet more efficiently and elegantly.

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

Další krokyNext steps

Další informace k tomuto článku najdete v následujících tématech:For more information about this article, check out the following resources: