이 섹션에서는 DAX(데이터 분석 식) 수식 내에서 필터를 만드는 방법을 설명합니다. 수식 내에서 필터를 만들어 계산에 사용되는 원본 데이터의 값을 제한할 수 있습니다. 이렇게 하려면 테이블을 수식에 대한 입력으로 지정한 다음 필터 식을 정의합니다. 사용자가 제공하는 필터 식은 데이터를 쿼리하고 원본 데이터의 하위 집합만 반환하는 데 사용됩니다. 필터는 데이터의 현재 컨텍스트에 따라 수식 결과를 업데이트할 때마다 동적으로 적용됩니다.
이 문서의 내용
수식에 사용되는 테이블에 필터 만들기
테이블을 입력으로 사용하는 수식에 필터를 적용할 수 있습니다. 테이블 이름을 입력하는 대신 FILTER 함수를 사용하여 지정된 테이블에서 행의 하위 집합을 정의합니다. 그런 다음 해당 하위 집합은 사용자 지정 집계와 같은 작업을 위해 다른 함수에 전달됩니다.
예를 들어 재판매인에 대한 주문 정보가 포함된 데이터 테이블이 있고 각 재판매인의 판매 금액을 계산하려고 한다고 가정해 보겠습니다. 그러나 고가 제품을 여러 개 판매한 재판매인에 대해서만 판매액을 표시하려고 합니다. DAX 샘플 통합 문서를 기반으로 하는 다음 수식은 필터를 사용하여 이 계산을 만드는 방법의 한 가지 예를 보여 줍니다.
=SUMX(
FILTER ('ResellerSales_USD', 'ResellerSales_USD'[Quantity] > 5 &&
'ResellerSales_USD'[ProductStandardCost_USD] > 100),
'ResellerSales_USD'[SalesAmt]
)
수식의 첫 번째 부분은 테이블을 인수로 사용하는 파워 피벗 집계 함수 중 하나를 지정합니다. SUMX는 테이블의 합계를 계산합니다.
수식의 두 번째 부분은
FILTER(table, expression),사용할 데이터를 알려줍니다SUMX.SUMX테이블이 생성되는 테이블 또는 식이 필요합니다. 여기서는 테이블의 모든 데이터를 사용하는 대신 함수를FILTER사용하여 테이블의 행을 지정할 수 있습니다.
필터 식에는 두 부분이 있습니다. 첫 번째 부분은 필터가 적용되는 테이블의 이름을 지정합니다. 두 번째 부분에서는 필터 조건으로 사용할 식을 정의합니다. 이 경우, 5대 이상 판매한 재판매인과 100달러 이상의 제품을 판매한 재판매인을 필터링합니다. 연산자 &&은 논리 AND 연산자로, 행이 필터링된 하위 집합에 속하려면 조건의 두 부분이 모두 참이어야 함을 나타냅니다.수식의 세 번째 부분은 함수에
SUMX어떤 값을 합산해야 하는지 알려줍니다. 이 경우에는 판매액만 사용하고 있습니다.
테이블을 반환하는 FILTER와 같은 함수는 테이블이나 행을 직접 반환하지 않고 항상 다른 함수에 포함됩니다. 더 많은 예제를 포함하여 필터링에 사용되는 FILTER 및 기타 함수에 대한 자세한 내용은 필터 함수(DAX)를 참조하세요.참고
필터 식은 사용되는 컨텍스트의 영향을 받습니다. 예를 들어 측정값에 필터를 사용하고 측정값이 피벗 테이블 또는 피벗 차트에서 사용되는 경우 반환되는 데이터의 하위 집합은 사용자가 피벗 테이블에 적용한 추가 필터 또는 슬라이서의 영향을 받을 수 있습니다. 컨텍스트에 대한 자세한 내용은 DAX 수식의 컨텍스트를 참조하세요.
중복을 제거하는 필터
특정 값을 필터링하는 것 외에도 다른 테이블 또는 열에서 고유한 값 집합을 반환할 수 있습니다. 이는 열의 고유 값 수를 계산하거나 고유 값 목록을 다른 작업에 사용할 때 유용할 수 있습니다. DAX는 고유한 값을 반환하기 위한 두 가지 함수인 DISTINCT 함수와VALUES 함수를 제공합니다.
- DISTINCT 함수는 함수에 대한 인수로 지정한 단일 열을 검사하고 고유한 값만 포함하는 새 열을 반환합니다.
- VALUES 함수는 고유 값 목록도 반환하지만 알 수 없는 멤버도 반환합니다. 이는 관계로 조인된 두 테이블의 값을 사용하고 한 테이블에는 값이 없고 다른 테이블에는 있는 경우에 유용합니다. 알 수 없는 멤버에 대한 자세한 내용은 DAX 수식의 컨텍스트를 참조하세요.
이 두 함수는 모두 값의 전체 열을 반환합니다. 따라서 함수를 사용하여 다른 함수에 전달할 값 목록을 가져옵니다. 예를 들어 다음 수식을 통해 고유한 제품 키를 사용하여 특정 재판매인이 판매하는 고유 제품 목록을 가져온 다음 COUNTROWS 함수를 사용하여 해당 목록의 제품 수를 계산할 수 있습니다.
=COUNTROWS(DISTINCT('ResellerSales_USD'[ProductKey]))
컨텍스트가 필터에 영향을 미치는 방식
피벗 테이블이나 피벗 차트에 DAX 수식을 추가하는 경우 수식 결과가 컨텍스트의 영향을 받을 수 있습니다. 파워 피벗 테이블에서 작업하는 경우 컨텍스트는 현재 행과 해당 값입니다. 피벗 테이블 또는 피벗 차트에서 작업하는 경우 컨텍스트는 슬라이싱 또는 필터링과 같은 작업으로 정의되는 데이터의 집합 또는 하위 집합을 의미합니다. 피벗 테이블 또는 피벗 차트의 디자인은 자체 컨텍스트도 지정합니다. 예를 들어 지역 및 연도별로 매출을 그룹화하는 피벗 테이블을 만들면 해당 지역 및 연도에 적용되는 데이터만 피벗 테이블에 표시됩니다. 따라서 피벗 테이블에 추가하는 모든 측정값은 열 및 행 머리글과 측정값 수식의 필터를 사용하여 계산됩니다.
자세한 내용은 DAX 수식의 컨텍스트를 참조하세요.
필터 제거
복잡한 수식으로 작업할 때 현재 필터가 무엇인지 정확히 알고 싶을 수도 있고 수식의 필터 부분을 수정하고 싶을 수도 있습니다. DAX는 필터를 제거하고 현재 필터 컨텍스트의 일부로 유지되는 열을 제어할 수 있는 몇 가지 함수를 제공합니다. 이 섹션에서는 이러한 함수가 수식의 결과에 미치는 영향에 대한 개요를 제공합니다.
ALL 함수를 사용하여 모든 필터 재정의하기
이 ALL 함수를 사용하여 이전에 적용된 필터를 재정의하고 표의 모든 행을 집계 또는 기타 작업을 수행하는 함수로 반환할 수 있습니다. 테이블 대신 하나 이상의 열을 인수 ALL로 사용하는 경우 함수는 ALL 컨텍스트 필터를 무시하고 모든 행을 반환합니다.
참고
관계형 데이터베이스 용어에 익숙하다면 모든 테이블의 자연적인 왼쪽 우선 외부 조인을 생성하는 것으로 생각 ALL 할 수 있습니다.
예를 들어 판매 및 제품 테이블이 있는 경우 현재 제품의 판매액 합계를 모든 제품의 판매액으로 나눈 값을 계산하는 수식을 만들려고 합니다. 측정값에 수식을 사용하는 경우 피벗 테이블 사용자가 슬라이서를 사용하여 행에 제품 이름이 있는 특정 제품을 필터링할 수 있다는 사실을 고려해야 합니다. 따라서 필터나 슬라이서에 관계없이 분모의 실제 값을 얻으려면 ALL 함수를 추가하여 모든 필터를 재정의해야 합니다. 다음 수식은 ALL을 사용하여 이전 필터의 효과를 재정의하는 방법의 한 가지 예입니다.
=SUM (Sales[Amount])/SUMX(Sales[Amount], FILTER(Sales, ALL(Products)))
- 수식의 첫 번째 부분인 SUM(Sales[Amount])은 분자를 계산합니다.
- 합계는 현재 컨텍스트를 고려합니다. 즉, 계산된 열에 수식을 추가하면 행 컨텍스트가 적용되고, 피벗 테이블에 측정값으로 수식을 추가하면 피벗 테이블에 적용된 모든 필터(필터 컨텍스트)가 적용됩니다.
- 공식의 두 번째 부분은 분모를 계산합니다. ALL 함수는 테이블에 적용될 수 있는 모든 필터를 재정의합니다.
Products
자세한 예제를 포함한 자세한 내용은 ALL 함수를 참조하세요.
ALLEXCEPT 함수를 사용하여 특정 필터 재정의
ALLEXCEPT 함수도 기존 필터를 재정의하지만 기존 필터 중 일부를 유지하도록 지정할 수 있습니다. ALLEXCEPT 함수에 대한 인수로 이름을 지정하는 열은 계속 필터링될 열을 지정합니다. 전부는 아닌 대부분의 열에서 필터를 재정의하려는 경우 ALLSEXCEPT ALL 값이 ALL보다 더 편리합니다. ALLEXCEPT 함수는 여러 열에서 필터링될 수 있는 피벗 테이블을 만들고 수식에 사용되는 값을 제어하려는 경우에 특히 유용합니다. 피벗 테이블에서 ALLEXCEPT 사용 방법의 자세한 예제를 포함한 자세한 내용은 ALLEXCEPT 함수를 참조하십시오.