DAX 개요

DAX(데이터 분석 식)는 Excel의 Analysis Services, Power BI 및 파워 피벗에서 사용되는 수식 식 언어입니다. DAX 수식에는 테이블 형식 데이터 모델의 관련 테이블 및 열에서 데이터에 대한 고급 계산 및 쿼리를 수행하는 함수, 연산자 및 값이 포함됩니다.

이 문서에서는 DAX에서 가장 중요한 개념에 대한 기본적인 소개만 제공합니다. DAX는 DAX를 사용하는 모든 제품에 적용되므로 설명합니다. 일부 기능은 특정 제품 또는 사용 사례에 적용되지 않을 수 있습니다. DAX의 특정 구현을 설명하는 제품 설명서를 참조하세요.

계산

DAX 수식은 측정값, 계산 열, 계산 테이블 및 행 수준 보안에 사용됩니다.

측정값 그룹

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

측정값의 수식은 COUNT 또는 SUM과 같은 자동 합계 기능을 사용하여 자동으로 생성된 표준 집계 함수를 사용하거나 DAX 수식 입력줄을 사용하여 고유한 수식을 정의할 수 있습니다. 명명된 측정값은 다른 측정값에 인수로 전달될 수 있습니다.

수식 입력줄에서 측정값에 대한 수식을 정의하는 경우 도구 설명 기능에 총 현재 컨텍스트에 대한 결과의 미리 보기가 표시되지만 결과가 어느 곳에도 즉시 출력되지는 않습니다. 계산의 (필터링된) 결과를 즉시 볼 수 없는 이유는 컨텍스트 없이 측정값의 결과를 확인할 수 없기 때문입니다. 측정값을 평가하려면 각 셀과 관련된 데이터를 검색한 다음 각 셀에 대한 식을 평가하는 데 필요한 컨텍스트를 제공할 수 있는 보고 클라이언트 애플리케이션이 필요합니다. 해당 클라이언트는 Excel 피벗 테이블 또는 피벗 차트, Power BI 보고서 또는 SSMS(SQL Server Management Studio)의 DAX 쿼리에 있는 테이블 식일 수 있습니다.

클라이언트에 관계없이 결과의 각 셀에 대해 별도의 쿼리가 실행됩니다. 즉, 피벗 테이블의 행 머리글과 열 머리글의 각 조합 또는 Power BI 보고서에서 슬라이서와 필터를 선택할 때마다 측정값이 계산되는 데이터의 다른 하위 집합이 생성됩니다. 예를 들어 이 매우 간단한 측정값 수식을 사용합니다.

Total Sales = SUM([Sales Amount])

사용자가 보고서에 TotalSales 측정값을 배치한 다음 제품 테이블의 제품 범주 열을 필터에 배치하면 각 제품 범주에 대해 Sales Amount의 합계가 계산되고 표시됩니다.

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

자세한 내용은 다음을 참조하세요.
Power BI Desktop의 측정값
Analysis Services의 측정값
파워 피벗의 측정값

계산 열

계산 열은 모델 디자이너에서 기존 테이블에 추가한 다음 열 값을 정의하는 DAX 수식을 만드는 열입니다. 계산 열에 유효한 DAX 수식이 포함된 경우 수식을 입력하는 즉시 각 행에 대한 값이 계산됩니다. 그런 다음, 값이 메모리 내 데이터 모델에 저장됩니다. 예를 들어 Date 테이블에서 수식 입력줄에 수식을 입력할 때는 다음과 같습니다.

= [Calendar Year] & " Q" & [Calendar Quarter]

테이블의 각 행에 대한 값은 같은 날짜 테이블의 Calendar Year 열에서 값을 가져와서 공백과 대문자 Q를 추가한 다음 Calendar Quarter 열의 값(동일한 날짜 테이블)을 추가하여 계산됩니다. 계산 열의 각 행에 대한 결과는 즉시 계산되며 2017 Q1과 같이 표시됩니다. 열 값은 테이블 또는 관련 테이블이 처리(새로 고침)되거나 모델이 메모리에서 언로드된 후 Power BI Desktop 파일을 닫고 다시 열 때와 같이 다시 로드되는 경우에만 다시 계산됩니다.

