M365Con 2027 – 무료 온라인 컨퍼런스 · 11–22 Jan 2027 · 120 sessions→ m365con.net

블로그 · Mirko Peters

DAX UDF 이해하기: VAL과 EXPR 비교 정리

By ·

팟캐스트 컴패니언 블로그에 다시 오신 것을 환영합니다! 이번 에피소드에서는 DAX 사용자 정의 함수(UDF)의 강력한 세계를 깊이 있게 다뤘습니다. 여러분이 지금까지 …

Automatically translated with AI from the original post. Read the English original

▶ BLOGDemystifying DAX UDFs:VAL vs. EXPR ExplainedM365.FM
Titelbild: Demystifying DAX UDFs: VAL vs. EXPR Explained

팟캐스트 동반 블로그에 다시 오신 것을 환영합니다! 최신 에피소드에서는 DAX 사용자 정의 함수(UDF)의 세계를 깊이 있게 살펴보았습니다. Power BI나 Analysis Services에서 UDF를 실험해 보셨다면, 코드 중복을 없애고 비즈니스 로직을 한곳에 모으는 데 매우 유용하다는 것을 아실 겁니다. 하지만 매개 변수 모드의 차이를 이해하지 않은 채 고급 모델링에 뛰어들면, 조용한 버그, 예상치 못한 합계, 그리고 골치 아픈 쿼리 시간 초과로 이어지기 쉽습니다. 실제 사례와 함께 전체 오디오 해설을 듣고 싶으시다면 DAX UDF VAL vs EXPR: Prevent Timeouts and Wrong Totals 동반 에피소드를 꼭 들어보시기 바랍니다.

이 글에서는 VAL과 EXPR 매개 변수 모드의 핵심 차이를 자세히 다루겠습니다. 글을 끝까지 읽으시면, 정적 값을 캡처해야 할 때와 컨텍스트를 인식하는 동적 식을 적용해 시맨틱 모델을 빠르고 정확하게 유지해야 할 때를 정확히 알 수 있게 됩니다.

DAX UDF 개요

DAX UDF란 무엇인가요?

DAX 사용자 정의 함수(UDF)를 사용하면 데이터 모델 전반에서 재사용할 수 있는 사용자 지정 계산을 만들 수 있습니다. 같은 수식을 여러 번 작성하는 대신 한 번 함수로 정의하고, 필요한 곳에서 그 함수를 호출하면 됩니다. 이 방식은 작업을 체계적이고 일관되게 유지하는 데 도움이 됩니다.

DAX UDF를 보고서를 위한 빌딩 블록으로 생각해 보십시오. 로직을 캡슐화하므로 같은 내용을 반복해서 작성할 필요가 없습니다. 이는 시간을 절약하고 오류를 줄여 줍니다. 또한 이러한 함수를 팀과 공유할 수 있어 협업이 한결 수월해집니다.

데이터 분석 분야의 다른 사용자 정의 함수와 비교했을 때 DAX UDF의 특징을 간단히 살펴보겠습니다.

기능설명
중앙 집중식 로직DAX UDF를 사용하면 DAX 계산을 중앙에서 정의하고 재사용할 수 있으므로, 모델을 더 쉽게 관리하고 변경할 수 있습니다.
재사용성서로 다른 DAX 식과 시맨틱 모델 전반에서 로직을 캡슐화하고 재사용할 수 있습니다.
시간 효율성여러 모델과 프로젝트에서 DAX를 재사용할 때 시간을 절약할 수 있습니다.
성능 향상여러 단계로 쌓인 측정값 계산이 필요한 상황에서 성능을 높이고, 수식 엔진의 오버헤드를 줄일 수 있습니다.
조직화 개선DAX UDF는 모델을 체계적으로 구성하고, 하위 계산과 보고서에서의 활용도를 높이는 데 도움이 됩니다.

DAX UDF의 중요성

