테이블 형식 모델의 DAX

적용 대상: SQL Server Analysis Services Azure Analysis Services 패브릭/Power BI Premium

DAX(데이터 분석 식)는 Excel의 Analysis Services, Power BI 및 Power Pivot에서 사용자 지정 계산을 만드는 데 사용되는 수식 언어입니다. DAX 수식에는 테이블 및 열의 데이터에 대해 고급 계산을 수행하기 위한 함수, 연산자 및 값이 포함됩니다.

DAX는 Excel의 Analysis Services, Power BI 및 Power Pivot에서 사용되지만 이 문서는 Visual Studio에서 작성된 Analysis Services 테이블 형식 모델 프로젝트에 더 많이 적용됩니다.

계산 열, 계산 테이블, 측정값 및 행 필터의 DAX 수식

테이블 형식 모델의 경우 DAX 수식은 계산 열, 측정값 및 행 필터에 사용됩니다.

계산 열

계산 열은 모델 디자이너에서 기존 테이블에 추가한 다음, 열 값을 정의하는 DAX 수식을 만드는 열입니다.

참고

DirectQuery 모드를 사용하여 관계형 데이터 원본에서 데이터를 검색하는 모델에서는 계산 열이 지원되지 않습니다.

계산 열에 올바른 DAX 수식이 포함되어 있으면 수식이 입력되자마자 각 행에 대한 값이 계산됩니다. 그런 다음 이 값은 데이터베이스에 저장됩니다. 예를 들어 Date 테이블에서 수식 =[Calendar Year] & " Q" & [Calendar Quarter] 를 수식 입력줄에 입력하면 같은 Date 테이블의 Calendar Year 열에서 값을 가져와 공백과 대문자 Q를 더한 다음 같은 Date 테이블의 Calendar Quarter 열의 값을 추가하여 테이블의 각 행에 대한 값이 계산됩니다. 계산 열의 각 행에 대한 결과는 즉시 계산되고, 예를 들어 2010 Q1과 같이 표시됩니다. 데이터를 다시 처리하는 경우에만 열 값이 다시 계산됩니다.

자세한 내용은 계산 열을 참조하세요.

계산된 테이블

계산된 테이블은 동일한 모델의 다른 테이블 전체 또는 일부에서 파생된 DAX 쿼리 또는 식을 기반으로 계산된 개체입니다.

자세한 내용은 계산된 테이블을 참조하세요.

측정값

측정값은 컨텍스트에 따라 결과가 변경되는 동적 수식입니다. 측정값은 Power BI 보고서 또는 Excel 피벗 테이블 또는 피벗 차트와 같은 여러 특성을 사용하여 모델 데이터 결합 및 필터링을 지원하는 보고 형식에 사용됩니다. 측정값은 Visual Studio의 모델 디자이너에서 측정값 표(및 수식 입력줄)를 사용하여 모델 작성자가 정의합니다.

측정값의 수식에서는 COUNT 또는 SUM과 같은 자동 합계 기능을 사용하여 자동으로 만든 표준 집계 함수를 사용할 수도 있고 DAX를 사용하여 고유한 수식을 정의할 수도 있습니다. 수식 입력줄에서 측정값에 대한 수식을 정의하는 경우 도구 설명 기능에 총 현재 컨텍스트에 대한 결과의 미리 보기가 표시되지만 결과가 어느 곳에도 즉시 출력되지는 않습니다. 기타 측정값 정보도 속성 창에 표시됩니다.

(필터링된) 계산 결과를 즉시 볼 수 없는 이유는 측정값의 결과가 컨텍스트 없이 결정될 수 없기 때문입니다. 측정값을 계산하려면 각 셀과 관련된 데이터를 검색한 다음 각 셀에 대한 식을 계산하는 데 필요한 컨텍스트를 제공할 수 있는 보고 클라이언트 애플리케이션이 있어야 합니다. 해당 클라이언트는 Excel 피벗 테이블 또는 피벗 차트, Power BI 보고서 또는 MDX 쿼리일 수 있습니다. 보고 클라이언트에 관계없이 별도의 쿼리가 결과의 각 셀에 대해 실행됩니다. 즉, 피벗 테이블에 있는 행과 열 머리글의 각 조합 또는 Power BI 보고서에서 슬라이서와 필터의 각 선택은 측정값이 계산되는 다른 데이터의 하위 집합을 생성합니다. 예를 들어 수식 Total Sales:=SUM([Sales Amount])이 있는 측정값에서 사용자가 피벗 테이블의 값 창에 TotalSales 측정값을 배치한 다음 DimProduct 테이블의 DimProductCategory 열을 필터 창에 배치하면 각 제품 범주에 대해 Sales Amount의 합계가 계산되고 표시됩니다.

계산 열 및 행 필터와 달리 측정값에 대한 구문에는 수식 앞에 측정값 이름이 포함됩니다. 방금 제공한 예제에서는 수식 앞에 Total Sales: 이름이 나타납니다. 측정값을 만들면 이름과 해당 정의가 보고 클라이언트 애플리케이션 필드 목록에 표시되며 큐브 뷰 및 역할에 따라 모델의 모든 사용자가 측정값을 사용할 수 있습니다.