자세한 내용은 다음을 참조하세요.
Power BI Desktop의 계산 열
Analysis Services의 계산 열
파워 피벗의 계산 열입니다.

계산된 테이블

계산된 테이블은 동일한 모델의 다른 테이블 전체 또는 일부에서 파생된 수식 식을 기반으로 계산된 개체입니다. DAX 수식은 데이터 원본에서 새 테이블의 열에 값을 쿼리하고 로드하는 대신 테이블 값을 정의합니다.

계산된 테이블은 역할 재생 차원에서 유용할 수 있습니다. 외래 키 관계에 따라 Date 테이블(OrderDate, ShipDate 또는 DueDate)이 그 예입니다. ShipDate에 대한 계산 테이블을 명시적으로 만들면 쿼리에 사용할 수 있는 독립 실행형 테이블이 다른 테이블과 마찬가지로 완전히 작동할 수 있습니다. 계산 테이블은 필터링된 행 집합 또는 다른 기존 테이블에서 열의 하위 집합 또는 상위 집합을 구성할 때도 유용합니다. 이렇게 하면 특정 시나리오를 지원하기 위해 해당 테이블의 변형을 만드는 동안 원래 테이블을 그대로 유지할 수 있습니다.

계산된 테이블은 다른 테이블과의 관계를 지원합니다. 계산 테이블의 열에는 데이터 형식, 서식이 있으며 데이터 범주에 속할 수 있습니다. 계산된 테이블의 이름은 다른 테이블과 마찬가지로 표시되거나 숨겨질 수 있습니다. 계산된 테이블은 데이터를 가져오는 테이블이 새로 고쳐지거나 업데이트되는 경우 다시 계산됩니다.

자세한 내용은 다음을 참조하세요.
Power BI Desktop의 계산된 테이블
Analysis Services의 계산된 테이블입니다.

행 수준 보안

행 수준 보안을 사용하면 DAX 수식이 부울 TRUE/FALSE 조건으로 평가되어야 하며, 특정 역할의 멤버가 쿼리 결과로 반환할 수 있는 행을 정의해야 합니다. 예를 들어 Sales 역할의 멤버의 경우 다음 DAX 수식이 포함된 Customers 테이블이 있습니다.

= Customers[Country] = "USA"

Sales 역할의 멤버는 미국 고객의 데이터만 볼 수 있으며 SUM과 같은 집계는 미국 내 고객에 대해서만 반환됩니다. Excel의 파워 피벗에서는 행 수준 보안을 사용할 수 없습니다.

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

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

자세한 내용은 다음을 참조하세요.
Power BI를 사용하는 RLS(행 수준 보안)
Analysis Services의 역할

쿼리

DAX 쿼리는 SSMS(SQL Server Management Studio) 및 DAX Studio(daxstudio.org)와 같은 오픈 소스 도구에서 만들고 실행할 수 있습니다. 테이블 형식 데이터 모델에서만 만들 수 있는 DAX 계산 수식과 달리 DAX 쿼리는 Analysis Services 다차원 모델에 대해서도 실행할 수 있습니다. DAX 쿼리는 종종 MDX(다차원 데이터 식) 쿼리보다 쓰기가 더 쉽고 효율적입니다.

DAX 쿼리는 T-SQL의 SELECT 문과 유사한 문입니다. DAX 쿼리의 가장 기본적인 형식은 evaluate 문입니다. 예를 들면 다음과 같습니다.

EVALUATE
 ( FILTER ( 'DimProduct', [SafetyStockLevel] < 200 ) )
ORDER BY [EnglishProductName] ASC

Results에서 EnglishProductName의 오름차순으로 금고tyStockLevel이 200 미만인 제품만 나열하는 테이블을 반환합니다.

쿼리의 일부로 측정값을 만들 수 있습니다. 측정값은 쿼리 기간 동안에만 존재합니다. 자세한 내용은 DAX 쿼리를 참조 하세요.

