변수를 사용하여 성능 및 문제 해결 향상

완료됨

DAX 수식에서 변수를 사용하여 덜 복잡하고 더 효율적인 계산을 작성할 수 있습니다. Power BI Desktop을 사용하기 시작한 개발자는 변수를 충분히 활용하지 않지만, 변수는 효과적이므로 개발자는 측정값을 만들 때 기본적으로 변수를 사용해야 합니다.

일부 식에는 여러 개의 중첩된 함수가 사용되고 식 논리가 다시 사용되기도 합니다. 이러한 식은 처리하는 데 시간이 오래 걸리고 읽기 어려워 문제 해결도 어렵습니다. 변수를 사용하면 쿼리 처리 시간을 절약할 수 있습니다. 이러한 변화는 의미 체계 모델의 성능을 최적화하기 위한 올바른 방향으로 나아가는 단계입니다.

의미 체계 모델에서 변수를 사용하면 다음과 같은 이점이 있습니다.

  • 성능 향상 - 변수를 사용하면 Power BI에서 동일한 식을 여러 번 평가하지 않아도 되므로 더 효율적으로 측정값을 만들 수 있습니다. 원래 처리 시간의 절반만 걸려도 쿼리에서 동일한 결과를 달성할 수 있습니다.

  • 가독성 향상 - 변수는 자체적으로 설명하는 짧은 이름을 가지며 많은 단어로 모호하게 표현된 식 대신 사용됩니다. 변수가 사용되면 수식을 더 쉽게 읽고 이해할 수도 있습니다.

  • 디버깅 간소화 - 변수를 사용하여 수식 및 테스트 식을 디버그할 수 있으며, 이는 문제 해결에 유용할 수 있습니다.

  • 복잡성 감소 - 변수를 사용하면 이해하기 어려운 EARLIER 또는 EARLIEST DAX 함수를 사용할 필요가 없습니다. 이러한 함수는 변수가 도입되기 전에 필요했으며 새 필터 컨텍스트를 도입하는 복잡한 식으로 작성되었습니다. 이제 이러한 함수 대신 변수를 사용할 수 있으므로 복잡한 수식을 더 적게 작성할 수 있습니다.

변수를 사용하여 성능 향상

변수를 사용하여 측정값을 보다 효율적으로 만드는 방법을 설명하기 위해 다음 테이블에서는 두 가지 방법으로 측정값 정의를 보여 줍니다. 수식은 “전년 동기”를 계산하는 식을 반복하되 두 가지 방법으로 처리합니다. 첫 번째 인스턴스는 일반적인 DAX 계산 메서드를 사용하고, 두 번째 인스턴스는 계산에 변수를 사용합니다.

테이블의 두 번째 행은 향상된 측정값 정의를 보여 줍니다. 이 정의는 VAR 키워드를 사용하여 SalesPriorYear라는 변수를 도입했으며 식을 사용하여 이 새 변수에 “전년 동기” 결과를 할당합니다. 그런 다음 DIVIDE 식에서 변수를 두 번 사용합니다.

변수 없음

Sales YoY Growth =
DIVIDE (
    ( [Sales] - CALCULATE ( [Sales], PARALLELPERIOD ( 'Date'[Date], -12, MONTH ) ) ),
    CALCULATE ( [Sales], PARALLELPERIOD ( 'Date'[Date], -12, MONTH ) )
)

변수 포함

Sales YoY Growth =
VAR SalesPriorYear =
    CALCULATE ( [Sales], PARALLELPERIOD ( 'Date'[Date], -12, MONTH ) )
VAR SalesVariance =
    DIVIDE ( ( [Sales] - SalesPriorYear ), SalesPriorYear )
RETURN
    SalesVariance

테이블의 첫 번째 측정값 정의에서 수식은 Power BI에서 동일한 식을 두 번 계산해야 하기 때문에 비효율적입니다. 두 번째 정의는 더 효율적입니다. 변수로 인해 Power BI에서 PARALLELPERIOD 식을 한 번만 평가하면 되기 때문입니다.

의미 체계 모델에 여러 측정값이 포함된 여러 쿼리가 있는 경우 변수를 사용하면 전체 쿼리 처리 시간이 절반으로 줄어들고 의미 체계 모델의 전체 성능이 개선될 수 있습니다. 또한 이 솔루션은 단순합니다. 예를 들어 백분율과 누계를 처리하여 수식이 더욱 복잡해진 상황이라면 이점이 얼마나 클지 상상해 보세요.

변수를 사용하여 가독성 향상

변수를 사용하면 성능 향상 외에도 코드를 더 읽기 쉽게 만들 수 있습니다.

변수를 사용하는 경우 변수에 설명적인 이름을 사용하는 것이 모범 사례입니다. 이전 예제에서 변수는 SalesPriorYear이며, 이 이름은 변수가 무엇을 계산하는지를 명확히 설명합니다. X, temp 또는 variable1이라는 변수를 사용할 때의 결과를 고려해 보세요. 변수의 목적이 전혀 명확하지 않습니다.

명확하고 간결하며 의미 있는 이름을 사용하면 계산하려는 항목을 보다 쉽게 이해할 수 있으며 나중에 다른 개발자가 보고서를 유지 관리하기가 훨씬 더 간단합니다.

변수를 사용하여 여러 단계 문제 해결

변수를 사용하여 수식을 디버그하고 문제를 식별할 수 있습니다. 변수를 사용하면 각 변수를 개별적으로 평가하고 RETURN 식 이후에 재호출하여 DAX 계산에 대한 문제 해결 작업을 간소화할 수 있습니다.

다음 예에서는 변수에 할당된 식을 테스트합니다. 디버그하기 위해 RETURN 식을 변수에 쓰기 위해 임시로 다시 씁니다. 측정값 정의는 RETURN 식 다음에 오기 때문에 SalesPriorYear 변수만 반환합니다.

Sales YoY Growth % =
VAR SalesPriorYear =  CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))
VAR SalesPriorYear% = DIVIDE(([Sales] - SalesPriorYear), SalesPriorYear)  
RETURN  SalesPriorYear%

RETURN 식은 SalesPriorYear% 값만 표시합니다. 이 방법을 사용하면 디버깅을 완료한 이후에 식을 되돌릴 수 있습니다. 또한 DAX 코드의 복잡성이 줄어들기 때문에 더 쉽게 계산을 이해할 수 있습니다.