자세한 내용은 측정값을 참조하세요.

행 필터

행 필터는 특정 역할의 멤버가 볼 수 있는 테이블의 행을 정의합니다. DAX 수식을 사용하여 모델의 각 테이블에 대해 행 필터를 만들 수 있습니다. 행 필터는 Visual Studio에서 역할 관리자를 사용하여 특정 역할에 대해 만들어집니다. SSMS(SQL Server Management Studio 역할 속성)를 사용하여 배포된 모델에 대해 행 필터를 정의할 수도 있습니다.

행 필터에서 부울 TRUE/FALSE 조건으로 계산되어야 하는 DAX 수식은 해당 역할의 멤버가 쿼리 결과로 반환할 수 있는 행을 정의합니다. DAX 수식에 포함되지 않은 행은 반환할 수 없습니다. 예를 들어 Sales 역할 멤버의 경우 Customers 테이블에 DAX 수식인 =Customers[Country] = "USA"가 있으면 Sales 역할의 멤버는 미국의 고객 데이터만 볼 수 있고 SUM 등의 집계는 미국의 고객에게만 반환됩니다.

DAX 수식을 사용하여 행 필터를 정의할 때 허용되는 행 집합을 만듭니다. 이렇게 해도 다른 행에 대한 액세스를 거부하지 않으며, 허용된 행 집합의 일부로 반환되지만 않습니다. 다른 역할을 통해 DAX 수식에서 제외된 행에 대한 액세스를 허용할 수 있습니다. 사용자가 다른 역할의 멤버인 경우 이 역할의 행 필터에서 특정 행 집합에 대한 액세스를 허용하면 사용자가 해당 행에 대한 데이터를 볼 수 있습니다.

행 필터는 지정된 행과 관련 행에 적용됩니다. 테이블에 여러 관계가 있으면 필터는 활성 관계에 대한 보안을 적용합니다. 행 필터는 관련 테이블에 대해 정의된 다른 행 필터와 교차됩니다.

자세한 내용은 역할의 역할 관리자 대화 상자를 사용하여 역할을 정의할 수 있습니다.

DAX 데이터 형식

다양한 데이터 형식을 지원하는 여러 데이터 원본의 데이터를 모델로 가져올 수 있습니다. 데이터를 모델로 가져올 때 데이터는 테이블 형식 모델 데이터 형식 중 하나로 변환됩니다. 계산에서 모델 데이터를 사용하면 해당 데이터는 계산 출력 및 지속을 위해 DAX 데이터 형식으로 변환됩니다. DAX 수식을 만들면 수식에 사용된 조건이 자동으로 반환되는 값 데이터 형식을 결정합니다.

테이블 형식 모델 및 DAX는 다음과 같은 데이터 형식을 지원합니다.

모델의 데이터 형식 DAX의 데이터 형식 설명
정수 64비트(8바이트) 정수 값 1, 2 소수 자릿수가 없는 숫자입니다. 정수는 양수나 음수가 될 수 있지만 -9,223,372,036,854,775,808(-2^63)부터 9,223,372,036,854,775,807(2^63-1) 사이의 정수여야 합니다.
10진수 64비트(8바이트) 실수 1, 2 실수는 소수 자리를 가질 수 있는 수입니다. 실수는 광범위한 값을 포함합니다.

-1.79E +308에서 -2.23E -308 사이의 음수 값

0

2.23E -308에서 1.79E + 308 사이의 양수 값

하지만 유효 숫자 수는 열일곱 자릿수로 제한됩니다.
Boolean Boolean True 또는 False 값입니다.
텍스트 문자열 유니코드 문자 데이터 문자열입니다. 텍스트 형식으로 표시된 문자열, 숫자 또는 날짜가 될 수 있습니다.
날짜 날짜/시간 허용되는 날짜-시간 표현의 날짜 및 시간

유효한 날짜는 1900년 3월 1일 이후의 모든 날짜입니다.
통화 통화 통화 데이터 형식에는 -922,337,203,685,477.5808부터 922,337,203,685,477.5807 사이의 소수 자릿수가 고정된 네 자릿수를 사용할 수 있습니다.
해당 없음 비어 있음 공백은 SQL null을 나타내거나 대체하는 DAX의 데이터 형식입니다. BLANK 함수를 사용하여 공백을 만들고 논리 함수 ISBLANK를 사용하여 공백을 테스트할 수 있습니다.

테이블 형식 모델에는 많은 DAX 함수에 입력 또는 출력으로 사용되는 테이블 데이터 형식도 포함되어 있습니다. 예를 들어 FILTER 함수는 테이블을 입력으로 사용하여 필터 조건을 충족하는 행만 포함하는 다른 테이블을 출력합니다. 집계 함수와 테이블 함수를 결합하면 동적으로 정의된 데이터 집합을 대상으로 복잡한 계산을 수행할 수 있습니다.

데이터 형식은 대개 자동으로 설정되지만, 데이터 형식과 해당 형식이 DAX 수식에 적용되는 방식을 이해하는 것이 중요합니다. 수식의 오류나 예기치 못한 결과는 인수에 지정된 데이터 형식에 사용할 수 없는 특정 연산자를 사용하여 발생하는 경우가 많습니다. 예를 들어 수식 = 1 & 2는 결과로 문자열 12를 반환합니다. 하지만 수식 = "1" + "2"는 정수 3을 반환합니다.

테이블 형식 모델의 데이터 형식 및 DAX에서 데이터 형식의 명시적 및 암시적 변환에 대한 자세한 내용은 지원되는 데이터 형식을 참조하세요.

DAX 연산자

DAX 언어는 수식에서 다음과 같은 네 가지 유형의 계산 연산자를 사용합니다.

  • 값을 비교하고 논리적 TRUE\FALSE 값을 반환하는 비교 연산자
  • 숫자 값을 반환하는 산술 계산을 수행하는 산술 연산자
  • 둘 이상의 텍스트 문자열을 결합하는 텍스트 연결 연산자
  • 둘 이상의 식을 결합하여 단일 결과를 반환하는 논리 연산자

DAX 수식에서 사용되는 연산자에 대한 자세한 내용은 DAX 연산자 참조를 참조하세요.

DAX 수식

DAX 수식은 계산 열 및 측정값에서 계산을 만들고 행 수준 필터를 사용하여 데이터를 보호하는데 필수적입니다. 계산 열 및 측정값에 대한 수식을 만들려면 모델 디자이너 창이나 DAX 편집기의 맨 위에 있는 수식 입력줄을 사용합니다. 행 필터에 대한 수식을 만들려면 역할 관리자 대화 상자를 사용합니다. 이 섹션에서는 DAX 수식의 기본 사항을 이해하는 데 활용할 수 있는 정보를 제공합니다.

수식 기본 사항

DAX를 사용하면 테이블 형식 모델 작성자가 계산 열의 일부로, 그리고 직접 표시되지는 않지만 테이블과 연결된 측정값으로 두 모델 테이블에서 사용자 지정 계산을 정의할 수 있습니다. 또한 DAX를 사용하면 모델 작성자가 특정 테이블 또는 관련된 테이블에서 연결된 역할의 멤버 사용자가 쿼리할 수 있는 행을 정의하는 부울 값을 반환하는 계산을 만들어 데이터를 보호할 수 있습니다.

DAX 수식은 매우 간단하거나 아주 복잡할 수 있습니다. 다음 표에는 계산 열에 사용할 수 있는 간단한 수식의 예가 몇 가지 있습니다.

Formula 설명
=TODAY() 열의 모든 행에 오늘 날짜를 삽입합니다.
=3 열의 모든 행에 값 3을 삽입합니다.
=[Column1] + [Column2] [Column1]과 [Column2]의 같은 행에 값을 추가하고, 동일한 행의 계산 열에 값을 넣습니다.

만드는 수식이 간단하든 복잡하든 관계없이 수식을 작성할 때는 다음 단계를 사용할 수 있습니다.

  1. 각 수식은 등호로 시작해야 합니다.

  2. 함수 이름을 입력 또는 선택하거나 식을 입력할 수 있습니다.

  3. 원하는 함수 또는 이름의 처음 몇 글자를 입력하면 사용 가능한 함수, 테이블 및 열 목록이 자동 완성 기능을 통해 표시됩니다. TAB 키를 눌러서 자동 완성 목록에 있는 항목을 수식에 추가할 수 있습니다.

    Fx 단추를 클릭하여 사용 가능한 함수 목록을 표시할 수도 있습니다. 드롭다운 목록에서 함수를 선택하려면 화살표 키를 사용하여 항목을 강조 표시하고 확인을 클릭하여 수식에 함수를 추가합니다.

  4. 가능한 테이블 및 열의 드롭다운 목록에서 인수를 선택하거나 값을 입력하여 함수에 인수를 제공합니다.

  5. 구문 오류가 없는지 확인하고, 모든 괄호가 닫혀 있고 열, 테이블 및 값이 올바르게 참조되는지 확인합니다.

  6. ENTER 키를 눌러 수식을 적용합니다.

참고

계산 열에 수식을 입력하는 즉시 수식의 유효성이 검사되고 열에 값이 채워집니다. 측정값에서 Enter 키를 누르면 테이블과 함께 측정값 표에 측정값 정의가 저장됩니다. 수식이 잘못된 경우 오류가 표시됩니다.

다음 예의 Days in Current Quarter 측정값에서는 좀 더 복잡한 수식을 볼 수 있습니다.

Days in Current Quarter:=COUNTROWS( DATESBETWEEN( 'Date'[Date], STARTOFQUARTER( LASTDATE('Date'[Date])), ENDOFQUARTER('Date'[Date])))  

이 측정값은 불완전한 기간과 이전 기간 사이의 비교 비율을 만드는 데 사용됩니다. 수식은 경과된 기간의 비율을 고려하여 이전 기간의 동일한 규모와 비교해야 합니다. 이 경우 [Days Current Quarter to Date]/[Days in Current Quarter]는 현재 기간에서 경과된 비율을 제공합니다.