DAX 사용자 정의 함수를 사용하면 보고서 개발이 여러 면에서 향상됩니다. 첫째, 모델이 더 깔끔해지고 유지 관리가 쉬워집니다. 함수를 업데이트하면 이를 사용하는 모든 측정값이 자동으로 업데이트됩니다. 그만큼 실수할 가능성이 줄어들고 보고서의 일관성도 유지됩니다.

DAX UDF는 확장성도 높여 줍니다. 보고서가 복잡해지거나 느려지지 않고 성장할 수 있도록 도와줍니다. 복잡한 계산을 단계별로 구축한 다음, 그 단계를 모델의 다른 부분에서 재사용할 수 있습니다. 이러한 모듈식 설계 덕분에 작업 효율이 높아집니다.

DAX UDF를 사용하면 다음과 같은 주요 이점을 얻을 수 있습니다.

  • 로직 중복을 줄여 오류를 낮추고 시간을 절약합니다.
  • 비즈니스 규칙을 한 곳에서 업데이트하면 모든 곳에 변경 사항이 반영됩니다.
  • 팀을 위한 공유 함수 라이브러리를 제공해 협업을 개선합니다.
  • 보고서 개발을 단순화하여 필요한 시간을 최대 70~80%까지 줄입니다.

기존 DAX 수식과 비교했을 때 DAX UDF는 성능도 크게 향상시킬 수 있습니다. 예를 들어, 일부 테스트에서는 UDF를 사용해 계산 시간이 6000밀리초 이상에서 160밀리초 조금 넘는 수준으로 줄었습니다. 97% 개선된 수치입니다.

DAX 사용자 정의 함수를 익히면 데이터 모델을 더 잘 제어할 수 있습니다. 더 빠르고, 유지 관리가 쉬우며, 더 신뢰할 수 있는 보고서를 만들 수 있습니다. 이 기술은 비즈니스 요구를 충족하는 고품질 분석을 제공하는 데 도움이 됩니다.

DAX UDF를 잘못 사용하는 실수 방지: 흔한 실수

데이터 형식 이해 부족

DAX UDF를 사용할 때 많은 사용자가 데이터 형식에 어려움을 겪습니다. 매개 변수에 올바른 형식을 사용하는 것의 중요성을 간과하는 경우가 많습니다. 이러한 오해는 예상치 못한 결과로 이어질 수 있습니다. 예를 들어, 숫자를 기대하는 함수에 텍스트 값을 전달하면 계산이 실패하거나 잘못된 결과가 반환될 수 있습니다.

데이터 형식과 관련된 흔한 함정은 다음과 같습니다.

  • 사용자는 숫자 형식과 텍스트 형식을 자주 혼동합니다.
  • DAX가 날짜를 숫자로 처리한다는 점을 모를 수 있으며, 이로 인해 계산이 복잡해질 수 있습니다.
  • 데이터 형식을 잘못 사용하면 모델 성능이 저하되어 보고서가 느려질 수 있습니다.

잘못된 구문 사용

구문 오류도 DAX UDF를 사용할 때 자주 발생하는 또 다른 문제입니다. 코드에 작은 실수가 있어도 계산 실행이 중단될 수 있습니다. 구문 오류가 발생하면 DAX는 식 편집기에 노란색 경고 기호를 표시합니다. 이 기호는 무언가 잘못되었음을 알려주지만, 정확한 문제가 무엇인지는 항상 명확하게 보여주지 않습니다.

피해야 할 대표적인 구문 실수는 다음과 같습니다.

  • 괄호 또는 대괄호를 닫지 않는 경우
  • 함수 이름이 잘못되었거나 철자가 틀린 경우
  • 인수를 쉼표로 구분하지 않는 경우

이러한 오류는 답답함과 시간 낭비로 이어질 수 있습니다. DAX 식을 실행하기 전에 항상 구문을 다시 확인하십시오.

오류 처리 누락

DAX UDF의 안정성을 유지하려면 효과적인 오류 처리가 매우 중요합니다. 많은 사용자가 이 부분을 소홀히 하는데, 그 결과 계산이 실패할 수 있습니다. 예를 들어 함수가 예상하지 못한 입력 형식을 받으면 유용한 결과 대신 오류를 반환할 수 있습니다.

이러한 문제를 방지하려면 다음 전략을 고려하십시오.

  • IFERROR() 함수를 사용하여 대체 값을 제공합니다. 이렇게 하면 오류로 인해 시각적 개체가 방해받는 것을 막을 수 있습니다.
  • ISBLANK()를 활용하여 실제로 비어 있는 값을 확인하고, 0이나 빈 문자열과 구별합니다.
  • COALESCE()를 구현하여 식 목록에서 공백이 아닌 첫 번째 값을 반환합니다.

입력 형식을 확인하는 함수를 정의할 수도 있습니다. 예를 들어 ISSTRING()을 사용하여 입력이 문자열인지 확인합니다. 문자열이 아니면 BLANK()를 반환합니다. 이 방식을 사용하면 계산이 안정적이고 신뢰할 수 있게 유지됩니다.

이러한 일반적인 실수를 피하면 DAX UDF를 개선하고 전체 데이터 모델의 성능도 높일 수 있습니다. VAL과 EXPR을 올바르게 사용하는 방법을 이해하는 것이 DAX 사용자 정의 함수의 잠재력을 최대로 끌어내는 핵심이라는 점을 기억하십시오.

DAX의 VAL 이해하기

VAL의 목적

DAX의 VAL 함수는 명확한 목적이 있습니다. 숫자를 나타내는 텍스트를 실제 숫자 값으로 변환합니다. 이 함수는 다양한 형식으로 들어오는 데이터를 다룰 때 필수적입니다. 예를 들어 데이터 원본에서 숫자가 텍스트로 전달되는 경우, VAL을 사용하여 이를 사용 가능한 숫자 형식으로 변환할 수 있습니다. 이 변환을 통해 정확하게 계산을 수행할 수 있습니다.

다음과 같은 경우에 VAL을 사용해야 합니다.

  • 계산이 숫자 값을 기준으로 올바르게 작동하도록 해야 할 때
  • 숫자 대신 텍스트를 사용해서 발생하는 오류를 피하고 싶을 때
  • 올바른 형식이 항상 보장되지 않는 사용자 입력을 다룰 때

VAL 구문

VAL 함수의 구문은 간단합니다.

VAL(<text>)
  • <text>: 숫자로 변환할 텍스트 문자열을 나타냅니다. 직접 입력한 텍스트일 수도 있고, 텍스트 값을 포함한 열에 대한 참조일 수도 있습니다.

VAL 함수를 사용하는 간단한 예는 다음과 같습니다.

SalesAmount = VAL('Sales'[SalesText])

이 예에서 함수는 'SalesText' 열의 텍스트를 숫자 값으로 변환하므로, 이 값을 기준으로 계산을 수행할 수 있습니다.

VAL 사용 예

DAX에서 VAL 함수를 사용하는 몇 가지 실제 예를 살펴보겠습니다.

  1. 기본 변환: 매출 금액이 텍스트로 저장된 'RevenueText'라는 열이 있다고 가정합니다. 다음과 같이 측정값을 만들어 이 값을 숫자로 변환할 수 있습니다.

    TotalRevenue = SUMX('Sales', VAL('Sales'[RevenueText]))

    이 측정값은 각 텍스트 항목을 숫자로 변환하여 총매출을 계산합니다.

  2. 사용자 입력 처리: 사용자가 숫자를 텍스트로 입력하는 상황이라면, VAL을 사용하여 계산의 정확성을 유지할 수 있습니다. 예를 들어 사용자가 판매 목표를 텍스트로 입력한 경우 다음과 같이 변환할 수 있습니다.

    SalesTarget = VAL(UserInput[TargetText])

    이렇게 하면 판매 목표를 기준으로 한 계산이 정확하게 유지됩니다.

  3. 오류 방지: VAL을 사용하면 보고서의 오류를 방지하는 데 도움이 됩니다. 텍스트 값을 변환하지 않고 계산을 수행하면 문제가 발생할 수 있습니다. VAL을 사용하면 이러한 오류를 예방할 수 있습니다.

    AdjustedSales = IF(ISERROR(VAL('Sales'[SalesText])), 0, VAL('Sales'[SalesText]))

    이 예에서 변환에 실패하면 측정값은 오류를 일으키는 대신 0을 반환합니다.

