DAX: Angemessene Verwendung von FehlerfunktionenDAX: Appropriate use of error functions

Wenn Sie als Datenmodellierer einen DAX-Ausdruck schreiben, der zur Auswertungszeit zu einem Fehler führen könnte, stehen Ihnen zwei hilfreiche DAX-Funktionen zur Verfügung.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.

  • Die Funktion ISERROR, die einen einzelnen Ausdruck akzeptiert und TRUE zurückgibt, wenn dieser Ausdruck zu einem Fehler führt.The ISERROR function, which takes a single expression and returns TRUE if that expression results in error.
  • Die Funktion IFERROR, die zwei Ausdrücke verwendet.The IFERROR function, which takes two expressions. Wenn der erste Ausdruck zu einem Fehler führt, wird der Wert für den zweiten Ausdruck zurückgegeben.Should the first expression result in error, the value for the second expression is returned. Es handelt sich hierbei um eine optimierte Implementierung der Schachtelung der ISERROR-Funktion innerhalb einer IF-Funktion.It is in fact a more optimized implementation of nesting the ISERROR function inside an IF function.

Auch wenn diese Funktionen hilfreich sein und zum Schreiben leicht verständlicher Ausdrücke beitragen können, so können sie doch auch die Leistung von Berechnungen erheblich beeinträchtigen.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. Dies liegt daran, dass diese Funktionen die Anzahl der erforderlichen Scans der Speicher-Engine erhöhen.It can happen because these functions increase the number of storage engine scans required.

Die meisten Auswertungsfehler sind auf unerwartete Leerzeichen oder Nullwerte oder eine ungültige Datentypkonvertierung zurückzuführen.Most evaluation-time errors are due to unexpected BLANKs or zero values, or invalid data type conversion.

EmpfehlungenRecommendations

Es empfiehlt sich, die Funktionen ISERROR und IFERROR zu vermeiden.It's better to avoid using the ISERROR and IFERROR functions. Setzen Sie stattdessen bei der Entwicklung des Modells und beim Schreiben von Ausdrücken auf Abwehrstrategien.Instead, apply defensive strategies when developing the model and writing expressions. Mögliche Strategien:Strategies can include:

  • Sicherstellen, dass Qualitätsdaten in das Modell geladen werden: Verwenden Sie Power Query-Transformationen, um ungültige oder fehlende Werte zu entfernen oder zu ersetzen und richtige Datentypen festzulegen.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. Eine Power Query-Transformation kann auch dazu dienen, Zeilen zu filtern, wenn Fehler wie eine ungültige Datenkonvertierung auftreten.A Power Query transformation can also be used to filter rows when errors, like invalid data conversion, occur.

    Die Datenqualität kann auch gesteuert werden, indem die Eigenschaft Lässt NULL-Werte zu des Modells auf „Aus“ festgelegt wird, was zum Fehlschlagen der Datenaktualisierung führt, sollten Leerzeichen gefunden werden.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. Bei Auftreten dieses Fehlers verbleiben die durch eine erfolgreiche Aktualisierung geladenen Daten in den Tabellen.If this failure occurs, data loaded as a result of a successful refresh will remain in the tables.

  • Verwenden der IF-Funktion: Mit dem logischen Testausdruck der IF-Funktion kann bestimmt werden, ob möglicherweise ein Fehlerergebnis auftritt.Using the IF function: The IF function logical test expression can determine whether an error result would occur. Beachten Sie, dass diese Funktion wie die Funktionen ISERROR und IFERROR zu zusätzlichen Scans durch die Speicher-Engine führen kann, aber wahrscheinlich eine bessere Leistung bringt, da kein Fehler ausgelöst werden muss.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.

  • Verwenden fehlertoleranter Funktionen: Einige DAX-Funktionen testen und kompensieren Fehlerbedingungen.Using error-tolerant functions: Some DAX functions will test and compensate for error conditions. Mit diesen Funktionen können Sie ein alternatives Ergebnis eingeben, das stattdessen zurückgegeben wird.These functions allow you to enter an alternate result that would be returned instead. Die Funktion DIVIDE ist ein solches Beispiel.The DIVIDE function is one such example. Weitere Anleitungen zu dieser Funktion finden Sie in im Artikel DAX: Vergleich zwischen der DIVIDE-Funktion und dem Divisionsoperator (/).For additional guidance about this function, read the DAX: DIVIDE function vs divide operator (/) article.

BeispielExample

Der folgende Measureausdruck testet, ob ein Fehler ausgelöst wird.The following measure expression tests whether an error would be raised. Er gibt in diesem Fall BLANK zurück (was passiert, wenn Sie an die IF-Funktion keinen Wert übergeben, wenn der Ausdruck FALSE ist).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]))

Diese nächste Version des Measureausdrucks wurde durch die Verwendung der IFERROR-Funktion anstelle der Funktionen IF und ISERROR verbessert.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())

Diese endgültige Version des Measureausdrucks führt jedoch zu dem gleichen Ergebnis, ist aber effizienter und eleganter.However, this final version of the measure expression achieves the same outcome, yet more efficiently and elegantly.

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

Nächste SchritteNext steps

Weitere Informationen zu diesem Artikel finden Sie in den folgenden Ressourcen:For more information about this article, check out the following resources: