다음을 통해 공유


DAX 수식의 컨텍스트

컨텍스트를 사용하면 수식의 결과가 현재 행 또는 셀 선택과 모든 관련 데이터에 맞게 변경될 수 있는 동적 분석을 수행할 수 있습니다. 우수한 성능의 동적 분석을 작성하고 수식 문제를 해결하려면 컨텍스트를 이해하고 효과적으로 사용해야 합니다.

이 섹션에서는 행 컨텍스트, 쿼리 컨텍스트 및 필터 컨텍스트 형식을 설명합니다. 또한 계산 열과 피벗 테이블에서 수식에 대한 컨텍스트를 평가하는 방법을 설명합니다.

이 섹션의 마지막 부분에는 컨텍스트에 따라 수식의 결과가 어떻게 변경되는지를 보여 주는 구체적인 예에 대한 링크가 있습니다.

컨텍스트 소개

PowerPivot의 수식은 피벗 테이블에 적용된 필터, 테이블 간의 관계 및 수식에 사용된 필터에 의해 영향을 받을 수 있습니다. 컨텍스트를 통해 동적 분석을 수행할 수 있습니다. 수식을 작성하고 문제를 해결하려면 컨텍스트를 이해하는 것이 중요합니다.

컨텍스트 형식에는 행 컨텍스트, 쿼리 컨텍스트, 필터 컨텍스트 등이 있습니다.

행 컨텍스트는 "현재 행"으로 간주될 수 있습니다. 계산 열을 만든 경우 행 컨텍스트는 각 개별 행의 값과 현재 행에 관련된 열의 값으로 구성됩니다. 현재 행에서 값을 가져온 다음 전체 테이블에서 작업을 수행할 때 해당 값을 사용하는 함수(EARLIEREARLIEST)도 있습니다.

쿼리 컨텍스트는 행 머리글과 열 머리글에 따라 피벗 테이블의 각 셀에 대해 암시적으로 만들어지는 데이터 하위 집합을 나타냅니다.

필터 컨텍스트는 행에 적용되었거나 수식 내에서 필터 식으로 정의된 필터 제약 조건을 기준으로 각 열에 허용되는 값 집합입니다.

다음 항목에서는 여러 컨텍스트 형식에 대해 자세히 설명합니다. DAX 수식의 컨텍스트.

맨 위로 이동

행 컨텍스트

계산 열에서 수식을 만드는 경우 해당 수식의 행 컨텍스트에 현재 행에 있는 모든 열의 값이 포함됩니다. 테이블이 다른 테이블과 관련되어 있으면 다른 테이블에서 현재 행과 관련된 모든 값도 내용에 포함됩니다.

예를 들어 동일한 테이블의 두 열을 더하는 =[Freight] + [Tax] 계산 열을 만든다고 가정합니다. 이 수식은 동일한 행의 값을 자동으로 참조하는 Excel 테이블의 수식처럼 동작합니다. 이때 테이블은 범위와 다릅니다. 즉, 범위 노테이션을 사용하여 현재 행 앞에 있는 행의 값을 참조할 수 없으며 테이블 또는 셀에 있는 임의의 단일 값을 참조할 수 없습니다. 항상 테이블 및 열을 사용해야 합니다.

행 컨텍스트는 테이블 간의 관계를 자동으로 따라 현재 행에 연결된 관련 테이블의 행을 확인합니다.

예를 들어 다음은 RELATED 함수를 사용하여 관련 테이블에서 주문이 발송된 지역을 기준으로 세금 값을 가져오는 수식입니다. 세금 값은 현재 테이블의 지역 값을 사용하고 관련 테이블에서 지역을 조회한 다음 관련 테이블에서 해당 지역의 세율을 가져와 결정됩니다.

= [Freight] + RELATED('Region'[TaxRate])

이 수식은 단순히 Region 테이블에서 현재 지역의 세율을 가져옵니다. 테이블을 연결하는 키를 몰라도 되고 지정할 필요도 없습니다.

여러 행 컨텍스트

