필터 한정자 함수 사용

완료됨

CALCULATE 함수를 사용하는 경우 필터 수정 함수를 전달하여 필터만 추가하는 것보다 많은 작업을 수행할 수 있습니다.

필터 제거

REMOVEFILTERS DAX 함수를 CALCULATE 필터 식으로 사용하여 필터 컨텍스트에서 필터를 제거할 수 있습니다. 이렇게 하면 하나 이상의 열에서 또는 단일 테이블의 모든 열에서 필터를 제거할 수 있습니다.

참고

REMOVEFILTERS 함수는 비교적 새로운 함수입니다. 이전 버전의 DAX에서는 ALL DAX 함수 또는 ALLEXCEPTALLNOBLANKROW 같은 변형을 사용하여 필터를 제거했습니다. 이러한 함수는 필터 한정자로도 동작하고 고유 값의 테이블 개체를 반환하는 함수로도 동작합니다. 이러한 함수를 사용하여 필터를 제거하는 설명서와 수식 예제가 나올 가능성이 있으므로 지금 이들 함수에 대해 설명하는 것입니다.

다음 예제에서는 Revenue 측정값을 평가하는 Sales 테이블에 새 측정값을 추가하지만 Sales Territory 테이블에서 필터를 제거하여 이를 수행합니다. 측정값의 서식을 소수점 이하 두 자리 통화로 지정합니다.

Revenue Total Region = CALCULATE([Revenue], REMOVEFILTERS('Sales Territory'))

이제 보고서의 Page 2에 있는 행렬 시각적 개체에 Revenue Total Region 측정값을 추가합니다. 이 행렬 시각적 개체는 행에서 Sales Territory 테이블의 다음 3개 열을 기준으로 그룹화합니다. Group, CountryRegion.

이미지는 행에 Group, Country 및 Region 열이 그룹화되고 Revenue 및 Revenue Total Region 요약이 있는 Reseller Revenue라는 행렬을 보여 줍니다. Revenue Total Region의 값은 각 행 그룹에 대해 동일합니다.

Revenue Total Region 값이 동일합니다. 이 값은 총 수익입니다.

이 결과가 자체로는 유용하지 않지만 비율에서 분모로 사용되어 총계의 비율을 계산합니다. 따라서 이제 Revenue Total Region 측정값 정의에 다음 정의를 덮어씁니다. (이 새로운 정의는 측정값 이름을 변경하고 두 개의 변수를 선언합니다. 측정값의 서식을 소수점 이하 두 자리의 백분율로 지정해야 합니다.)

Revenue % Total Region =
VAR CurrentRegionRevenue = [Revenue]
VAR TotalRegionRevenue =
    CALCULATE(
        [Revenue],
        REMOVEFILTERS('Sales Territory')
    )
RETURN
    DIVIDE(
        CurrentRegionRevenue,
        TotalRegionRevenue
    )

이제 행렬 시각적 개체에 Revenue % Total Region 값이 표시되는지 확인합니다.

이미지는 행에 Group, Country 및 Region 열이 그룹화되고 Revenue 및 Revenue % Total Region 요약이 있는 Reseller Revenue라는 행렬 시각적 개체를 보여 줍니다.

이제 또 하나의 측정값을 만듭니다. 이번에는 지역 수익을 국가 수익으로 나눈 비율을 계산합니다.

이 작업을 완료하기 전에 Southwest 지역의 Revenue % Total Region 값은 22.95%입니다. 이 셀의 필터 컨텍스트를 조사합니다. 데이터 뷰로 전환한 다음 필드 창에서 Sales Territory 테이블을 선택합니다.

다음 열 필터를 적용합니다.

  • Group - North America
  • Country - United States
  • Region - Southwest

이미지는 Sales Territory 테이블에 대한 Power BI Desktop 테이블 필터를 보여 줍니다. 필터는 (1) Group = North America, (2) Country = United States 및 (3) Region = Southwest에 적용됩니다.

필터가 테이블을 한 행으로 축소한 것을 볼 수 있습니다. 이제 국가 수익에 대한 지역 수익의 비율을 만들려는 새로운 목표를 고려하며 Region 열에서 필터를 지웁니다.

이미지는 열 상황에 맞는 메뉴가 표시되고 필터 지우기 명령이 강조 표시되어 있습니다.

이제 5개 행이 존재하고 각 행은 미국에 속합니다. 따라서 CountryGroup 열에 대한 필터를 유지하면서 Region 열 필터를 지우면 지역의 국가에 대한 새 필터 컨텍스트가 만들어집니다.

다음 측정값 정의에서 열에서 필터를 지우거나 제거할 수 있는 방법을 볼 수 있습니다. DAX 논리에서 이는 Revenue % Total Region 측정값 수식에 적용되는 작고 미묘한 변경입니다. 이제 REMOVEFILTERS 함수는 Sales Territory 테이블의 모든 열이 아닌 Region 열에서 필터를 제거합니다.