이 수식에는 다음과 같은 요소가 포함되어 있습니다.

수식 요소 설명
Days in Current Quarter:= 측정값의 이름입니다.
= 등호(=)는 수식을 시작합니다.
COUNTROWS COUNTROWS 함수는 Date 테이블의 행 수를 계산합니다.
() 열기 및 닫기 괄호는 인수를 지정합니다.
DATESBETWEEN DATESBETWEEN 함수는 Date 테이블의 Date 열에 있는 각 값의 마지막 날짜 사이의 일 수를 반환합니다.
'Date' Date 테이블을 지정합니다. 테이블은 작은따옴표로 묶여 있습니다.
[Date] Date 테이블의 Date 열을 지정합니다. 열은 대괄호로 묶여 있습니다.
,
STARTOFQUARTER STARTOFQUARTER 함수는 분기의 시작 날짜를 반환합니다.
LASTDATE LASTDATE 함수는 분기의 마지막 날짜를 반환합니다.
'Date' Date 테이블을 지정합니다.
[Date] Date 테이블의 Date 열을 지정합니다.
,
ENDOFQUARTER ENDOFQUARTER 함수
'Date' Date 테이블을 지정합니다.
[Date] Date 테이블의 Date 열을 지정합니다.

수식 자동 완성 사용

모델 디자이너의 수식 입력줄과 역할 관리자 대화 상자의 수식 행 필터 창에는 자동 완성 기능이 제공됩니다. 자동 완성을 사용하면 수식의 각 요소에 대한 옵션이 제공되므로 올바른 수식 구문을 쉽게 입력할 수 있습니다.

  • 중첩된 함수가 있는 기존 수식의 중간에 수식 자동 완성 기능을 사용할 수 있습니다. 삽입 지점 바로 전 텍스트는 드롭다운 목록의 값을 표시하는 데 사용되며 삽입 지점 이후의 모든 텍스트는 변경되지 않은 상태로 유지됩니다.

  • 자동 완성 기능은 함수의 닫는 괄호를 추가하거나 괄호를 자동으로 일치시키지 않습니다. 각 함수의 구문이 올바른지 확인해야 합니다. 구문이 올바르지 않으면 수식을 저장하거나 사용할 수 없습니다.

수식에 여러 함수 사용

한 함수의 결과를 다른 함수의 인수로 사용하도록 함수를 중첩할 수 있습니다. 계산 열에서 함수의 64 수준까지 중첩할 수 있습니다. 그러나 함수를 중첩하면 수식을 만들거나 수식의 문제를 해결하기가 어려워질 수 있습니다.

여러 함수가 중첩 함수로만 사용되도록 설계되었습니다. 이러한 함수는 테이블을 반환합니다. 테이블은 결과로 직접 저장할 수 없으며 테이블 함수에 대한 입력으로 제공해야 합니다. 예를 들어 SUMX, AVERAGEX 및 MINX 함수의 경우 첫 번째 인수로 테이블을 사용해야 합니다.

참고

열 사이의 종속성에 필요한 여러 계산 때문에 성능이 저하되지 않도록 측정값 내에서는 함수 중첩에 몇 가지 제한이 있습니다.

DAX 함수

이 섹션에서는 DAX에서 지원되는 함수 유형 에 대한 개요를 제공합니다. 자세한 내용은 DAX 함수 참조를 참조하세요.

DAX는 날짜 및 시간을 사용하여 계산을 수행하고, 조건 값을 만들고, 문자열을 사용하고, 관계를 기반으로 조회를 수행하는 다양한 함수와 테이블을 반복하여 재귀적 계산을 수행하는 기능을 제공합니다. Excel 수식에 익숙한 경우 많은 함수가 비슷해 보이겠지만 DAX 수식에는 다음과 같은 중요한 차이가 있습니다.

  • DAX 함수는 항상 전체 열 또는 테이블을 참조합니다. 테이블 또는 열의 특정 값만 사용하려면 수식에 필터를 추가하면 됩니다.

  • 행 단위로 계산을 사용자 지정해야 하는 경우 DAX에서 제공하는 함수를 통해 현재 행 값이나 관련 값을 일종의 매개 변수로 사용하여 컨텍스트에 따라 달라지는 계산을 수행할 수 있습니다. 이러한 함수의 작동 방식을 이해하려면 이 문서의 뒷부분에 있는 DAX 수식의 컨텍스트를 참조하세요.

  • DAX에는 값보다는 테이블을 반환하는 많은 함수가 포함되어 있습니다. 테이블은 보고 클라이언트에서 표시되지 않지만 다른 함수에 대한 입력을 제공하는 데 사용됩니다. 예를 들어 테이블을 검색한 다음 테이블에 있는 고유 값을 세거나 필터링된 테이블 또는 열에 대해 동적 합계를 계산할 수 있습니다.

  • DAX 함수에는 다양한 시간 인텔리전스 함수가 포함되어 있습니다. 이러한 함수를 통해 날짜 범위를 정의하거나 선택하고 이러한 날짜 또는 범위를 기반으로 동적 계산을 수행할 수 있습니다. 예를 들어 병렬 기간에 대한 합계를 비교할 수 있습니다.

날짜 및 시간 함수

DAX의 날짜 및 시간 함수는 Microsoft Excel의 날짜 및 시간 함수와 비슷합니다. 그러나 DAX 함수는 Microsoft SQL Server 사용하는 날짜/시간 데이터 형식을 기반으로 합니다. 자세한 내용은 날짜 및 시간 함수(DAX)를 참조하세요.

필터 함수

DAX의 필터 함수를 사용하면 특정 데이터 형식을 반환하고, 관련 테이블의 값을 조회하고, 관련 값을 기준으로 필터링할 수 있습니다. 조회 함수는 데이터베이스와 같이 테이블 및 관계를 사용하여 작동됩니다. 필터링 함수를 사용하면 데이터 컨텍스트를 조작하여 동적 계산을 만들 수 있습니다. 자세한 내용은 함수 필터링(DAX)을 참조하세요.

정보 함수

정보 함수는 인수로 제공되는 셀 또는 행을 살펴보고 값이 필요한 형식과 일치하는지 여부를 알려 줍니다. 예를 들어 ISERROR 함수는 참조하는 값에 오류가 포함되어 있는 경우 TRUE를 반환합니다. 자세한 내용은 DAX(정보 함수)를 참조하세요.

논리 함수

논리 함수는 식에 대해 실행되어 식의 값에 대한 정보를 반환합니다. 예를 들어 TRUE 함수를 사용하면 평가 중인 식이 TRUE 값을 반환하는지 여부를 알 수 있습니다. 자세한 내용은 논리 함수(DAX)를 참조하세요.

수치 연산 및 삼각 함수

DAX의 수치 연산 함수는 Excel 수치 연산 및 삼각 함수와 매우 비슷합니다. DAX 함수에서 사용하는 숫자 데이터 형식에는 사소한 몇 가지 차이점이 있습니다. 자세한 내용은 수학 및 삼각 함수(DAX)를 참조하세요.

기타 함수

이러한 함수는 대부분의 다른 함수가 속하는 범주로 정의할 수 없는 고유한 작업을 수행합니다. 자세한 내용은 기타 함수(DAX)를 참조하세요.

통계 함수

DAX는 집계를 수행하는 통계 함수를 제공 합니다. DAX에서는 합계와 평균을 만들거나 최소값과 최대값을 구할 수 있을 뿐 아니라 관련 테이블을 기준으로 집계를 수행하거나 만들기 전에 열을 필터링할 수도 있습니다. 자세한 내용은 통계 함수(DAX)를 참조하세요.

텍스트 함수

DAX의 텍스트 함수는 Excel의 텍스트 함수와 매우 비슷합니다. 문자열의 일부를 반환하거나, 문자열 내의 텍스트를 검색하거나, 문자열 값을 연결할 수 있습니다. DAX에서는 날짜, 시간 및 숫자의 형식을 제어하기 위한 함수도 제공합니다. 자세한 내용은 텍스트 함수(DAX)를 참조하세요.

시간 인텔리전스 함수

DAX에 제공되는 시간 인텔리전스 함수를 사용하면 달력과 날짜에 대한 기본 제공 정보를 사용하는 계산을 만들 수 있습니다. 집계 또는 계산과 함께 시간 및 날짜 범위를 사용하여 판매, 재고 등에 대해 의미 있는 기간별 비교를 빌드할 수 있습니다. 자세한 내용은 DAX(시간 인텔리전스 함수)를 참조하세요.

테이블 반환 함수

테이블을 출력하거나, 테이블을 입력으로 받아들이거나, 둘 다 수행하는 DAX 함수가 있습니다. 테이블에 열이 하나만 있을 수 있기 때문에 테이블 반환 함수는 단일 열도 입력으로 받아들입니다. DAX 수식을 최대한 활용하려면 이러한 테이블 반환 함수를 사용하는 방법을 이해하는 것이 중요합니다. DAX에는 다음과 같은 유형의 테이블 반환 함수가 있습니다.

필터 함수 - 현재 행과 관련된 열, 테이블 또는 값을 반환합니다.

집계 함수 - 테이블 행에 대한 모든 식을 집계합니다.

시간 인텔리전스 함수 - 날짜 테이블을 반환하거나 날짜 테이블을 사용하여 집계를 계산합니다.

DAX 수식의 컨텍스트

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

테이블 형식 모델의 수식은 다음과 같은 디자인 요소에 따라 각기 다른 컨텍스트에서 계산될 수 있습니다.

  • 피벗 테이블 또는 보고서에서 적용된 필터

  • 수식 내에 정의된 필터

  • 수식 내에서 특수 함수를 사용하여 지정된 관계

컨텍스트의 유형으로는 행 컨텍스트, 쿼리 컨텍스트필터 컨텍스트가 있습니다.

행 컨텍스트

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

예를 들어 Freight와 Tax라는 두 열의 값을 더하는 =[Freight] + [Tax]계산 열을 만든다고 가정합니다. 이 수식은 자동으로 지정된 열에 있는 현재 행의 값만 가져옵니다.

또한 행 컨텍스트는 DAX 수식을 사용하여 계산 열에 정의된 관계를 비롯하여 테이블 간에 정의된 모든 관계를 따라 현재 행과 연결된 관련 테이블의 행을 확인합니다.

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

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

이 수식은 Region 테이블에서 현재 지역의 세율을 가져와서 Freight 열의 값에 더합니다. DAX 수식에서 테이블을 연결하는 특정 관계를 알거나 지정할 필요는 없습니다.

여러 행 컨텍스트

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

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

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

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

이 수식에 대한 구체적인 연습은 EARLIER 함수(DAX)를 참조하세요.

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

쿼리 컨텍스트

쿼리 컨텍스트 는 수식에 대해 암시적으로 검색되는 데이터의 하위 집합을 참조합니다. 사용자가 측정값 또는 기타 값 필드를 피벗 테이블이나 테이블 형식 모델 기반의 보고서에 넣으면 엔진에서 행 머리글과 열 머리글, 슬라이서 및 보고서 필터를 검사하여 컨텍스트를 확인합니다. 그런 다음 필요한 쿼리가 데이터 원본에 대해 실행되어 올바른 데이터 하위 집합을 가져오고 수식으로 정의된 계산을 수행한 후 피벗 테이블 또는 보고서의 각 셀을 채웁니다. 검색되는 데이터 집합은 각 셀의 쿼리 컨텍스트입니다.

경고

DirectQuery 모드에 있는 모델에 대해 컨텍스트가 평가된 다음 올바른 데이터 하위 집합을 검색하고 결과를 계산하는 집합 작업이 SQL 문으로 변환됩니다. 그런 다음 해당 문이 관계형 데이터 저장소에 대해 직접 실행됩니다. 따라서 데이터를 가져오고 결과를 계산하는 방법이 달라도 컨텍스트 자체는 변경되지 않습니다.

컨텍스트는 수식을 배치하는 위치에 따라 변경되기 때문에 수식의 결과도 변경될 수 있습니다.

예를 들어 Sales 테이블의 Profit 열에 있는 값의 합계를 계산하는 수식인 =SUM('Sales'[Profit])을 만든다고 가정합니다. Sales 테이블 내의 계산 열에 이 수식을 사용하면, 수식의 쿼리 컨텍스트가 항상 Sales 테이블의 전체 데이터 세트이기 때문에 수식에 대한 결과가 전체 테이블에서 동일합니다. 결과에는 모든 지역, 모든 제품, 모든 연도 등의 수익이 포함됩니다.

그러나 사용자는 일반적으로 동일한 결과를 수백 번 보고 싶지 않지만 특정 연도, 특정 국가/지역, 특정 제품 또는 이들 조합에 대한 수익을 얻고 총합계를 구하려고 합니다.

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

필터 컨텍스트

필터 컨텍스트 는 관련 테이블에서 검색된 값이나 각 열에서 허용되는 값의 집합입니다. 디자이너 또는 표시 계층(보고서 및 피벗 테이블)에서 열에 필터를 적용할 수 있습니다. 수식 내의 필터 식으로 필터를 명시적으로 정의할 수도 있습니다.

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

테이블 형식 모델에서는 필터 컨텍스트를 만드는 다양한 방법이 있습니다. Power BI 보고서와 같이 모델을 사용할 수 있는 클라이언트의 컨텍스트 내에서 사용자는 행과 열 머리글에 슬라이서나 보고서 필터를 추가하여 즉석에서 필터를 만들 수 있습니다. 수식에서 직접 필터 식을 지정하여 관련 값을 지정하거나 입력으로 사용되는 테이블을 필터링하거나 계산에서 사용되는 값의 컨텍스트를 동적으로 가져올 수도 있습니다. 특정 열의 필터를 완전히 지우거나 선택적으로 지울 수도 있습니다. 이는 총합계를 계산하는 수식을 만들 때 매우 유용합니다.

수식 내에서 필터를 만드는 방법을 자세히 알아보려면 FILTER 함수(DAX)를 참조하세요.

필터를 지워서 총합계를 구하는 방법의 예는 ALL 함수(DAX)를 참조하세요.

수식 내에서 필터를 선택적으로 지우고 적용하는 방법의 예는 ALLEXCEPT 함수(DAX)를 참조하세요.

수식의 컨텍스트 확인

DAX 수식을 만들 때 수식은 먼저 유효한 구문인지 테스트된 다음 수식에 포함된 열과 테이블의 이름을 현재 컨텍스트에서 찾을 수 있는지 테스트됩니다. 수식으로 지정된 열이나 테이블을 찾을 수 없는 경우 오류가 반환됩니다.

유효성 검사(및 재계산 작업) 중의 컨텍스트는 이전 섹션에 설명된 대로 모델에서 사용 가능한 테이블, 테이블 간의 관계 및 적용된 필터를 사용하여 결정됩니다.

예를 들어 다른 테이블과 관련되지 않은 일부 데이터를 새 테이블로 가져오고 필터를 적용하지 않은 경우 현재 컨텍스트 는 테이블의 전체 열 집합입니다. 테이블이 다른 테이블과 관계로 연결되어 있으면 현재 컨텍스트에 관련 테이블이 포함됩니다. 테이블의 열을 슬라이서(및 경우에 따라 보고서 필터)가 있는 보고서에 추가하는 경우 수식의 컨텍스트는 보고서의 각 셀에 있는 데이터의 하위 집합입니다.

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

수식의 컨텍스트 예

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

FILTER 함수(DAX) 함수를 사용하여 현재 컨텍스트에 포함시킬 행을 지정할 수 있습니다. 이 문서의 예제에서는 집계를 수행하는 다른 함수 내에 필터를 포함하는 방법도 보여 줍니다.

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

ALLEXCEPT 함수(DAX) 함수를 사용하면 지정된 필터를 제외한 모든 필터를 제거할 수 있습니다. 두 문서에는 수식을 작성하고 복잡한 컨텍스트를 이해하는 예제가 포함되어 있습니다.

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

수식 및 테이블 형식 모델

Visual Studio의 모델 디자이너는 여러 데이터 테이블로 작업하고 테이블 형식 모델의 테이블을 연결할 수 있는 영역입니다. 이 모델 내에서 테이블은 공통 값(키)이 있는 열에서 관계에 의해 조인됩니다. 테이블 형식 모델을 통해 다른 테이블의 열에 값을 연결하고 더 유용한 계산을 만들 수 있습니다. 관계형 데이터베이스에서와 마찬가지로 많은 수준의 관련 테이블을 연결하고 이러한 테이블의 열을 결과에 사용할 수 있습니다.

예를 들어 판매 테이블, 제품 테이블 및 제품 범주 테이블을 연결하면 사용자가 피벗 테이블 및 보고서에서 열의 다양한 조합을 사용할 수 있습니다. 관련 필드를 사용하여 연결된 테이블을 필터링하거나 하위 집합에 대한 계산을 만들 수 있습니다. 관계형 데이터베이스에 익숙하지 않고 테이블 및 조인을 사용하는 경우 관계를 참조하세요.

테이블 형식 모델에는 테이블 간의 여러 관계가 지원됩니다. 혼동이나 잘못된 결과를 방지하기 위해 한 번에 한 관계만 활성 관계로 지정되지만 필요에 따라 활성 관계를 변경하여 계산에 데이터의 다양한 연결을 포함할 수 있습니다. USERELATIONSHIP 함수(DAX) 를 사용하면 특정 계산에 사용할 관계를 하나 이상 지정할 수 있습니다.

테이블 형식 모델에서는 다음과 같은 수식 디자인 규칙을 준수해야 합니다.

  • 관계를 통해 테이블을 연결할 경우 키로 사용된 두 열의 값이 일치하는지 확인해야 합니다. 그러나 참조 무결성이 적용되지 않으므로 키 열에 일치하지 않는 값이 있을 수 있으며 그래도 관계는 만들어집니다. 이 경우 빈 값이나 일치하지 않는 값이 있으면 수식 결과에 영향을 줄 수 있다는 점을 명심해야 합니다.

  • 관계를 사용하여 모델에서 테이블을 연결하면 수식이 계산되는 범위, 즉 컨텍스트가 확장됩니다. 새 테이블 또는 새 관계의 추가나 활성 관계의 변경으로 컨텍스트가 변경되면 예기치 않은 방식으로 결과가 변경될 수 있습니다. 자세한 내용은 이 문서의 앞부분에 있는 DAX 수식의 컨텍스트를 참조하세요.

테이블 및 열 작업

테이블 형식 모델의 테이블은 Excel 테이블과 비슷해 보이지만 데이터와 수식 작업을 수행하는 방식이 다릅니다.

  • 수식은 개별 셀, 범위 참조 또는 배열에서는 작동하지 않으며 테이블과 열에서만 작동합니다.

  • 수식에서는 관계를 사용하여 관련 테이블에서 값을 가져올 수 있습니다. 검색되는 값은 항상 현재 행 값과 관련된 값입니다.

  • Excel 워크시트에서처럼 불규칙하거나 "균일하지 않은" 데이터는 사용할 수 없습니다. 테이블의 각 행에는 같은 수의 열이 있어야 합니다. 그러나 일부 열에는 빈 값을 포함할 수 있습니다. Excel 데이터 테이블과 테이블 형식 모델 데이터 테이블은 서로 바꿔 사용할 수 없습니다.

  • 각 열에 대해 데이터 형식이 설정되어 있지만 해당 열에 있는 각 값의 형식은 같아야 합니다.

수식에서 테이블 및 열 참조

이름을 사용하여 모든 테이블과 열을 참조할 수 있습니다. 예를 들어 다음의 수식은 정규화된 이름을 사용하여 두 개의 테이블에서 열을 참조하는 방법을 보여 줍니다.

=SUM('New Sales'[Amount]) + SUM('Past Sales'[Amount])  