DAX에는 테이블에서 계산을 반복하는 함수도 포함되어 있습니다. 이러한 함수에는 여러 현재 행 및 현재 행 컨텍스트가 포함될 수 있습니다. 프로그래밍 측면에서 내부 및 외부 루프를 재귀적으로 사용하는 수식을 만들 수 있습니다.

예를 들어 통합 문서에 Products 테이블과 Sales 테이블이 있다고 가정합니다. 여러 제품과 관련된 트랜잭션으로 꽉 찬 판매량 테이블 전체를 살펴보고 한 트랜잭션에서 각 제품에 대해 주문된 수량 중 가장 많은 수량을 찾을 수 있습니다.

Excel에서 이 계산을 수행하려면 일련의 중간 요약이 필요하며, 데이터가 변경될 경우 이러한 중간 요약을 다시 작성해야 합니다. Excel의 고급 사용자인 경우 이 작업을 수행하는 배열 수식을 작성할 수 있습니다. 또는 관계형 데이터베이스에서 중첩된 하위 SELECT를 작성할 수 있습니다.

그러나 DAX에서는 올바른 값을 반환하는 단일 수식을 작성할 수 있으며, 테이블에 데이터를 추가할 때마다 결과가 자동으로 업데이트됩니다.

=MAXX(FILTER(Sales,[ProdKey]=EARLIER([ProdKey])),Sales[OrderQty])

이 수식에 대한 구체적인 연습은 EARLIER 함수를 참조하십시오.

간단히 말해 EARLIER 함수는 현재 연산보다 먼저 발생한 연산의 행 컨텍스트를 저장합니다. 이 함수는 항상 두 개의 컨텍스트 집합을 메모리에 저장합니다. 하나의 컨텍스트 집합은 수식의 내부 루프에 대한 현재 행을 나타내고, 다른 컨텍스트 집합은 수식의 외부 루프에 대한 현재 행을 나타냅니다. DAX는 두 루프 간에 값을 자동으로 공급하므로 복잡한 집계를 만들 수 있습니다.

쿼리 컨텍스트

쿼리 컨텍스트는 수식에 대해 암시적으로 검색되는 데이터의 하위 집합을 참조합니다. 측정값 또는 기타 값 필드를 피벗 테이블의 셀에 놓으면 PowerPivot 엔진에서 행 머리글과 열 머리글, 슬라이서 및 보고서 필터를 검사하여 컨텍스트를 확인합니다. 그런 다음 PowerPivot에서 필요한 계산을 수행하여 피벗 테이블의 각 셀을 채웁니다. 검색되는 데이터 집합은 각 셀의 쿼리 컨텍스트입니다.

컨텍스트는 수식을 배치하는 위치에 따라 변경될 수 있으므로 많은 그룹화 및 필터가 있는 피벗 테이블에서 수식을 사용하는지, 아니면 필터가 없고 최소한의 컨텍스트만 있는 계산 열에서 수식을 사용하는지에 따라 수식의 결과도 변경됩니다.

예를 들어 Sales 테이블의 Profit 열에 있는 값의 합계를 구하는 간단한 수식을 다음과 같이 만든다고 가정합니다. =SUM('Sales'[Profit]). Sales 테이블의 계산 열에 이 수식을 사용하는 경우 수식의 쿼리 컨텍스트가 항상 Sales 테이블의 전체 데이터 집합이므로 수식 결과가 전체 테이블에서 동일합니다. 결과에는 모든 지역, 모든 제품, 모든 연도 등의 수익이 포함됩니다.

그러나 동일한 결과를 수백 번 표시하려는 경우는 거의 없으며 특정 연도, 특정 국가, 특정 제품 또는 이러한 조건의 조합에 대한 수익을 가져온 후 총 합계를 가져오려고 합니다.

피벗 테이블에서 열 머리글과 행 머리글을 추가 또는 제거하고 슬라이서를 추가 또는 제거하여 컨텍스트를 쉽게 변경할 수 있습니다. 측정값에서 위와 같은 수식을 만든 다음 피벗 테이블에 놓을 수 있습니다. 피벗 테이블에 열 머리글이나 행 머리글을 추가할 때마다 측정값이 평가되는 쿼리 컨텍스트가 변경됩니다. 추출 및 필터링 작업도 컨텍스트에 영향을 줍니다. 따라서 피벗 테이블에서 사용되는 동일한 수식은 셀에 따라 다른 쿼리 컨텍스트에서 계산됩니다.

