DAX 구문

이 문서에서는 DAX 수식 식 언어에 대한 구문 및 요구 사항을 설명합니다.

구문 요구 사항

DAX 수식은 항상 등호(=)로 시작합니다. 등호 기호 후에는 스칼라로 계산되는 식이나 스칼라로 변환할 수 있는 식을 제공할 수 있습니다. 여기에는 다음이 포함됩니다.

  • 스칼라 상수 또는 스칼라 연산자를 사용하는 식(+,-,*,/,>=,...,> ...)

  • 열 또는 테이블에 대한 참조입니다. DAX 언어는 항상 테이블과 열을 함수에 대한 입력으로 사용하며 배열이나 임의의 값 집합은 사용하지 않습니다.

  • 식의 일부로 제공되는 연산자, 상수 및 값입니다.

  • 함수 및 해당 필수 인수의 결과입니다. 일부 DAX 함수는 스칼라 대신 테이블을 반환하며 테이블을 평가하고 스칼라를 반환하는 함수에 래핑되어야 합니다. 테이블이 단일 열, 단일 행 테이블이 아니면 스칼라 값으로 처리됩니다.

    대부분의 DAX 함수에는 테이블, 열, 식 및 값을 포함할 수 있는 하나 이상의 인수가 필요합니다. 그러나 PI와 같은 일부 함수에는 인수가 필요하지 않지만 항상 null 인수를 나타내려면 괄호가 필요합니다. 예를 들어 PI가 아닌 PI()를 항상 입력해야 합니다. 다른 함수 내에 함수를 중첩할 수도 있습니다.

  • 식. 식에는 열에 대한 연산자, 상수 또는 참조 중 어느 것이나 모두 포함될 수 있습니다.

예를 들어 다음은 모두 유효한 수식입니다.

수식 결과
= 3 3
= "Sales" Sales
= 'Sales'[Amount] Sales 테이블 내에서 이 수식을 사용하면 현재 행에 대한 Sales 테이블의 Amount 열 값이 표시됩니다.
= (0.03 *[금액])

=0.03 * [금액]
현재 테이블의 Amount 열에 있는 값의 3%입니다.

이 수식을 사용하여 백분율을 계산할 수 있지만 표에 서식을 적용하지 않으면 결과가 백분율로 표시되지 않습니다.
= PI() 상수 pi의 값입니다.

수식은 사용되는 방식에 따라 다르게 동작할 수 있습니다. 수식에서 사용하는 데이터가 계산에 사용될 수 있는 다른 데이터와 어떻게 관련되어 있는지 항상 알고 있어야 합니다.

명명 요건

데이터 모델에는 종종 여러 테이블이 포함됩니다. 테이블과 해당 열은 메모리 내 분석 엔진(VertiPaq)에 저장된 데이터베이스로 구성됩니다. 해당 데이터베이스 내에서 모든 테이블에는 고유한 이름이 있어야 합니다. 열 이름도 각 테이블 내에서 고유해야 합니다. 모든 개체 이름은 대/소문자를 구분하지 않습니다. 예를 들어 SALESSales 이름은 동일한 테이블을 나타냅니다.

기존 데이터 모델에 추가하는 각 열과 측정값은 특정 테이블에 속해야 합니다. 테이블 내에서 계산 열을 만들 때 암시적으로 열이 포함된 테이블을 지정하거나 측정값을 만들고 측정값 정의를 저장할 테이블의 이름을 지정할 때 명시적으로 지정합니다.

테이블 또는 열을 함수에 대한 입력으로 사용하는 경우 일반적으로 열 이름을 한정 해야 합니다. 열의 정규화된 이름은 테이블 이름 뒤에 대괄호로 된 열 이름(예: '미국 판매'[Products])입니다. 다음 컨텍스트에서 열을 참조할 때는 항상 정규화된 이름이 필요합니다.

  • 함수에 대한 인수인 VALUES

  • 함수, ALL 또는 ALLEXCEPT에 대한 인수로

  • 함수에 대한 필터 인수에서 CALCULATE 또는 CALCULATETABLE

  • FUNCTION에 대한 인수로 RELATEDTABLE

  • 임의의 시간 인텔리전스 함수에 대한 인수로

정규화되지 않은 열 이름은 대괄호로 묶인 열의 이름입니다(예: [Sales Amount]). 예를 들어 현재 테이블의 동일한 행에서 스칼라 값을 참조하는 경우 정규화되지 않은 열 이름을 사용할 수 있습니다.

테이블 이름에 공백, 예약된 키워드(keyword) 또는 허용되지 않는 문자가 포함된 경우 테이블 이름을 작은따옴표로 묶어야 합니다. 또한 로캘이 문자 집합을 지원하는지 여부에 관계없이 이름에 ANSI 영숫자 문자 범위 외부의 문자가 포함된 경우 테이블 이름을 따옴표로 묶어야 합니다. 예를 들어 'Талиа'와 같이 키릴 자모 문자로 작성된 테이블 이름이 포함된 통합 문서를 여는 경우 공백이 없더라도 테이블 이름을 따옴표로 묶어야 합니다.