제조법

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

수식 기본 사항

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

수식 정의
= TODAY() 계산 열의 모든 행에 오늘 날짜를 삽입합니다.
= 3 계산 열의 모든 행에 값 3을 삽입합니다.
= [Column1] + [Column2] [Column1]과 [Column2]의 같은 행에 값을 추가하고 결과를 같은 행의 계산 열에 넣습니다.

만드는 수식의 복잡도에 관계없이 다음 단계를 사용하여 수식을 작성할 수 있습니다.

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

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

  3. 원하는 함수 또는 이름의 처음 몇 글자를 입력하기 시작하고 자동 완성은 사용 가능한 함수, 테이블 및 열 목록을 표시합니다. Tab 키를 눌러 자동 완성 목록의 항목을 수식에 추가합니다.

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

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

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

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

참고 항목

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

이 예제에서는 현재 분기의 Days라는 측정값에서 수식을 살펴보겠습니다.

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

이 측정값은 완료되지 않은 기간과 이전 기간 사이의 비교 비율을 만들기 위해 사용됩니다. 수식은 경과된 기간의 비율을 고려하여 이를 이전 기간의 동일한 부분과 비교해야 합니다. 이 경우 [일 현재 분기에서 날짜로]/[현재 분기의 일]은 현재 기간에 경과된 비율을 제공합니다.

이 수식에는 다음 요소가 포함됩니다.

Formula 요소 설명
Days in Current Quarter 측정값의 이름입니다.
= 등호(=)가 수식을 시작합니다.
COUNTROWS COUNTROWS 는 날짜 테이블의 행 수를 계산합니다.
() 열기 및 닫는 괄호는 인수를 지정합니다.
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에는 날짜 및 시간을 사용하여 계산을 수행하고, 조건부 값을 만들고, 문자열로 작업하고, 관계에 따라 조회를 수행하고, 테이블을 반복하여 재귀 계산을 수행하는 데 사용할 수 있는 함수가 포함되어 있습니다. Excel 수식에 익숙한 경우 이러한 함수의 대부분은 매우 유사하게 표시됩니다. 그러나 DAX 수식은 다음과 같은 중요한 방법으로 다릅니다.

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

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

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

  • DAX 함수에는 다양한 시간 인텔리전스 함수가 포함됩니다. 이러한 함수를 사용하면 날짜 범위를 정의하거나 선택하고 이러한 날짜 또는 범위에 따라 동적 계산을 수행할 수 있습니다. 예를 들어 병렬 기간 전체의 합계를 비교할 수 있습니다.

집계 함수

집계 함수는 식에 정의된 대로 열 또는 테이블의 모든 행에 대한 개수, 합계, 평균, 최소값 또는 최대값과 같은 (스칼라) 값을 계산합니다. 자세한 내용은 집계 함수를 참조 하세요.

날짜 및 시간 함수

DAX의 날짜 및 시간 함수는 Microsoft Excel의 날짜 및 시간 함수와 비슷합니다. 그러나 DAX 함수는 1900년 3월 1일부터 날짜/시간 데이터 형식을 기반으로 합니다. 자세한 내용은 날짜 및 시간 함수를 참조 하세요.

Filter 함수

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

재무 기능

DAX의 재무 기능은 순 현재 가치 및 수익률과 같은 재무 계산을 수행하는 수식에 사용됩니다. 이러한 함수는 Microsoft Excel에서 사용되는 재무 함수와 유사합니다. 자세한 내용은 재무 기능을 참조 하세요.

정보 함수

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

논리 함수

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

수치 연산 및 삼각 함수

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

기타 함수

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

관계 함수

DAX의 관계 함수를 사용하면 다른 관련 테이블의 값을 반환하고 식에 사용할 특정 관계를 지정하며 교차 필터링 방향을 지정할 수 있습니다. 자세한 내용은 관계 함수를 참조 하세요.

통계 함수

통계 함수는 표준 편차 및 순열 수와 같은 통계 분포 및 확률과 관련된 값을 계산합니다. 자세한 내용은 통계 함수를 참조 하세요.

텍스트 함수

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

시간 인텔리전스 함수

DAX에서 제공되는 시간 인텔리전스 함수를 사용하면 일정 및 날짜에 대한 기본 제공 지식을 사용하는 계산을 만들 수 있습니다. 시간 및 날짜 범위를 집계 또는 계산과 함께 사용하면 비교 가능한 기간에서 판매량, 재고 등에 대한 의미 있는 비교 자료를 작성할 수 있습니다. 자세한 내용은 DAX(시간 인텔리전스 함수)를 참조하세요.

테이블 조작 함수

이러한 함수는 테이블을 반환하거나 기존 테이블을 조작합니다. 예를 들어 ADDCOLUMNS를 사용하여 지정된 테이블에 계산 열을 추가하거나 SUMMARIZECOLUMNS 함수를 사용하여 그룹 집합에 대해 요약 테이블을 반환할 수 있습니다. 자세한 내용은 테이블 조작 함수를 참조 하세요.

변수

VAR을 사용하여 식 내에서 변수를 만들 수 있습니다. VAR은 기술적으로 함수가 아니며 식의 결과를 명명된 변수로 저장하는 키워드(keyword). 그런 다음 해당 변수를 다른 측정값 식에 인수로 전달할 수 있습니다. 예시:

VAR
    TotalQty = SUM ( Sales[Quantity] )

Return

    IF (
        TotalQty > 1000,
        TotalQty * 0.95,
        TotalQty * 1.25
        )

이 예제에서는 TotalQty를 명명된 변수로 다른 식에 전달할 수 있습니다. 변수는 테이블을 포함한 모든 스칼라 데이터 형식일 수 있습니다. 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(Zero)

2.23E -308에서 1.79E + 308까지의 양수 값

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

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

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

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

컨텍스트

컨텍스트 는 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을 참조하세요.

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

쿼리 컨텍스트

쿼리 컨텍스트 는 수식에 대해 암시적으로 검색되는 데이터의 하위 집합을 참조합니다. 예를 들어 사용자가 측정값 또는 필드를 보고서에 배치할 때 엔진은 행 및 열 머리글, 슬라이서 및 보고서 필터를 검사하여 컨텍스트를 확인합니다. 그런 다음, 모델 데이터에 대해 필요한 쿼리를 실행하여 데이터의 올바른 하위 집합을 얻고, 수식으로 정의된 계산을 수행한 다음, 보고서의 값을 채웁니다.

수식을 배치하는 위치에 따라 컨텍스트가 변경되므로 수식의 결과도 변경됩니다. 예를 들어 Sales 테이블= SUM('Sales'[Profit])의 Profit 열에 있는 값의 합계를 계산하는 수식을 만듭니다. Sales 테이블 내의 계산 열에서 이 수식을 사용하는 경우 수식의 쿼리 컨텍스트는 항상 Sales 테이블의 전체 데이터 집합이므로 수식의 결과는 전체 테이블에 대해 동일합니다. 결과는 모든 지역, 모든 제품, 모든 연도 등에 대한 이익을 갖게 됩니다.

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

보고서에서는 필드를 필터링, 추가 또는 제거하고 슬라이서를 사용하여 컨텍스트가 변경됩니다. 각 변경에 대해 측정값이 평가되는 쿼리 컨텍스트입니다. 따라서 측정값에 사용되는 동일한 수식은 각 셀에 대해 다른 쿼리 컨텍스트 에서 평가됩니다.

필터 컨텍스트

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

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

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

수식 내에서 필터를 만드는 방법에 대한 자세한 내용은 FILTER 함수(DAX)를 참조하세요.
총합계를 만들기 위해 필터를 지울 수 있는 방법의 예는 ALL 함수(DAX)를 참조하세요.

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

수식에서 컨텍스트 확인

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

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

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

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

연산자

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

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

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

