DAX: 오류 함수를 적절하게 사용DAX: Appropriate use of error functions

데이터 모델러는 평가 시간 오류를 발생시킬 수 있는 DAX 식을 작성할 때 두 가지 유용한 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.

  • ISERROR 함수 - 단일 식을 사용하고 해당 식에서 오류가 발생하는 경우 TRUE를 반환힙니다.The ISERROR function, which takes a single expression and returns TRUE if that expression results in error.
  • IFERROR 함수 - 두 개의 식을 사용합니다.The IFERROR function, which takes two expressions. 첫 번째 식에서 오류가 발생할 경우 두 번째 식의 값이 반환됩니다.Should the first expression result in error, the value for the second expression is returned. 실제로는 IF 함수 안에 ISERROR 함수를 중첩하는 보다 최적화된 구현입니다.It is in fact a more optimized implementation of nesting the ISERROR function inside an IF function.

그러나 이러한 함수는 유용하고 이해하기 쉬운 식을 작성하는 데 기여할 수 있지만 계산 성능도 크게 저하될 수 있습니다.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. 이러한 함수는 필요한 스토리지 엔진 검색 수를 증가시키기 때문입니다.It can happen because these functions increase the number of storage engine scans required.

대부분의 평가 시간 오류는 예기치 않은 공백이나 0 값 또는 잘못된 데이터 형식 변환으로 인해 발생합니다.Most evaluation-time errors are due to unexpected BLANKs or zero values, or invalid data type conversion.

권장 사항Recommendations

ISERROR 및 IFERROR 함수를 사용하지 않는 것이 좋습니다.It's better to avoid using the ISERROR and IFERROR functions. 대신 모델을 개발하고 식을 작성할 때 방어 전략을 적용합니다.Instead, apply defensive strategies when developing the model and writing expressions. 전략은 다음과 같습니다.Strategies can include:

  • 모델에 고품질 데이터가 로드되는지 확인: 파워 쿼리 변환을 사용하여 잘못되었거나 누락된 값을 제거 또는 대체하고 올바른 데이터 형식을 설정합니다.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. 잘못된 데이터 변환과 같은 오류가 발생하는 경우에도 파워 쿼리 변환을 사용하여 행을 필터링할 수 있습니다.A Power Query transformation can also be used to filter rows when errors, like invalid data conversion, occur.

    모델 열 Is Nullable 속성을 Off로 설정하여 데이터 품질을 제어할 수도 있습니다. 그러면 데이터 새로 고침이 실패하는 경우 오류가 발생합니다.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. 이 오류가 발생하는 경우 성공적으로 새로 고친 결과로 로드된 데이터는 테이블에 유지됩니다.If this failure occurs, data loaded as a result of a successful refresh will remain in the tables.

  • IF 함수 사용: IF 함수 논리 테스트 식은 오류 결과가 발생하는지 여부를 확인할 수 있습니다.Using the IF function: The IF function logical test expression can determine whether an error result would occur. 참고로, ISERROR 및 IFERROR 함수와 마찬가지로 이 함수는 추가 스토리지 엔진 검색을 수행할 수 있지만 오류가 발생하지 않을 경우 더 나은 성능을 얻을 수 있습니다.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.

  • 오류 허용 함수 사용: 일부 DAX 함수는 오류 조건을 테스트하고 보정합니다.Using error-tolerant functions: Some DAX functions will test and compensate for error conditions. 이러한 함수를 사용하면 대신 반환되는 대체 결과를 입력할 수 있습니다.These functions allow you to enter an alternate result that would be returned instead. DIVIDE 함수가 이러한 예 중 하나입니다.The DIVIDE function is one such example. 이 함수에 대한 추가 지침은 DAX: DIVIDE 함수 및 나누기 연산자(/) 문서를 참조하세요.For additional guidance about this function, read the DAX: DIVIDE function vs divide operator (/) article.


다음 측정값 식은 오류가 발생하는지 여부를 테스트합니다.The following measure expression tests whether an error would be raised. 이 인스턴스에서는 BLANK를 반환합니다(IF 함수에 value-if-false 식을 제공하지 않는 경우에 해당).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]))

이 다음 버전의 측정값 식은 IF 및 ISERROR 함수 대신 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())

그러나 이 최종 버전의 측정값 식은 동일한 결과를 더 효율적이고 세련되게 달성합니다.However, this final version of the measure expression achieves the same outcome, yet more efficiently and elegantly.

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

다음 단계Next steps

이 문서에 대한 자세한 내용은 다음 리소스를 참조하세요.For more information about this article, check out the following resources: