다음을 통해 공유


변수를 사용하여 DAX 수식을 개선하십시오

데이터 모델러로서 and을 작성하고 일부 DAX 계산을 디버깅하는 것은 어려울 수 있습니다. 복잡한 계산 요구 사항에는 종종 복합 or 표현식을 작성해야 할 때가 많습니다. 복합 식은 많은 중첩된 함수를 사용하거나, and 식 논리를 다시 사용할 수 있을 가능성을 포함할 수 있습니다.

DAX 수식에 변수를 사용하면 보다 복잡한 and 효율적인 계산을 작성하는 데 도움이 될 수 있습니다. 변수는 성능, 안정성, 가독성 and 복잡성을 줄일 수 있습니다.

이 기사에서는 year대비year(연간 대비) 매출 증가에 대한 예제 measure을 사용하여 first 세 가지 이점을 설명합니다. YoY 매출 증가의 수식은 기간 매출에서 동일한 기간의 매출을 뺀 후, 동일한 기간의 매출로 나눈 값입니다 lastyear및 lastyear.

다음 measure 정의부터 시작해 보겠습니다.

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

measure 올바른 결과를 생성하지만 어떻게 개선할 수 있는지 now 살펴보겠습니다.

성능 향상

수식은 "같은 기간 lastyear"를 계산하는 식을 반복합니다. 이 수식은 동일한 식을 두 번 evaluatePower BI가 필요하므로 비효율적입니다. measure 정의는 변수 VAR사용하여 보다 효율적으로 만들 수 있습니다.

다음 measure 정의는 향상된 것을 나타냅니다. 식을 사용하여 "같은 기간 lastyear" 결과를 SalesPriorYear변수에 할당합니다. 그런 다음 변수는 RETURN 식에서 두 번 사용됩니다.

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

measure 계속해서 올바른 결과를 생성합니다. and 쿼리 time약 절반 정도에서 생성됩니다.

가독성 향상

previous measure 정의에서 변수 이름을 선택하면 RETURN 식을 더 쉽게 이해할 수 있습니다. 식은 and 짧습니다.

디버깅 간소화

변수는 수식을 디버그하는 데 도움이 될 수도 있습니다. 변수에 할당된 식을 테스트하려면 RETURN 식을 일시적으로 다시 작성하여 변수를 출력합니다.

다음 measure 정의는 SalesPriorYear 변수만 반환합니다. 의도한 RETURN 식을 주석으로 처리하는 방법을 확인합니다. 이 기술을 사용하면 디버깅이 완료되면 쉽게 되돌릴 수 있습니다.

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

복잡성 감소

earlier 버전의 DAX변수는 아직 지원되지 not. 새로운 filter 컨텍스트를 도입한 복잡한 식은 EARLIERorEARLIESTDAX 함수를 사용하여 외부 filter 컨텍스트를 참조해야 했습니다. 아쉽게도 데이터 모델러는 이러한 함수를 이해하고 and 사용하는 것이 어려웠습니다.

변수는 RETURN 식이 적용되는 filters 외부에서 항상 평가됩니다. 따라서 수정된 filter 컨텍스트 내에서 변수를 사용하면 EARLIEST 함수와 동일한 결과를 얻을 수 있습니다. 따라서 EARLIERorEARLIEST 함수를 사용하지 않도록 할 수 있습니다. 즉, 이해하기 쉬운 덜 복잡하고 and 수식을 now 수 있습니다.

하위 범주 테이블에 추가된 계산 열 정의를 다음과 같이 고려합니다. Subcategory Sales 열 values을 기반으로, 각 product 하위 범주에 대해 rank을 평가합니다.

Subcategory Sales Rank =
COUNTROWS(
    FILTER(
        Subcategory,
        EARLIER(Subcategory[Subcategory Sales]) < Subcategory[Subcategory Sales]
    )
) + 1

EARLIER 함수는 value열의 소분류 판매를 현재 행 컨텍스트에서 참조하는 데 사용됩니다.

계산 열 정의는 EARLIER 함수 대신 변수를 사용하여 개선할 수 있습니다. CurrentSubcategorySales 변수는 RETURN 식이 수정된 컨텍스트 내에서 사용하는 현재 행 컨텍스트Subcategory Sales저장합니다.

Subcategory Sales Rank =
VAR CurrentSubcategorySales = Subcategory[Subcategory Sales]
RETURN
    COUNTROWS(
        FILTER(
            Subcategory,
            CurrentSubcategorySales < Subcategory[Subcategory Sales]
        )
    ) + 1