Revenue % Total Country =
VAR CurrentRegionRevenue = [Revenue]
VAR TotalCountryRevenue =
    CALCULATE(
        [Revenue],
        REMOVEFILTERS('Sales Territory'[Region])
    )
RETURN
    DIVIDE(
        CurrentRegionRevenue,
        TotalCountryRevenue
    )

Revenue % Total Country 측정값을 Sales 테이블에 추가하고 서식을 소수점 이하 두 자리 백분율로 지정합니다. 새 측정값을 행렬 시각적 개체에 추가합니다.

이미지는 행에 Group, Country 및 Region 열이 그룹화되고 Revenue, Revenue % Total Region 및 Revenue % Total Country 요약이 있는 Reseller Revenue라는 행렬 시각적 개체를 보여 줍니다. 미국의 Revenue % Total Country 값만 100%가 아닙니다.

미국 지역의 값을 제외한 모든 값은 100%입니다. 그 이유는 Adventure Works에서는 미국만 지역이 구분되고 다른 모든 국가는 그렇지 않기 때문입니다.

참고

테이블 형식 모델은 가변 깊이가 있는 계층 구조인 비정형 계층을 지원하지 않습니다. 따라서 계층 구조의 하위 수준에서 부모(또는 기타 상위 항목) 값을 반복하는 것이 일반적인 디자인 방법입니다. 예를 들어 오스트레일리아에는 지역이 없으므로 국가/지역 값은 지역 이름으로 반복됩니다. BLANK 대신 의미 있는 값을 저장하는 것이 항상 좋습니다.

다음 예제는 사용자가 만드는 마지막 측정값입니다. Revenue % Total Group 측정값을 추가하고 서식을 소수점 이하 두 자리 백분율로 지정합니다. 그런 다음 새 측정값을 행렬 시각적 개체에 추가합니다.

Revenue % Total Group =
VAR CurrentRegionRevenue = [Revenue]
VAR TotalGroupRevenue =
    CALCULATE(
        [Revenue],
        REMOVEFILTERS(
            'Sales Territory'[Region],
            'Sales Territory'[Country]
        )
    )
RETURN
    DIVIDE(
        CurrentRegionRevenue,
        TotalGroupRevenue
    )

이미지는 행에 Group, Country 및 Region 열이 그룹화되고 Revenue, Revenue % Total Region, Revenue % Total Country 및 Revenue % Total Group 요약이 있는 Reseller Revenue라는 행렬 시각적 개체를 보여 줍니다.

Sales Territory 테이블의 RegionCountry 열에서 필터를 제거하면 측정값은 지역 수익을 해당 그룹 수익의 비율로 계산합니다.

필터 유지

KEEPFILTERS DAX 함수를 CALCULATE 함수의 필터 식으로 사용하여 필터를 유지할 수 있습니다.

이 작업을 수행하는 방법을 관찰하려면 보고서의 Page 1로 전환합니다. 그런 다음 Revenue Red 측정값 정의를 수정하여 KEEPFILTERS 함수를 사용합니다.

Revenue Red =
CALCULATE(
    [Revenue],
    KEEPFILTERS('Product'[Color] = "Red")
)

이미지는 다음 세 개의 열이 있는 테이블 시각적 개체를 보여 줍니다. Color, Revenue 및 Revenue Red. 9개 행과 합계가 표시되어 있습니다. Revenue Red의 경우 Red 행 및 Total은 BLANK가 아닙니다.

테이블 시각적 개체에 하나의 Revenue Red 값만 존재합니다. 그 이유는 부울 필터 식이 Product 테이블의 Color 열에서 기존 필터를 유지하기 때문입니다. Red 이외의 컬러가 BLANK인 이유는 이러한 두 필터에 대해 필터 컨텍스트와 필터 식이 조합되었기 때문입니다. 컬러 Black과 컬러 Red가 교차하고, 동시에 둘 다 TRUE가 될 수 없으므로 식은 어떤 Product 행으로도 필터링되지 않습니다. 두 Red 필터가 동시에 TRUE일 수만 있습니다. 이는 하나의 Revenue Red 값이 표시되는 이유를 설명합니다.

비활성 관계 사용

비활성 모델 관계는 USERELATIONSHIP DAX 함수가 CALCULATE 함수에 필터 식으로 전달될 때만 필터를 전파할 수 있습니다. 이 함수를 사용하여 비활성 관계에 활성화하면 활성 관계가 자동으로 비활성화됩니다.

다음은 비활성 관계를 사용하여 배송 날짜별로 Revenue 측정값을 계산하는 측정값 정의 예제입니다.

Revenue Shipped =
CALCULATE (
    [Revenue],
    USERELATIONSHIP('Date'[DateKey], Sales[ShipDateKey])
)

관계 동작 수정

CROSSFILTER DAX 함수를 CALCULATE 함수에 필터 식으로 전달하여 식을 평가할 때 모델 관계 동작을 수정할 수 있습니다. 이것은 고급 기능입니다.

CROSSFILTER 함수는 필터 방향을 수정할 수 있으며(둘 다에서 하나로 또는 하나에서 둘 다로) 관계를 비활성화할 수도 있습니다.