VAL 함수의 목적과 올바른 사용법을 이해하면 DAX 사용자 정의 함수를 더욱 효과적으로 활용할 수 있습니다. 이 지식을 통해 데이터를 더 효율적으로 처리하고 계산 결과의 정확성을 보장할 수 있습니다.

DAX의 EXPR 이해하기

EXPR의 목적

DAX에서 EXPR 매개 변수 모드는 사용자 정의 함수가 데이터 모델의 변경 사항에 동적으로 반응하도록 할 때 중요한 역할을 합니다. 함수 호출 시점에 고정된 값을 캡처하는 VAL과 달리, EXPR을 사용하면 함수가 실행될 때마다 평가되는 식을 전달할 수 있습니다. 즉, 계산이 서로 다른 필터 컨텍스트나 행 컨텍스트에 자동으로 맞춰질 수 있습니다.

함수가 변화하는 데이터 조건에 반응해야 할 때는 EXPR을 사용하는 것이 좋습니다. 예를 들어 현재 필터나 슬라이서 선택에 따라 달라지는 측정값을 계산하려는 경우, EXPR을 사용하면 그 로직을 식으로 전달할 수 있습니다. 이러한 유연성 덕분에 사용자 정의 함수의 활용도가 높아지고 컨텍스트를 더 잘 인식할 수 있습니다.

팁: EXPR을 사용하면 사용자 상호 작용이나 데이터 필터에 따라 업데이트되는 동적 계산을 만들 수 있습니다. 이를 통해 실시간 인사이트를 반영하는 보고서를 구축하는 데 도움이 됩니다.

EXPR 구문

DAX 사용자 정의 함수에서 EXPR을 사용하려면 매개 변수를 식으로 선언해야 합니다. 일반적인 형식은 다음과 같습니다.

DEFINE FUNCTION MyFunction(EXPR paramName AS EXPRESSION)
RETURNS <return_type>
AS
BEGIN
    RETURN <calculation_using paramName>
END
  • paramName: 식을 받을 매개 변수의 이름입니다.
  • EXPRESSION: 매개 변수가 고정된 값이 아니라 식을 받도록 지정합니다.

함수를 호출할 때는 단순한 값 대신 DAX 식을 전달합니다. 함수는 현재 필터 또는 행 컨텍스트를 고려하여 이 식을 실행할 때마다 평가합니다.

EXPR 사용 예제

DAX 사용자 정의 함수에서 EXPR이 어떻게 작동하는지 이해하기 위해 몇 가지 실제 예제를 살펴보겠습니다.

  1. 동적 필터링 예제

필터 식을 동적으로 전달할 수 있으면서 총매출을 계산하는 함수를 만든다고 가정해 보겠습니다.

DEFINE FUNCTION TotalSalesWithFilter(EXPR FilterExpression AS EXPRESSION)
RETURNS DECIMAL
AS
BEGIN
    RETURN CALCULATE(SUM(Sales[Amount]), FilterExpression)
END

이 함수를 호출할 때 서로 다른 필터 식을 전달할 수 있습니다.

TotalSalesWithFilter(FILTER(Sales, Sales[Region] = "West"))

이 호출은 West 지역의 총매출만 계산합니다. 함수는 전달된 컨텍스트에 맞춰 필터 식을 매번 평가합니다.

  1. 컨텍스트에 민감한 계산

EXPR을 사용하여 현재 행 또는 필터 컨텍스트에 따라 달라지는 측정값이나 계산을 전달할 수도 있습니다.

DEFINE FUNCTION CalculateMargin(EXPR SalesExpr AS EXPRESSION, EXPR CostExpr AS EXPRESSION)
RETURNS DECIMAL
AS
BEGIN
    RETURN SalesExpr - CostExpr
END

SUM(Sales[Amount]) 및 SUM(Sales[Cost])와 같은 식으로 이 함수를 호출하면 현재 필터를 기준으로 마진을 동적으로 계산할 수 있습니다.

  1. CALCULATE와 함께 EXPR 사용

컨텍스트 전환을 적용하려면 EXPR 매개 변수를 항상 CALCULATE로 감싸십시오. 이렇게 하면 원하는 필터 컨텍스트에서 식이 올바르게 평가됩니다.

참고: 고정된 값을 전달하거나 식을 CALCULATE로 감싸지 않은 채 EXPR을 잘못 사용하면 예기치 않은 결과가 발생할 수 있습니다.

DAX 사용자 정의 함수에서 EXPR을 익히면 유연하고 컨텍스트를 인식하는 계산을 작성할 수 있습니다. 이 기술은 사용자 선택과 데이터 변화에 정확하게 반응하는 보고서를 구축하는 데 도움이 됩니다.

DAX 사용자 정의 함수 모범 사례

효과적인 사용 팁

DAX 사용자 정의 함수를 최적화하려면 다음 모범 사례를 따르십시오.

  • EXPR 매개 변수를 사용할 때는 컨텍스트 전환 문제를 주의하십시오. 컨텍스트 전환은 제대로 관리하지 않으면 예기치 않은 결과로 이어질 수 있습니다.
  • 복잡한 시나리오에는 CALCULATE를 활용하십시오. 이 함수는 테이블 컨텍스트를 효과적으로 관리하여 계산이 의도한 로직을 반영하도록 합니다.
  • 모듈식 개발을 강조하십시오. 복잡한 로직을 관리하기 쉬운 단위로 나누십시오. 이 방식은 유지 관리를 간소화하고 성능을 향상시킵니다.
  • 팀 전체에서 비즈니스 로직을 표준화하십시오. 함수를 정의하고 사용하는 방식이 일관될수록 협업이 강화되고 중복이 줄어듭니다.
  • 계산을 한곳에서 최적화하십시오. 이 방식을 사용하면 여기저기 찾아다니지 않고 로직을 업데이트하여 성능과 유지 관리성을 개선할 수 있습니다.

일반적인 시나리오와 해결 방법

VAL과 EXPR을 언제 사용할지 이해하면 DAX UDF를 크게 개선할 수 있습니다. 다음은 일반적인 시나리오입니다.

  • 매개 변수 값이 고정되어 있거나 행 컨텍스트에 의존하지 않을 때는 VAL 매개 변수를 사용하십시오. 예를 들어 고정된 임계값이 필요하다면 VAL이 올바른 선택입니다.
  • 매개 변수를 서로 다른 행 컨텍스트에서 평가해야 할 때는 EXPR 매개 변수를 선택하십시오. 이러한 유연성 덕분에 테이블을 반복하거나 계산된 지표를 기준으로 필터링하는 등 동적 계산이 가능해집니다.

다음은 이러한 점을 보여 주는 구체적인 예제입니다.

  1. BestCustomers 함수에서 EXPR 매개 변수를 사용하면 각 고객에 대해 지표를 평가할 수 있어 정확한 결과를 얻을 수 있습니다.
  2. VAL 매개 변수를 사용하면 함수가 측정값을 한 번만 계산합니다. 컨텍스트가 바뀌면 잘못된 결과나 빈 결과가 나올 수 있습니다.
  3. 컨텍스트 전환은 매우 중요합니다. EXPR 매개 변수는 CALCULATE로 명시적으로 관리하여 올바르게 계산되도록 할 수 있습니다.