필터 컨텍스트

필터 컨텍스트는 수식에 인수를 사용하여 열이나 테이블에 허용되는 값 집합에 대한 필터 제약 조건을 지정하면 추가됩니다. 필터 컨텍스트는 행 컨텍스트 또는 쿼리 컨텍스트와 같은 다른 컨텍스트보다 먼저 적용됩니다.

예를 들어 피벗 테이블은 이전 쿼리 컨텍스트 섹션에 설명된 대로 행 머리글과 열 머리글을 기준으로 각 셀의 값을 계산합니다. 그러나 피벗 테이블에 추가한 측정값 또는 계산 열에서 수식에 사용되는 값을 제어하는 필터 식을 지정할 수 있습니다. 특정 열의 필터를 선택적으로 지울 수도 있습니다.

수식 내에 필터를 만드는 방법은 FILTER 함수를 참조하십시오.

필터를 지워서 총합계를 구하는 방법의 예는 ALL 함수를 참조하십시오.

수식 내에서 필터를 선택적으로 지우고 적용하는 방법의 예는 ALLEXCEPT 함수를 참조하십시오.

따라서 수식의 결과를 해석할 때는 피벗 테이블에 사용되는 측정값 또는 수식의 정의를 검토하여 필터 컨텍스트를 고려해야 합니다.

수식의 컨텍스트 확인

수식을 만들면 PowerPivot for Excel에서 먼저 일반 구문을 확인한 다음 현재 컨텍스트에서 가능한 열과 테이블을 기준으로 제공된 열 및 테이블의 이름을 확인합니다. PowerPivot에서 수식에 의해 지정된 열과 테이블을 찾을 수 없는 경우 오류가 발생합니다.

컨텍스트는 이전 섹션에 설명된 대로 통합 문서에서 사용 가능한 테이블, 테이블 간의 관계 및 적용된 필터를 사용하여 결정됩니다.

예를 들어 일부 데이터를 새 테이블로 가져온 후 필터를 적용하지 않은 경우 테이블의 전체 열 집합이 현재 컨텍스트에 포함됩니다. 여러 테이블이 관계로 연결되어 있으며 열 머리글을 추가하고 슬라이서를 사용하여 필터링된 피벗 테이블에서 작업하는 경우에는 관련 테이블과 데이터에 대한 모든 필터가 컨텍스트에 포함됩니다.

컨텍스트는 수식의 문제 해결을 어렵게 할 수도 있는 강력한 개념입니다. 간단한 수식과 관계로 시작하여 컨텍스트 작동 방식을 확인한 후 피벗 테이블에서 간단한 수식을 시험해 보는 것이 좋습니다. 다음 섹션에서는 수식이 여러 유형의 컨텍스트를 사용하여 결과를 동적으로 반환하는 방식의 몇 가지 예도 제공합니다.

수식의 컨텍스트 예

  • RELATED 함수는 관련 열의 값을 포함하도록 현재 행의 컨텍스트를 확장합니다. 이 함수를 사용하여 조회를 수행할 수 있습니다. 이 항목의 예에서는 필터링과 행 컨텍스트의 상호 작용을 보여 줍니다.

  • FILTER 함수를 사용하여 현재 컨텍스트에 포함시킬 행을 지정할 수 있습니다. 또한 이 항목의 예에서는 집계를 수행하는 다른 함수에 필터를 포함하는 방법을 보여 줍니다.

  • ALL 함수는 수식에서 컨텍스트를 설정합니다. 이 함수를 사용하여 쿼리 컨텍스트의 결과로 적용되는 필터를 재정의할 수 있습니다.

  • ALLEXCEPT 함수를 사용하면 지정된 필터를 제외한 모든 필터를 제거할 수 있습니다. 두 항목에는 모두 수식을 작성하고 복잡한 컨텍스트를 이해할 수 있도록 안내하는 예제가 포함되어 있습니다.

  • EARLIER 및 EARLIEST 함수를 사용하면 내부 루프의 값을 참조하면서 계산을 수행하여 테이블을 반복할 수 있습니다. 재귀의 개념과 내부 및 외부 루프에 대해 잘 알고 있다면 EARLIER 및 EARLIEST 함수의 기능이 얼마나 유용한지 확인할 수 있을 것입니다. 이러한 개념을 처음 접하는 경우 예에서 설명된 단계를 수행하여 계산에서 내부 컨텍스트와 외부 컨텍스트가 어떻게 사용되는지를 확인해야 합니다.