수식을 계산할 때 모델 디자이너는 먼저 일반 구문을 확인한 다음 현재 컨텍스트에서 가능한 열과 테이블을 기준으로 제공된 열 및 테이블의 이름을 확인합니다. 이름이 모호하거나 열 또는 테이블을 찾을 수 없는 경우 수식에서 오류가 발생하여 오류가 발생한 셀에 데이터 값 대신 #ERROR 문자열이 표시됩니다. 테이블, 열 및 기타 개체의 명명 요구 사항에 대한 자세한 내용은 DAX 구문 참조의 "명명 요구 사항"을 참조하세요.

테이블 관계

테이블 간 관계를 만들면 다른 테이블의 데이터를 조회하고 관련 값을 사용하여 복잡한 계산을 수행할 수 있습니다. 예를 들어 계산 열을 사용하여 현재 대리점에 대한 모든 배송 레코드를 조회한 다음 각각에 대한 배송 비용의 합계를 구할 수 있습니다. 그러나 대부분의 경우 관계가 필요하지 않을 수 있습니다. search_columnsearch_value 매개 변수에서 지정된 조건을 충족하는 행에 대해 result_columnName 의 값을 반환하기 위해 수식에 LOOKUPVALUE 함수를 사용할 수 있습니다.

대부분의 DAX 함수에서 참조한 열을 찾고 의미 있는 결과를 반환하기 위해서는 두 테이블 간이나 여러 테이블 간에 관계가 있어야 합니다. 다른 함수에서는 관계를 확인하려고 시도하지만 최상의 결과를 얻기 위해서는 가능하면 항상 관계를 만들어야 합니다. 자세한 내용은 이 문서의 앞부분에 있는 수식 및 테이블 형식 모델을 참조하세요.

수식 결과 업데이트(프로세스)

데이터 프로세스다시 계산 은 두 개의 별개 작업이지만, 연관된 작업입니다. 복잡한 수식, 대용량 데이터 또는 외부 데이터 원본에서 가져온 데이터를 포함하는 데이터 모델을 디자인할 때 이러한 개념을 완벽하게 이해해야 합니다.

데이터 처리 는 모델의 데이터를 외부 데이터 원본의 새 데이터로 업데이트하는 프로세스입니다.

다시 계산 은 수식 변경 및 기본 데이터의 변경 내용을 반영하도록 수식의 결과를 업데이트하는 프로세스입니다. 다시 계산은 다음과 같은 방식으로 성능에 영향을 줄 수 있습니다.

  • 계산 열의 값이 계산된 후 모델에 저장됩니다. 계산 열의 값을 업데이트하려면 전체 처리, 데이터 처리 또는 다시 계산 프로세스의 세 가지 처리 명령 중 하나를 사용하여 모델을 처리해야 합니다. 식을 변경할 때마다 항상 전체 열에 대해 수식의 결과를 다시 계산해야 합니다.

  • 측정값에 의해 계산되는 값은 사용자가 피벗 테이블에 측정값을 추가하거나 보고서를 열 때마다 동적으로 계산됩니다. 사용자가 컨텍스트를 수정하면 측정값에 의해 반환되는 값이 변경됩니다. 측정값 결과는 항상 메모리 내 캐시의 최신값을 반영합니다.

다시 계산의 결과로 다른 값이 반환되어 행이 역할 멤버가 쿼리할 수 있거나 쿼리할 수 없게 바뀌는 경우가 아니라면 처리 및 다시 계산으로 인해 행 필터 수식이 영향을 받지는 않습니다.

수식의 오류 문제 해결

수식을 정의할 때 오류가 발생하면 수식에 구문 오류, 의미 체계 오류또는 계산 오류가 있는 경우일 수 있습니다.

구문 오류는 해결하기가 쉽습니다. 대개는 괄호나 쉼표가 누락된 경우가 많습니다. 개별 함수 구문에 대한 도움말은 DAX 함수 참조를 참조하세요.

구문은 올바르지만 참조되는 값이나 열이 수식의 컨텍스트에 적합하지 않은 경우에 다른 유형의 오류가 발생합니다. 다음과 같은 문제 때문에 이러한 의미 체계 오류와 계산 오류가 발생할 수 있습니다.

  • 수식에서 존재하지 않는 열, 테이블 또는 함수를 참조합니다.

  • 수식이 올바른 것 같지만 데이터 엔진에서 데이터를 인출할 때 형식 불일치를 발견하여 오류를 발생시킵니다.

  • 이 수식은 잘못된 숫자나 잘못된 매개 변수 형식을 함수에 전달합니다.

  • 수식에서 오류가 있는 다른 열을 참조하기 때문에 해당 값이 올바르지 않습니다.

  • 수식은 처리되지 않은 열을 참조하므로 메타데이터는 있지만 계산에 사용할 실제 데이터가 없습니다.

처음 네 경우에서 DAX는 잘못된 수식이 포함된 열 전체에 플래그를 지정합니다. 마지막 경우 DAX는 열이 처리되지 않은 상태임을 나타내기 위해 열을 회색으로 표시합니다.

추가 정보

DAX(Data Analysis Expressions) 참조
측정값
계산 열
역할
KPI
지원되는 데이터 원본