테이블 및 열 작업

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

  • 수식은 개별 셀, 범위 참조 또는 배열이 아닌 테이블 및 열에서만 작동합니다.
  • 수식은 관계를 사용하여 관련 테이블에서 값을 가져올 수 있습니다. 검색되는 값은 항상 현재 행 값과 관련된 값입니다.
  • Excel 워크시트에서처럼 불규칙하거나 "비정형" 데이터를 사용할 수 없습니다. 테이블의 각 행에는 동일한 수의 열이 포함되어야 합니다. 그러나 일부 열에는 빈 값이 있을 수 있습니다. Excel 데이터 테이블 및 테이블 형식 모델 데이터 테이블은 서로 교환할 수 없습니다.
  • 각 열에 대해 데이터 형식이 설정되므로 해당 열의 각 값은 동일한 형식이어야 합니다.

수식에서 테이블 및 열 참조

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


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

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

테이블 관계

테이블 간의 관계를 만들면 다른 테이블의 관련 값을 계산에 사용할 수 있습니다. 예를 들어 계산 열을 사용하여 현재 재판매인과 관련된 모든 배송 레코드를 확인한 다음 각각에 대한 배송 비용을 합산할 수 있습니다. 그러나 대부분의 경우 관계가 필요하지 않을 수 있습니다. 수식에서 LOOKUPVALUE 함수를 사용하여 search_column 지정한 조건과 search_value 인수를 충족하는 행의 result_columnName 값을 반환할 수 있습니다.

많은 DAX 함수는 참조한 열을 찾고 적합한 결과를 반환하기 위해 테이블 간 또는 여러 테이블 간에 관계가 있어야 합니다. 다른 함수는 관계를 식별하려고 시도합니다. 그러나 최상의 결과를 얻으려면 항상 가능한 경우 관계를 만들어야 합니다. 테이블 형식 데이터 모델은 테이블 간의 여러 관계를 지원합니다. 혼동 또는 잘못된 결과를 방지하기 위해 한 번에 하나의 관계만 활성 관계로 지정되지만 필요에 따라 활성 관계를 변경하여 계산에서 데이터의 서로 다른 연결을 트래버스할 수 있습니다. USERELATIONSHIP 함수를 사용하여 특정 계산에 사용할 하나 이상의 관계를 지정할 수 있습니다.

관계를 사용할 때는 다음 수식 디자인 규칙을 준수해야 합니다.

  • 테이블이 관계로 연결된 경우 키로 사용되는 두 열에 일치하는 값이 있는지 확인해야 합니다. 참조 무결성은 적용되지 않으므로 키 열에 일치하지 않는 값을 갖고 관계를 만들 수 있습니다. 이 경우 빈 값 또는 일치하지 않는 값이 수식의 결과에 영향을 줄 수 있다는 점에 유의해야 합니다.

  • 관계를 사용하여 모델의 테이블을 연결할 때 수식이 평가되는 범위 또는 컨텍스트를 확대합니다. 새 테이블 추가, 새 관계 또는 활성 관계의 변경으로 인한 컨텍스트 변경으로 인해 예상할 수 없는 방식으로 결과가 변경될 수 있습니다. 자세한 내용은 이 문서의 컨텍스트를 참조하세요.

프로세스 및 새로 고침

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

프로세스(새로 고침) 가 외부 데이터 원본의 새 데이터로 모델의 데이터를 업데이트하고 있습니다.

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

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

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

다시 계산 결과가 다른 값을 반환하지 않는 한 처리 및 다시 계산은 행 수준 보안 수식에 영향을 주지 않으므로 역할 멤버가 행을 쿼리할 수 있거나 쿼리할 수 없습니다.

업데이트

DAX는 지속적으로 개선되고 있습니다. 새 함수와 업데이트된 함수는 일반적으로 매월 제공되는 다음 업데이트와 함께 릴리스됩니다. 서비스가 먼저 업데이트되고 Power BI Desktop, Excel, SSMS(SQL Server Management Studio) 및 SSDT(Visual Studio용 Analysis Services 프로젝트 확장)와 같은 설치된 애플리케이션이 뒤따릅니다. SQL Server Analysis Services는 다음 누적 업데이트로 업데이트됩니다. 새 함수는 Power BI Desktop 업데이트와 일치하는 DAX 함수 참조에서 먼저 발표되고 설명됩니다.

