수정된 필터 컨텍스트에서 식을 평가합니다.
메모
CALCULATETABLE 함수도 있습니다. 테이블 개체반환하는 식에 적용된 필터 컨텍스트 수정한다는 점을 제외하고 정확히 동일한 기능을 수행합니다.
구문
CALCULATE(<expression>[, <filter1> [, <filter2> [, …]]])
매개 변수
| 변수 | 정의 |
|---|---|
expression |
계산할 식입니다. |
filter1, filter2,… |
(선택 사항) 필터 또는 필터 한정자 함수를 정의하는 부울 식 또는 테이블 식입니다. |
첫 번째 매개 변수로 사용하는 식은 측정값처럼 작동합니다.
필터는 다음과 같습니다.
- 부울 필터 식
- 테이블 필터 식
- 필터 수정 함수
여러 필터를 사용하는 경우 (
부울 필터 식
부울 식 필터는 TRUE 또는 FALSE계산되는 식입니다. 다음과 같은 몇 가지 규칙을 따라야 합니다.
단일 테이블의 열을 참조할 수 있습니다.
측정값을 참조할 수 없습니다.
중첩 함수 CALCULATE 를 사용할 수 없습니다.
집계 함수에 인수로 전달하지 않으면 테이블을 검색하거나 반환하는 함수를 사용할 수 없습니다.
스칼라 값을 반환하는 집계 함수를 포함할 수 있습니다. 다음은 그 예입니다.
Total sales on the last selected date = CALCULATE ( SUM ( Sales[Sales Amount] ), 'Sales'[OrderDateKey] = MAX ( 'Sales'[OrderDateKey] ) )
테이블 필터 식
테이블 식 필터는 테이블 개체를 필터로 적용합니다. 모델 테이블에 대한 참조일 수 있지만 테이블 개체를 반환하는 함수일 가능성이 높습니다. 함수를 FILTER 사용하여 부울 필터 식으로 정의할 수 없는 필터 조건을 포함하여 복잡한 필터 조건을 적용할 수 있습니다.
필터 한정자 함수
필터 한정자 함수를 사용하면 단순히 필터를 추가하는 것 이상의 작업을 수행할 수 있습니다. 필터 컨텍스트를 수정할 때 추가로 제어할 수 있습니다.
| 기능 | 목적 |
|---|---|
| REMOVEFILTERS | 테이블의 하나 이상의 열 또는 단일 테이블의 모든 열에서 모든 필터 또는 필터를 제거합니다. |
| ALL 1, ALLEXCEPT, ALLNOBLANKROW | 하나 이상의 열 또는 단일 테이블의 모든 열에서 필터를 제거합니다. |
| KEEPFILTERS | 동일한 열에서 기존 필터를 제거하지 않고 필터를 추가합니다. |
| USERELATIONSHIP | 관련 열 간에 비활성 관계를 적용하면 활성 관계가 자동으로 비활성 상태가 됩니다. |
| CROSSFILTER | 필터 방향을 수정하거나(둘 다에서 단일로, 단일에서 둘 다로) 관계를 사용하지 않도록 설정합니다. |
1ALL 함수와 해당 변형은 필터 한정자와 테이블 개체를 반환하는 함수로 작동합니다. 도구에서 함수를 REMOVEFILTERS 지원하는 경우 이를 사용하여 필터를 제거합니다.
반환 값
식에서 생성되는 값입니다.
비고
필터 식을 제공하는 경우 함수는 CALCULATE 필터 컨텍스트를 수정하여 식을 평가합니다. 각 필터 식에 대해 필터 식이 함수에 KEEPFILTERS 래핑되지 않은 경우 두 가지 표준 결과가 있습니다.
- 열 또는 테이블이 필터 컨텍스트에 없는 경우 새 필터가 필터 컨텍스트에 추가되어 식을 평가합니다.
- 열 또는 테이블이 필터 컨텍스트에 이미 있는 경우 기존 필터는 식을 평가 CALCULATE 하기 위해 새 필터에 의해 덮어씁니다.
CALCULATE 필터 없이 함수를 사용하면 특정 요구 사항이 충족됩니다. 행 컨텍스트를 필터링 컨텍스트로 전환합니다. 이 전환은 모델 데이터를 요약하는 식(모델 측정값이 아님)을 행 컨텍스트에서 평가해야 하는 경우에 필요합니다. 이 시나리오는 계산 열 수식 또는 반복기 함수의 식이 계산될 때 발생할 수 있습니다. 행 컨텍스트에서 모델 측정값을 사용하면 컨텍스트 전환이 자동으로 수행됩니다.
-
이 함수는 계산 열 또는 RLS(행 수준 보안) 규칙에서 사용되는 경우 DirectQuery 모드에서 사용할 수 없습니다.
예제
이 문서의 예제는 Adventure Works DW 2020 Power BI Desktop 모델 샘플과 함께 사용할 수 있습니다. 모델을 얻으려면 DAX 샘플 모델참조하세요.
다음 Sales 테이블 측정값 정의는 수익 결과를 생성하지만 파란색이 있는 제품에 대해서만 생성됩니다.
Blue Revenue =
CALCULATE ( SUM ( Sales[Sales Amount] ), 'Product'[Color] = "Blue" )
| 범주 | 판매액 | Blue Revenue |
|---|---|---|
| 액세서리 | $1,272,057.89 | $165,406.62 |
| 자전거 | $94,620,526.21 | $8,374,313.88 |
| 의류 | $2,117,613.45 | $259,488.37 |
| 구성 요소 | $11,799,076.66 | $803,642.10 |
| Total | $109,809,274.20 | $9,602,850.97 |
다음 Sales 테이블 측정값 정의는 모든 판매 채널의 매출 대비 매출 비율을 생성합니다.
Revenue % Total Channel =
DIVIDE (
SUM ( Sales[Sales Amount] ),
CALCULATE (
SUM ( Sales[Sales Amount] ),
REMOVEFILTERS ( 'Sales Order'[Channel] )
)
)
| 채널 | 판매액 | 수익 % 총 채널 |
|---|---|---|
| 인터넷 | $29,358,677.22 | 26.74% |
| 리셀러 | $80,450,596.98 | 73.26% |
| Total | $109,809,274.20 | 100.00% |
DIVIDE 함수는 Sales 테이블 Sales Amount 열 값의 합계를 수정된 필터 컨텍스트의 동일한 식으로 나눕니다. 필터 한정자 함수인 CALCULATE 함수를 사용하여 필터 컨텍스트를 수정하는 REMOVEFILTERS 함수입니다. Sales Order 테이블 채널 열에서 필터를 제거합니다.
다음 Customer 테이블 계산 열 정의는 고객을 로열티 클래스로 분류합니다. 매우 간단한 시나리오입니다. 고객이 생성한 수익이 $2500 미만이면
Customer Segment =
IF (
CALCULATE (
SUM ( Sales[Sales Amount] ),
ALLEXCEPT ( Customer, Customer[CustomerKey] )
) < 2500,
"Low",
"High"
)
| 고객 세그먼트 | 고객 수 | 판매액 |
|---|---|---|
| 높음 | 4,637 | $102,670,663.09 |
| 낮음 | 13,848 | $7,138,611.11 |
| Total | 18,485 | $109,809,274.20 |
이 예제에서는 행 컨텍스트가 필터 컨텍스트로 변환됩니다. 컨텍스트 전환이라고 합니다. ALLEXCEPT 함수는 CustomerKey 열을 제외한 모든 Customer 테이블 열에서 필터를 제거합니다.