컨텍스트를 사용하면 동적 분석을 수행할 수 있습니다. 이 경우 수식의 결과가 현재 행 또는 셀 선택 영역과 관련 데이터를 반영하도록 변경됩니다. 컨텍스트를 이해하고 컨텍스트를 효과적으로 사용하는 것은 고성능 수식 작성, 동적 분석 및 수식의 문제 해결에 매우 중요합니다.
이 섹션에서는 행 컨텍스트, 쿼리 컨텍스트 및 필터 컨텍스트와 같은 다양한 유형의 컨텍스트를 정의합니다. 계산 열 및 피벗 테이블의 수식에 대해 컨텍스트를 평가하는 방법을 설명합니다.
이 문서의 마지막 부분에서는 컨텍스트에 따라 수식의 결과가 어떻게 변하는지 보여 주는 자세한 예제에 대한 링크를 제공합니다.
컨텍스트 이해
파워 피벗 수식은 피벗 테이블에 적용된 필터, 테이블 간의 관계 및 수식에 사용되는 필터의 영향을 받을 수 있습니다. 컨텍스트를 사용하면 동적 분석을 수행할 수 있습니다. 컨텍스트를 이해하는 것은 수식을 빌드하고 문제를 해결하는 데 중요합니다.
행 컨텍스트, 쿼리 컨텍스트 및 필터 컨텍스트와 같은 다양한 유형의 컨텍스트가 있습니다.
행 컨텍스트를 "현재 행"으로 간주할 수 있습니다. 계산 열을 만든 경우 행 컨텍스트는 각 개별 행의 값과 현재 행과 관련된 열의 값으로 구성됩니다. 현재 행에서 값을 가져와서 전체 테이블에 대해 작업을 수행하는 동안 해당 값을 사용하는 일부 함수(EARLIER 및 EARLIEST)도 있습니다.
쿼리 컨텍스트는 행 및 열 머리글에 따라 피벗 테이블의 각 셀에 대해 암시적으로 생성된 데이터의 하위 집합을 나타냅니다.
필터 컨텍스트는 행에 적용되었거나 수식 내의 필터 식에 의해 정의된 필터 제약 조건에 따라 각 열에 허용되는 값 집합입니다.
행 컨텍스트
계산 열에 수식을 만드는 경우 해당 수식의 행 컨텍스트에는 현재 행에 있는 모든 열의 값이 포함됩니다. 테이블이 다른 테이블과 관련된 경우 콘텐츠에는 현재 행과 관련된 다른 테이블의 모든 값도 포함됩니다.
예를 들어 동일한 테이블의 두 열을 함께 추가하는 계산 열 =[Freight] + [Tax]를 만듭니다. 이 수식은 동일한 행의 값을 자동으로 참조하는 Excel 테이블의 수식처럼 동작합니다. 테이블은 범위와 다릅니다. 범위 표기법을 사용하여 현재 행 앞의 행에서 값을 참조할 수 없으며 테이블이나 셀에서 임의의 단일 값을 참조할 수 없습니다. 항상 테이블 및 열로 작업해야 합니다.
행 컨텍스트는 테이블 간의 관계를 자동으로 따라 현재 행과 연결된 관련 테이블의 행을 결정합니다.
예를 들어 다음 수식은 RELATED 함수를 사용하여 주문이 배송된 지역에 따라 관련 테이블에서 세금 값을 가져옵니다. 세금 값은 현재 테이블의 지역에 대한 값을 사용하여 관련 테이블에서 지역을 조회한 다음 관련 테이블에서 해당 지역의 세율을 가져오면 결정됩니다.
= [화물] + RELATED('Region'[TaxRate])
이 수식은 지역 테이블에서 현재 지역의 세율을 가져옵니다. 테이블을 연결하는 키를 알거나 지정할 필요가 없습니다.
여러 행 컨텍스트
또한 DAX에는 테이블에 대한 계산을 반복하는 함수가 포함됩니다. 이러한 함수에는 여러 개의 현재 행과 현재 행 컨텍스트가 있을 수 있습니다. 프로그래밍 측면에서 내부 및 외부 루프를 통해 재귀하는 수식을 만들 수 있습니다.
예를 들어 통합 문서에 Products 테이블과 Sales 테이블이 포함되어 있다고 가정합니다. 여러 제품과 관련된 트랜잭션으로 가득 찬 전체 판매 테이블을 살펴보고 하나의 트랜잭션에서 각 제품에 대해 주문된 최대 수량을 찾을 수 있습니다.
Excel에서 이 계산에는 데이터가 변경된 경우 다시 작성해야 하는 일련의 중간 요약이 필요합니다. Excel의 파워 사용자인 경우 작업을 수행하는 배열 수식을 작성할 수 있습니다. 또는 관계형 데이터베이스에서 중첩된 하위 선택을 작성할 수 있습니다.
그러나 DAX를 사용하면 올바른 값을 반환하는 단일 수식을 빌드할 수 있으며 테이블에 데이터를 추가할 때마다 결과가 자동으로 업데이트됩니다.
=MAXX(FILTER(Sales,[ProdKey]=EARLIER([ProdKey])),Sales[OrderQty])
이 수식에 대한 자세한 연습은 EARLIER 함수를 참조하세요.
즉, EARLIER 함수는 현재 작업 이전의 작업에서 행 컨텍스트를 저장합니다. 함수는 항상 두 개의 컨텍스트 집합을 메모리에 저장합니다. 한 컨텍스트 집합은 수식의 내부 루프에 대한 현재 행을 나타내고 다른 컨텍스트 집합은 수식의 외부 루프에 대한 현재 행을 나타냅니다. DAX는 복잡한 집계를 만들 수 있도록 두 루프 간에 값을 자동으로 공급합니다.
쿼리 컨텍스트
쿼리 컨텍스트는 수식에 대해 암시적으로 검색되는 데이터의 하위 집합을 나타냅니다. 측정값 또는 기타 값 필드를 피벗 테이블의 셀에 놓으면 파워 피벗 엔진은 행 및 열 머리글, 슬라이서 및 보고서 필터를 검사하여 컨텍스트를 확인합니다. 그런 다음 파워 피벗 피벗 테이블의 각 셀을 채우는 데 필요한 계산을 합니다. 검색되는 데이터 집합은 각 셀에 대한 쿼리 컨텍스트입니다.
수식을 배치하는 위치에 따라 컨텍스트가 변경 될 수 있으므로 수식의 결과는 많은 그룹화 및 필터가 있는 피벗 테이블의 수식을 사용하는지 또는 필터와 최소한의 컨텍스트가 없는 계산 열에서 수식을 사용하는지에 따라 변경됩니다.
예를 들어 Sales 테이블의 Profit 열에 있는 값을 합산하는 이 간단한 수식을 만든다고 가정해 보겠습니다.
=SUM('Sales'[Profit])
Sales 테이블 내의 계산 열에서 이 수식을 사용하는 경우 수식의 쿼리 컨텍스트는 항상 Sales 테이블의 전체 데이터 집합이므로 수식의 결과는 전체 테이블에 대해 동일합니다. 결과는 모든 지역, 모든 제품, 모든 연도 등에 대한 수익을 얻을 수 있습니다.
그러나 일반적으로 동일한 결과를 수백 번 보고 싶지는 않지만 특정 연도, 특정 국가 또는 지역, 특정 제품 또는 이들의 일부 조합에 대한 수익을 얻고 총합계를 구하려고 합니다.
피벗 테이블에서는 열 및 행 머리글을 추가하거나 제거하고 슬라이서를 추가하거나 제거하여 컨텍스트를 쉽게 변경할 수 있습니다. 위의 수식과 같은 수식을 측정값으로 만든 다음 피벗 테이블에 놓을 수 있습니다. 피벗 테이블에 열 또는 행 머리글을 추가할 때마다 측정값이 평가되는 쿼리 컨텍스트를 변경합니다. 조각화 및 필터링 작업도 컨텍스트에 영향을 줍니다. 따라서 피벗 테이블에 사용되는 동일한 수식은 각 셀에 대해 다른 쿼리 컨텍스트에서 평가됩니다.
필터 컨텍스트
필터 컨텍스트는 수식에 인수를 사용하여 열 또는 테이블에 허용되는 값 집합에 필터 제약 조건을 지정할 때 추가됩니다. 필터 컨텍스트는 행 컨텍스트 또는 쿼리 컨텍스트와 같은 다른 컨텍스트 위에 적용됩니다.
예를 들어 피벗 테이블은 쿼리 컨텍스트의 이전 섹션에서 설명한 대로 행 및 열 머리글에 따라 각 셀의 값을 계산합니다. 그러나 피벗 테이블에 추가하는 측정값 또는 계산 열 내에서 필터 식을 지정하여 수식에 사용되는 값을 제어할 수 있습니다. 특정 열에 대한 필터를 선택적으로 지울 수도 있습니다.
수식 내에서 필터를 만드는 방법에 대한 자세한 내용은 필터 함수를 참조하세요.
총합계를 만들기 위해 필터를 지울 수 있는 방법에 대한 예제는 ALL 함수를 참조하세요.
수식 내에서 필터를 선택적으로 지우고 적용하는 방법에 대한 예제는 ALLEXCEPT 함수를 참조하세요.
따라서 수식 결과를 해석할 때 필터 컨텍스트를 인식할 수 있도록 피벗 테이블에서 사용되는 측정값 또는 수식의 정의를 검토해야 합니다.
수식에서 컨텍스트 확인
수식을 만들 때 excel에 대한 파워 피벗 먼저 일반 구문을 확인한 다음, 현재 컨텍스트에서 가능한 열 및 테이블에 대해 제공하는 열 및 테이블의 이름을 확인합니다. 파워 피벗 수식에 지정된 열과 테이블을 찾을 수 없는 경우 오류가 발생합니다.
컨텍스트는 통합 문서에서 사용 가능한 테이블, 테이블 간의 관계 및 적용된 필터를 사용하여 이전 섹션에 설명된 대로 결정됩니다.
예를 들어 일부 데이터를 새 테이블로 방금 가져왔고 필터를 적용하지 않은 경우 테이블의 전체 열 집합은 현재 컨텍스트의 일부입니다. 관계별로 연결된 테이블이 여러 개 있고 열 머리글을 추가하고 슬라이서를 사용하여 필터링된 피벗 테이블에서 작업하는 경우 컨텍스트에는 관련 테이블과 데이터에 대한 필터가 포함됩니다.
컨텍스트는 수식 문제를 해결하기 어렵게 만들 수 있는 강력한 개념입니다. 간단한 수식 및 관계로 시작하여 컨텍스트의 작동 방식을 확인하고 피벗 테이블에서 간단한 수식을 실험하는 것이 좋습니다. 다음 섹션에서는 수식이 다양한 유형의 컨텍스트를 사용하여 결과를 동적으로 반환하는 방법에 대한 몇 가지 예제도 제공합니다.
수식의 컨텍스트 예제
-
RELATED 함수는 현재 행의 컨텍스트를 확장하여 관련 열에 값을 포함합니다. 이렇게 하면 조회를 수행할 수 있습니다. 이 항목의 예제에서는 필터링 및 행 컨텍스트의 상호 작용을 보여 줍니다.
-
FILTER 함수를 사용하면 현재 컨텍스트에 포함할 행을 지정할 수 있습니다. 이 항목의 예제에서는 집계를 수행하는 다른 함수 내에 필터를 포함하는 방법도 보여 줍니다.
-
ALL 함수는 수식 내에서 컨텍스트를 설정합니다. 쿼리 컨텍스트의 결과로 적용되는 필터를 재정의하는 데 사용할 수 있습니다.
-
ALLEXCEPT 함수를 사용하면 지정한 필터를 제외한 모든 필터를 제거할 수 있습니다. 두 topics 모두 수식을 빌드하고 복잡한 컨텍스트를 이해하는 예제를 포함합니다.
-
EARLIER 및 EARLIEST 함수를 사용하면 내부 루프의 값을 참조하면서 계산을 수행하여 테이블을 반복할 수 있습니다. 재귀 개념과 내부 및 외부 루프를 잘 알고 있는 경우 EARLIER 및 EARLIEST 함수가 제공하는 성능을 높이 평가합니다. 이러한 개념을 접하는 경우 예제의 단계에 따라 계산에서 내부 및 외부 컨텍스트가 어떻게 사용되는지 확인해야 합니다.
참조 무결성
이 섹션에서는 관계로 연결된 파워 피벗 테이블에서 누락된 값과 관련된 몇 가지 고급 개념에 대해 설명합니다. 이 섹션은 여러 테이블과 복잡한 수식이 있는 통합 문서가 있고 결과를 이해하는 데 도움이 되도록 하는 경우에 유용할 수 있습니다.
관계형 데이터 개념을 처음 접하는 경우 먼저 소개 항목인 관계 개요를 읽는 것이 좋습니다.
참조 무결성 및 파워 피벗 관계
파워 피벗 유효한 관계를 정의하기 위해 두 테이블 간에 참조 무결성을 적용할 필요가 없습니다. 대신 각 일대다 관계의 "일" 끝에 빈 행이 만들어지고 관련 테이블의 일치하지 않는 모든 행을 처리하는 데 사용됩니다. SQL 외부 조인으로 효과적으로 동작합니다.
피벗 테이블에서 관계의 한쪽별로 데이터를 그룹화하면 관계의 여러 쪽에 있는 일치하지 않는 모든 데이터가 함께 그룹화되고 빈 행 머리글이 있는 합계에 포함됩니다. 빈 제목은 "알 수 없는 멤버"와 거의 같습니다.
알 수 없는 멤버 이해
알 수 없는 멤버의 개념은 SQL Server Analysis Services 같은 다차원 데이터베이스 시스템을 사용했다면 익숙할 것입니다. 용어가 새로운 경우 다음 예제에서는 알 수 없는 멤버가 무엇이며 계산에 미치는 영향을 설명합니다.
각 저장소의 월별 매출을 합산하는 계산을 만들고 있지만 Sales 테이블의 열에 저장소 이름 값이 누락되었다고 가정해 보겠습니다. Store 및 Sales 테이블이 스토어 이름으로 연결되어 있다는 점을 감안할 때 수식에서 어떤 일이 발생할 것으로 예상하시겠습니까? 피벗 테이블 그룹은 기존 저장소와 관련이 없는 판매 수치를 어떻게 그룹화하거나 표시해야 하나요?
이 문제는 팩트 데이터의 큰 테이블이 팩트 분류 및 계산에 사용되는 저장소, 지역 및 기타 특성에 대한 정보를 포함하는 차원 테이블과 논리적으로 관련되어야 하는 데이터 웨어하우스의 일반적인 문제입니다. 문제를 resolve 위해 기존 엔터티와 관련이 없는 새 팩트를 알 수 없는 멤버에 일시적으로 할당됩니다. 따라서 관련 없는 팩트가 빈 제목 아래 피벗 테이블에 그룹화되어 표시됩니다.
빈 값과 빈 행의 처리
빈 값은 알 수 없는 멤버를 수용하기 위해 추가된 빈 행과 다릅니다. 빈 값은 null, 빈 문자열 및 기타 누락된 값을 나타내는 데 사용되는 특수 값입니다. 빈 값 및 기타 DAX 데이터 형식에 대한 자세한 내용은 데이터 모델의 데이터 형식을 참조하세요.