이러한 모범 사례를 적용하면 DAX 사용자 정의 함수의 유지 관리를 간소화하고 성능을 개선할 수 있습니다. 이 방식은 계산을 더 나아지게 할 뿐만 아니라 데이터 모델의 장기적인 효율성에도 기여합니다.


이 블로그에서는 DAX 사용자 정의 함수에서 VAL과 EXPR이 갖는 의미를 살펴보았습니다. 이러한 개념을 이해하면 흔히 저지르는 실수를 피하고 데이터 모델을 개선하는 데 도움이 됩니다.

  • VAL은 고정된 값을 캡처하는 반면, EXPR은 동적 계산을 가능하게 합니다.
  • 이러한 함수를 올바르게 사용하면 정확성과 성능이 향상됩니다.

이 지식을 적용하면 더 효과적인 DAX UDF를 만들 수 있습니다. 오늘부터 이러한 방법을 실천하여 데이터 분석 역량을 한 단계 높여 보세요! 🚀 전체 오디오 설명과 논의를 확인하려면 관련 에피소드 DAX UDF VAL vs EXPR: Prevent Timeouts and Wrong Totals도 꼭 살펴보세요.

자주 묻는 질문

DAX에서 VAL과 EXPR의 차이점은 무엇인가요?

VAL은 함수가 호출되는 시점의 고정된 값을 캡처합니다. EXPR은 식을 동적으로 계산하여 필터 또는 행 컨텍스트의 변화에 맞춰 적응합니다.

VAL은 언제 사용해야 하나요?

상수 숫자 값이 필요할 때 VAL을 사용하세요. 임곗값처럼 입력이 컨텍스트에 따라 바뀌지 않는 시나리오에 적합합니다.

EXPR이 더 나은 선택이 되는 경우는 언제인가요?

계산이 변화하는 데이터 조건에 반응해야 할 때 EXPR을 선택하세요. 사용자 상호 작용이나 필터에 따라 동적으로 평가할 수 있습니다.

같은 함수에서 VAL과 EXPR을 함께 사용할 수 있나요?

네, 함수에서 VAL과 EXPR을 함께 사용할 수 있습니다. 고정 값이 필요한지 동적 식이 필요한지에 따라 적절히 사용하는지 확인하세요.

DAX UDF의 성능은 어떻게 개선할 수 있나요?

성능을 높이려면 함수 안의 복잡한 계산을 최소화하세요. 정적 값에는 VAL을 사용하고, EXPR 평가는 CALCULATE로 감싸서 컨텍스트 전환을 효과적으로 관리하세요.

DAX UDF를 사용할 때 피해야 할 흔한 실수는 무엇인가요?

데이터 형식을 잘못 사용하거나, 구문이 잘못되거나, 오류 처리를 소홀히 하는 것을 피하세요. 이러한 실수는 부정확한 결과를 초래하고 데이터 모델의 성능을 떨어뜨릴 수 있습니다.

DAX UDF를 테스트할 방법이 있나요?

네, 샘플 보고서를 만들거나 DAX Studio를 사용하여 DAX UDF를 테스트할 수 있습니다. 이를 통해 성능을 평가하고 계산의 정확성을 확인할 수 있습니다.

DAX UDF에 관한 자료는 어디에서 더 찾을 수 있나요?

DAX UDF에 관한 추가 자료는 Microsoft 공식 문서, 온라인 강좌, 커뮤니티 포럼에서 찾을 수 있습니다. 이러한 플랫폼에서 유용한 통찰과 예제를 얻을 수 있습니다.

Entities in this article

Azure Functions DAX user-defined functions (UDFs) Power BI Data analyst Filter context

Related articles

RSS