참조 무결성

이 섹션에서는 관계를 통해 연결된 PowerPivot 테이블의 누락 값과 관련된 고급 개념에 대해 설명합니다. 여러 테이블과 복잡한 수식을 포함하는 통합 문서가 있으며 결과를 이해하기 위해 도움이 필요한 경우 이 섹션이 유용할 수 있습니다.

관계형 데이터 개념을 처음 접하는 경우 먼저 소개 항목인 관계 개요를 읽어 보십시오.

참조 무결성 및 PowerPivot 관계

PowerPivot에서는 유효한 관계를 정의하기 위해 참조 무결성을 두 테이블 간에 적용할 필요가 없습니다. 대신 빈 행이 각 일 대 다 관계의 "일"의 끝에 만들어지며 관련 테이블의 일치하지 않는 행을 처리하는 데 사용됩니다. 이 행은 SQL 외부 조인으로 효과적으로 동작합니다.

피벗 테이블에서 관계의 일 쪽을 기준으로 데이터를 그룹화하는 경우 관계의 다 쪽에서 일치하지 않는 데이터가 함께 그룹화되며 빈 행 머리글과 함께 합계에 포함됩니다. 빈 머리글은 "알 수 없는 멤버"와 거의 동일한 의미입니다.

알 수 없는 멤버 이해

SQL Server Analysis Services와 같은 다차원 데이터베이스 시스템으로 작업한 적이 있다면 알 수 없는 멤버라는 개념을 이미 알고 있을 것입니다. 이 용어가 생소한 경우 다음 예를 통해 알 수 없는 멤버란 무엇이고 계산에 어떤 영향을 주는지 확인할 수 있습니다.

각 상점의 월별 판매량을 합하는 계산을 작성하는데 Sales 테이블의 열에 상점 이름 값이 누락되어 있다고 가정합니다. StoreSales에 대한 테이블이 상점 이름으로 연결되어 있는 경우 수식에서 어떤 일이 발생하겠습니까? 피벗 테이블에서 기존 상점과 관련이 없는 판매량은 어떻게 그룹화되거나 표시되어야 합니까?

이 문제는 대형 팩트 데이터 테이블이 저장소, 지역 및 팩트 분류와 계산에 사용되는 기타 특성에 대한 정보를 포함하는 차원 테이블에 논리적으로 연결되어야 하는 데이터 웨어하우스에서 공통적으로 발생하는 문제입니다. 문제를 해결하기 위해 기존 엔터티와 관련이 없는 새 팩트는 모두 알 수 없는 멤버에 일시적으로 할당됩니다. 따라서 관련 없는 팩트는 피벗 테이블에서 빈 머리글 밑에 그룹화되어 나타납니다.

빈 값과 빈 행 처리비교

빈 값은 알 수 없는 멤버를 수용하기 위해 추가되는 빈 행과 다릅니다. 빈 값은 null, 빈 문자열 및 기타 누락 값을 나타내는 데 사용되는 특수 값입니다. 빈 값과 기타 DAX 데이터 형식에 대한 자세한 내용은 PowerPivot 통합 문서에서 지원되는 데이터 형식을 참조하십시오.

참고 항목

개념

관계 문제 해결

피벗 테이블에서 관계 작업

보고서, 차트 및 피벗 테이블에 계산 추가

PowerPivot 통합 문서에서 지원되는 데이터 형식

관련 자료

DAX(Data Analysis Expressions) 참조