DAX 사용자 정의 함수

DAX(데이터 분석 식) UDF(사용자 정의 함수)를 사용하면 재사용 가능하고 매개 변수가 있는 DAX 논리를 모델에 패키지하여 DAX 코드를 더 쉽게 작성, 유지 관리 및 공유할 수 있습니다. UDF는 측정값, 계산 열 및 시각적 개체에서 수식을 반복하는 대신 의미 체계 모델에 프로그래밍 스타일의 유연성을 제공하므로 함수를 한 번 정의하고 DAX가 지원되는 모든 곳에서 사용할 수 있습니다.

DAX UDF는 2026년 6월 릴리스부터 Power BI Desktop 및 Power BI Service에서 일반적으로 사용할 수 있습니다. 자세한 내용은 DAX 사용자 정의 함수를 참조하세요.

사용자 정의 함수를 사용하는 이유는 무엇인가요?

  • 재사용성 및 일관성: 계산을 한 번 정의하고 어디서나 다시 사용하세요.
  • 유지 관리 기능: 규칙을 수정하거나 발전하기 위해 논리를 한 곳에서 업데이트합니다.
  • 더 안전한 작성: 선택적 형식 힌트 및 형식 검사 도우미는 예측 가능한 오류 방지 코드를 지원합니다.
  • 일류 모델 개체: UDF는 모델에 상주하며 모델 탐색기에서 볼 수 있습니다.

함수 정의

DQV(DAX 쿼리 뷰) 또는 TMDL 뷰를 사용하여 Power BI Desktop에서 사용자 정의 함수를 정의할 수 있습니다.

일반 구문

UDF의 일반적인 구문은 다음과 같습니다.

/// Optional description above the function
/// @param {ParameterType} ParameterName - ParameterDescription
/// ...
/// @returns Return description
FUNCTION <FunctionName> = ( [<ParameterName> [: [<ParameterType>] [<ParameterSubtype>] [<ParameterPassingMode>]] [= <DefaultExpression>], ...] ) => <FunctionBody>

예: 단순 세금 함수

다음은 지정된 금액에 세금을 추가하는 DQV 의 간단한 예제입니다. DQV에서 UDF를 평가할 수도 있습니다.

DEFINE
    /// AddTax takes in amount and returns amount including tax
    FUNCTION AddTax = (
            amount : NUMERIC
        ) =>
        amount * 1.1

EVALUATE
{ AddTax ( 10 ) }
// Returns 11

UDF가 정의되면 모델을 업데이트하거나 코드 렌즈를 사용하여 모델에 함수를 추가할 수 있습니다.

Power BI Desktop의 DAX 쿼리 보기 스크린샷으로, 사용자 정의 함수를 저장할 수 있는 두 위치를 강조 표시합니다. 첫 번째는 보기 맨 위에 있는 '변경 내용으로 모델 업데이트' 단추입니다. 두 번째는 코드 편집기에서 '모델 업데이트: 새 함수 추가'라고 표시된 상태 줄입니다.

TMDL 보기에서 동일한 예제를 만들 수 있습니다.

createOrReplace
    /// AddTax takes in amount and returns amount including tax
    function AddTax = (amount : NUMERIC) => amount * 1.1

UDF가 정의되면 변경 내용을 적용하여 모델에 함수를 추가할 수 있습니다.

Power BI Desktop의 TMDL 보기 스크린샷으로, 보기 상단의 적용 버튼이 강조 표시되어 있습니다. 이 버튼은 사용자 정의 함수를 저장할 수 있는 위치입니다.

사용자 정의 함수 관리

정의되고 모델에 추가되면 함수 노드 아래의 모델 탐색기 에서 모든 사용자 정의 함수를 보고 관리할 수 있습니다 .

확장된 함수 노드를 보여 주는 Power BI Desktop의 모델 탐색기 패널 스크린샷입니다. AddTax, AverageOrderValue, CustomerLifetimeValue의 세 가지 사용자 정의 함수가 나열되어 있습니다.

DQV(DAX 쿼리 뷰)에서 모델 탐색기를 통해 빠른 쿼리를 사용하여 함수를 쉽게 정의하고 평가할 수 있습니다.

Power BI Desktop의 모델 탐색기 창 스크린샷으로, 확장된 함수 노드가 표시되어 있습니다. 두 개의 컨텍스트 메뉴가 열려 있습니다. 첫 번째 메뉴에는 빠른 쿼리, 이름 바꾸기, 모델에서 삭제, 보고서 보기에서 숨기기, 모두 숨기기 해제, 모두 축소 및 모두 확장이 표시됩니다. 빠른 쿼리가 강조 표시되어 선택되어 있습니다. 두 번째 메뉴도 강조 표시되어 있으며, 빠른 쿼리 옵션인 평가, 정의 및 평가, 새 함수 정의, 이 모델의 모든 함수 정의를 제공합니다.

TMDL 보기에서 함수를 캔버스로 끌어서 놓거나 TMDL 스크립트를 사용하여 모델 탐색기를 통해 실행할 수 있습니다.

Power BI Desktop의 모델 탐색기 창 스크린샷으로, 확장된 함수 노드가 표시되어 있습니다. 두 개의 컨텍스트 메뉴가 열려 있습니다. 첫 번째 메뉴에는 Script to TMDL, 이름 바꾸기, 모델에서 삭제, 보고서 보기에서 숨기기, 모두 숨김 해제, 모두 축소, 모두 확장이 표시됩니다. Script to TMDL이 강조 표시되어 선택되어 있습니다. 두 번째 메뉴도 강조 표시되어 있으며, Script to TMDL 옵션인 스크립트 탭과 클립보드를 제공합니다.

Power BI Project를 사용하는 경우 함수도 definition 폴더 내의 functions.tmdl에 저장됩니다.

Power BI 프로젝트의 Visual Studio Code 스크린샷 탐색기가 의미 체계 모델 폴더에 열려 있습니다. 'functions.tmdl'이 코드 편집기에서 열립니다. CustomerLifetimeValue, AverageOrderValue 및 AddTax의 세 가지 함수가 표시됩니다.

사용자 정의 함수 사용

모델에 UDF를 추가한 후 DAX가 지원되는 모든 위치에서 사용할 수 있습니다. 여기서는 예제로 사용합니다 AddTax .

측정값과 함께 전체 필터 컨텍스트에서 UDF를 사용합니다.

Total Sales with Tax = AddTax ( [Total Sales] )

계산 열이 있는 테이블의 모든 행에 UDF를 적용합니다.

Sales Amount with Tax = CONVERT ( AddTax ( 'Sales'[Sales Amount] ), CURRENCY )

시각적 개체 계산을 사용하여 시각화에서 직접 UDF를 사용하세요.

Sales Amount with Tax = AddTax ( [Sales Amount] )

고급 시나리오에 UDF를 중첩합니다.

DEFINE
    /// AddTax takes in amount and returns amount including tax
    FUNCTION AddTax = (
            amount : NUMERIC
        ) =>
        amount * 1.1

	FUNCTION AddTaxAndDiscount = (
			amount : NUMERIC,
			discount : NUMERIC
		) =>
		AddTax ( amount - discount )

EVALUATE
{ AddTaxAndDiscount ( 10, 2 ) }
// Returns 8.8

Parameters

DAX UDF는 0개 이상의 매개 변수를 지원합니다. 함수를 더 안전하고 예측 가능하게 하려면 선택적으로 매개 변수 형식 힌트를 지정할 수 있습니다.

  • 형식: 매개 변수가 허용하는 값 형식(AnyVal, , Scalar, TableAnyRef, CalendarRef, ColumnRefMeasureRef또는 TableRef)입니다.
  • 하위 형식(스칼라 형식에만 해당): 특정 스칼라 데이터 형식(Variant,, Int64, Decimal, Double, String, DateTimeBoolean또는 Numeric)입니다.
  • ParameterMode: 인수가 평가되는 시점(val의 경우 즉시, expr의 경우 지연).

형식 힌트는 다음과 같은 형식을 따릅니다. [type] [subtype] [parameterMode]

예: 형 변환

DEFINE
    /// returns x cast to an Int64
    FUNCTION CastToInt = (
            x : SCALAR INT64 VAL
        ) =>
        x

EVALUATE
{ CastToInt ( 3.4 ), CastToInt ( 3.5 ), CastToInt ( "5" ) }
// returns 3, 4, 5

이 예제에서는 Scalar 형식, Int64 하위 형식 및 val parameterMode를 사용합니다. 아래 예제와 같이 하위 형식을 포함하여 Int64 동일한 효과를 얻을 수도 있습니다. 숫자가 아닌 문자열은 오류가 발생합니다.

DEFINE
    /// returns x as an Int64
    FUNCTION CastToInt = (
            x : INT64
        ) =>
        x

EVALUATE
{ CastToInt ( 3.4 ), CastToInt ( 3.5 ), CastToInt ( "5" ) }
// returns 3, 4, 5

형식 검사

다음과 같은 기본 제공 DAX 형식 검사 함수를 사용하여 함수 내의 매개 변수 형식의 유효성을 검사합니다.

사용 가능한 형식 검사 함수의 전체 목록은 DAX 사용자 정의 함수를 참조하세요.

사용자 정의 함수 사용에 대한 자세한 내용은 다음 리소스를 참조하세요.