참고 항목

열의 정규화된 이름을 더 쉽게 입력하려면 수식 편집기에서 자동 완성 기능을 사용합니다.

테이블

  • 현재 테이블과 다른 테이블에서 열이 있을 때마다 테이블 이름이 필요합니다. 테이블 이름은 데이터베이스 내에서 고유해야 합니다.

  • 공백, 기타 특수 문자 또는 영어가 아닌 영숫자가 포함된 경우 테이블 이름은 작은따옴표로 묶어야 합니다.

측정값 그룹

  • 측정값 이름은 항상 대괄호 안에 있어야 합니다.

  • 측정값 이름에는 공백이 포함될 수 있습니다.

  • 각 측정값 이름은 모델 내에서 고유해야 합니다. 따라서 테이블 이름은 기존 측정값을 참조할 때 측정값 이름 앞에 선택 사항입니다. 그러나 측정값을 만들 때는 항상 측정값 정의가 저장될 테이블을 지정해야 합니다.

열 이름은 테이블의 컨텍스트에서 고유해야 합니다. 그러나 여러 테이블에 이름이 같은 열이 있을 수 있습니다(명확성은 테이블 이름과 함께 제공됨).

일반적으로 열은 이름 충돌을 해결하거나 열 이름을 정규화해야 하는 특정 함수를 사용하는 경우를 제외하고 해당 열이 속한 기본 테이블을 참조하지 않고 참조할 수 있습니다.

예약 키워드

테이블에 사용하는 이름이 Analysis Services 예약 키워드(keyword) 동일한 경우 오류가 발생하고 테이블 이름을 바꿔야 합니다. 그러나 개체 이름이 대괄호(열의 경우) 또는 따옴표(테이블의 경우)로 묶인 경우 개체 이름에 키워드(keyword) 사용할 수 있습니다.

참고 항목

따옴표는 애플리케이션에 따라 여러 다른 문자로 나타낼 수 있습니다. 외부 문서 또는 웹 페이지에서 수식을 붙여넣는 경우 따옴표를 열고 닫는 데 사용되는 문자의 ASCII 코드를 검사 동일한지 확인합니다. 그렇지 않으면 DAX가 기호를 따옴표로 인식할 수 없어 참조가 유효하지 않을 수 있습니다.

특수 문자

다음 문자 및 문자 형식은 테이블, 열 또는 측정값의 이름에서 유효하지 않습니다.

  • 선행 또는 후행 공백; 공백이 이름 구분 기호, 대괄호 또는 단일 아포스트로피로 묶이지 않는 한

  • 컨트롤 문자

  • 개체 이름에 유효하지 않은 문자는 다음과 같습니다.

    .,;':/\*|? &%$!+=()[]{}<>

개체 이름의 예

다음 표에서는 일부 개체 이름의 예를 보여 줍니다.

개체 유형 예제 Comment(설명)
테이블 이름 Sales 테이블 이름에 공백이나 기타 특수 문자가 없으면 이름을 따옴표로 묶을 필요가 없습니다.
테이블 이름 '캐나다 판매' 이름에 공백, 탭 또는 기타 특수 문자가 포함된 경우 이름을 작은따옴표로 묶습니다.
정규화된 열 이름 판매액[금액] 테이블 이름은 열 이름 앞에 있고 열 이름은 대괄호로 묶습니다.
정규화된 측정값 이름 판매액[이익] 테이블 이름은 측정값 이름 앞에 있으며 측정값 이름은 대괄호로 묶습니다. 특정 컨텍스트에서는 정규화된 이름이 항상 필요합니다.
정규화되지 않은 열 이름 [금액] 정규화되지 않은 이름은 대괄호로 된 열 이름입니다. 정규화되지 않은 이름을 사용할 수 있는 컨텍스트에는 동일한 테이블 내의 계산 열 또는 동일한 테이블을 검색하는 집계 함수에 수식이 포함됩니다.
공백이 있는 테이블의 정규화된 열 'Canada Sales'[Qty] 테이블 이름은 공백을 포함하므로 작은따옴표로 묶어야 합니다.

기타 제한 사항

각 함수에 필요한 구문과 수행할 수 있는 작업 유형은 함수에 따라 크게 달라집니다. 그러나 일반적으로 다음 규칙은 모든 수식 및 식에 적용됩니다.

  • DAX 수식 및 식은 테이블에 개별 값을 수정하거나 삽입할 수 없습니다.

  • DAX를 사용하여 계산된 행을 만들 수 없습니다. 계산 열 및 측정값만 만들 수 있습니다.

  • 계산 열을 정의할 때 함수를 모든 수준에 중첩할 수 있습니다.

  • DAX에는 테이블을 반환하는 여러 함수가 있습니다. 일반적으로 이러한 함수에서 반환하는 값을 다른 함수에 대한 입력으로 사용하며, 테이블은 입력으로 필요합니다.