이전 버전의 SQL Server Analysis Services 및 Excel에서 모든 함수가 지원되는 것은 아닙니다.

문제 해결

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

구문 오류는 가장 쉽게 해결할 수 있습니다. 그들은 일반적으로 누락 된 괄호 또는 쉼표를 포함한다.

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

  • 수식은 존재하지 않는 열, 테이블 또는 함수를 나타냅니다.
  • 수식이 올바른 것처럼 보이지만 데이터 엔진이 데이터를 가져오면 형식이 일치하지 않는 것을 발견하고 오류를 발생합니다.
  • 수식은 잘못된 수 또는 형식의 인수를 함수에 전달합니다.
  • 수식은 오류가 있는 다른 열을 참조하므로 해당 값이 잘못되었습니다.
  • 수식은 처리되지 않은 열을 참조하므로 메타데이터는 있지만 계산에 사용할 실제 데이터가 없습니다.

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

앱 및 도구

Power BI Desktop

Power BI Desktop

Power BI Desktop 은 무료 데이터 모델링 및 보고 애플리케이션입니다. 모델 디자이너에는 DAX 계산 수식을 만들기 위한 DAX 편집기가 포함되어 있습니다.

Excel의 파워 피벗

Power Pivot in Excel

Excel 모델 디자이너의 파워 피벗에는 DAX 계산 수식을 만들기 위한 DAX 편집기가 포함되어 있습니다.

Visual Studio

Visual Studio

VSIX(Analysis Services 프로젝트 확장)가 있는 Visual Studio는 Analysis Services 모델 프로젝트를 만드는 데 사용됩니다. 프로젝트 확장과 함께 설치된 테이블 형식 모델 디자이너에는 DAX 편집기가 포함되어 있습니다.

SQL Server Management Studio

SQL Server Management Studio

SSMS(SQL Server Management Studio )는 Analysis Services 작업을 위한 필수 도구입니다. SSMS에는 테이블 형식 모델과 다차원 모델을 모두 쿼리하기 위한 DAX 쿼리 편집기가 포함되어 있습니다.

DAX Studio

DAX Studio icon

DAX Studio 는 Excel 모델에서 Analysis Services, Power BI Desktop 및 Power Pivot에 대해 DAX 쿼리를 만들고 실행하기 위한 오픈 소스 클라이언트 도구입니다.

테이블 형식 편집기

Tabular Editor icon

테이블 형식 편집 기는 테이블 형식 모델 메타데이터의 모든 개체에 대한 직관적이고 계층적인 보기를 제공하는 오픈 소스 도구입니다. 테이블 형식 편집기에는 구문 강조 표시가 있는 DAX 편집기가 포함되어 있어 측정값, 계산 열 및 계산된 테이블 식을 쉽게 편집할 수 있습니다.

학습 리소스

DAX를 학습할 때 사용할 애플리케이션을 사용하여 데이터 모델을 만드는 것이 가장 좋습니다. Excel의 Analysis Services, Power BI Desktop 및 Power Pivot에는 모두 DAX를 사용하여 측정값, 계산 열 및 행 필터를 만드는 방법에 대한 단원을 포함하는 문서와 자습서가 있습니다. 다음은 몇 가지 추가 리소스입니다.

비디오

Power BI Desktop에서 DAX 사용 학습 경로.

알베르토 페라리와 마르코 루소에 의해 DAX에 대한 최종 가이드 (마이크로 소프트 프레스). 이제 두 번째 버전에서 이 광범위한 가이드는 데이터 모델러 및 BI 전문가를 위한 혁신적인 고성능 기술에 대한 기본 사항을 제공합니다.

The Definitive Guide to DAX book image

커뮤니티

DAX는 항상 전문 지식을 공유하고자 하는 활기찬 커뮤니티를 보유하고 있습니다. Microsoft Power BI 커뮤니티에는 DAX, DAX 명령 및 팁을 위한 특별 토론 포럼이 있습니다.