DAX 연산자 및 상수

다음 표에서는 DAX에서 지원하는 연산자를 나열합니다. 개별 연산자의 구문에 대한 자세한 내용은 DAX 연산자를 참조하세요.

연산자 유형 기호 및 사용
괄호 연산자 () 인수의 우선 순위 및 그룹화
산술 연산자 + (더하기)

- (빼기/

sign)

* (곱하기)

/ (나누기)

^(지수)
비교 연산자 = (같음)

>(보다 큼)

<(보다 작음)

>=(보다 크거나 같음)

<=(보다 작거나 같음)

<>(같지 않음)
텍스트 연결 연산자 (연결)
논리 연산자 &>(및)

|| (또는)

DAX 수식에서 사용하는 열 또는 값의 데이터 형식을 캐스팅, 변환 또는 지정할 필요가 없습니다. DAX 수식에서 데이터를 사용하는 경우 DAX는 참조된 열의 데이터 형식과 입력한 값의 데이터 형식을 자동으로 식별하고 지정된 작업을 완료하는 데 필요한 경우 암시적 변환을 수행합니다.

예를 들어 날짜 값에 숫자를 추가하려고 하면 엔진은 함수 컨텍스트에서 작업을 해석하고 숫자를 공통 데이터 형식으로 변환한 다음 원하는 형식인 날짜로 결과를 표시합니다.

그러나 성공적으로 변환할 수 있는 값에는 몇 가지 제한 사항이 있습니다. 값 또는 열에 현재 작업과 호환되지 않는 데이터 형식이 있는 경우 DAX는 오류를 반환합니다. 또한 DAX는 가져온 기존 데이터의 데이터 형식을 데이터 모델로 명시적으로 변경, 변환 또는 캐스팅할 수 있는 함수를 제공하지 않습니다.

Important

DAX는 변형 데이터 형식의 사용을 지원하지 않습니다. 따라서 데이터를 데이터 모델로 로드하거나 가져올 때 각 열의 데이터는 일반적으로 일관된 데이터 형식이 될 것으로 예상됩니다.

일부 함수는 문자열을 포함한 스칼라 값을 반환하는 반면, 다른 함수는 정수와 실수, 날짜 및 시간 모두와 함께 작동합니다. 각 함수에 필요한 데이터 형식은 DAX 함수 섹션 에 설명되어 있습니다.

여러 열과 여러 행의 데이터를 포함하는 테이블을 함수의 인수로 사용할 수 있습니다. 일부 함수는 메모리에 저장되고 다른 함수에 대한 인수로 사용할 수 있는 테이블을 반환합니다.

날짜 및 시간

DAX는 Microsoft SQL Server에서 사용하는 날짜/시간 데이터 형식을 사용하여 날짜 및 시간 값을 저장합니다. Datetime 형식은 부동 소수점 숫자를 사용합니다. 여기서 날짜 값은 1899년 12월 30일 이후의 일 수를 나타내는 정수 부분에 해당합니다. 시간 값은 시간, 분 및 초가 하루의 소수 자릿수로 표시되는 날짜 값의 소수 부분에 해당합니다. DAX 날짜 및 시간 함수는 인수를 datetime 데이터 형식으로 암시적으로 변환합니다.

참고 항목

DAX에서 지원하는 정확한 최대 DateTime 값은 9999년 12월 31일 00:00:00입니다.

날짜 및 시간 리터럴

Power BI Desktop의 2021년 8월 버전부터 DAX 날짜 및 날짜/시간 값을 형식 dt"YYYY-MM-DD"dt"YYYY-MM-DDThh:mm:ss"dt"YYYY-MM-DD hh:mm:ss"또는 리터럴로 지정할 수 있습니다. 리터럴로 지정된 경우 식에서 DATE, TIME, DATEVALUE, TIMEVALUE 함수를 사용할 필요가 없습니다.

예를 들어 다음 식은 DATE 및 TIME 함수를 사용하여 OrderDate를 필터링합니다.

EVALUATE
FILTER (
        FactInternetSales,
        [OrderDate] > (DATE(2015,1,9) + TIME(2,30,0)) &&[OrderDate] < (DATE(2015,12,31) + TIME(11,59,59))
)

동일한 필터 식을 리터럴로 지정할 수 있습니다.

EVALUATE
FILTER (
        FactInternetSales,
        [OrderDate] > dt"2015-1-9T02:30:00" && [OrderDate] < dt"2015-12-31T11:59:59"
)

참고 항목

DAX 날짜 및 날짜/시간 형식 리터럴 형식은 Excel의 모든 버전의 Power BI Desktop, Analysis Services 및 Power Pivot에서 지원되지 않습니다. 새 DAX 및 업데이트된 DAX 기능은 일반적으로 Power BI Desktop에서 처음 도입된 다음 나중에 Excel의 Analysis Services 및 파워 피벗에 포함됩니다.