비고
DAX 사용자 정의 함수는 현재 미리 보기로 제공됩니다.
DAX 사용자 정의 함수(UDF)를 사용하면 논리를 패키징하여 다른 DAX 함수처럼 다시 사용할 수 있습니다. UDF에는 새 FUNCTION 키워드, 선택적 매개 변수 (스칼라, 테이블 및 참조) 및 작성을 더 안전하고 명확하게 만드는 형식 검사 도우미가 도입되었습니다.
UDF를 정의한 후에는 측정값, 계산 열, 시각적 계산 또는 다른 사용자 정의 함수에서 사용할 수 있습니다. 사용자는 비즈니스 규칙을 중앙 집중화하고 유지 관리 가능성을 개선하며 시간이 지남에 따라 계산을 안전하게 발전시킬 수 있습니다. 함수는 쿼리 뷰 및 DAX에서 만들고 관리할 수 있는 일류 모델 개체이며 함수 노드 아래의 모델 탐색기에서 볼 수 있습니다.
사용자 정의 함수 사용
데스크톱에서 UDF를 시도하려면 다음을 수행합니다.
- 파일 > 옵션 및 설정 > 옵션으로 이동합니다.
- 미리 보기 기능을 선택하고 사용자 정의 함수를 확인DAX합니다.
- 확인을 선택하고 Power BI Desktop을 다시 시작합니다.
사용자 정의 함수 정의 및 관리
함수를 정의하고 관리하는 여러 위치가 있습니다.
- DAX 쿼리 뷰 (DQV). DQV에서 함수를 정의하고 수정합니다. DQV에는 UDF를 빠르게 테스트하고 관리할 수 있도록 돕는 컨텍스트 메뉴 빠른 쿼리 (평가, 정의 및 평가, 그리고 이 모델의 모든 함수 정의)이 포함되어 있습니다.
- TMDL 보기. UDF는 TMDL에서 작성 및 편집할 수도 있습니다. TMDL 보기에는 상황에 맞는 메뉴 스크립트 TMDL도 포함됩니다.
- 모델 탐색기. 모델 탐색기의 함수 노드 아래에서 기존 함수를 볼 수 있습니다.
UDF를 정의할 때 다음 명명 요구 사항을 따르세요.
함수 이름:
- 모델 내에서 형식이 잘 지정되고 고유해야 합니다.
- 이름 간격에 대한 마침표(점)를 포함할 수 있습니다(예: Microsoft.PowerBI.MyFunc). 마침표로 시작하거나 끝날 수 없으며, 연속된 마침표를 포함할 수 없습니다.
- 마침표 이외의 이름에는 영숫자 또는 밑줄만 포함될 수 있습니다. 공백이나 특수 문자가 허용되지 않습니다.
- 기본 제공 DAX 함수 또는 예약어(예: measure, function, define)와 충돌해서는 안 됩니다.
매개 변수 이름:
- 영숫자 또는 밑줄만 포함할 수 있습니다. 마침표는 허용되지 않습니다.
- 예약어가 아니어야 합니다.
DAX 쿼리 뷰 사용
쿼리 뷰에서 DAX 사용자 정의 함수를 정의, 업데이트 및 평가할 수 있습니다. 쿼리 뷰에 대한 DAX 자세한 내용은 쿼리 보기를 참조DAX하세요.
일반 양식
DEFINE
/// Optional description above the function
FUNCTION <FunctionName> = ( [ParameterName]: [ParameterType], ... ) => <FunctionBody>
팁 (조언)
함수 설명에 사용합니다 /// . IntelliSense 함수 설명에는 한 줄(//) 또는 여러 줄(/* */) 주석이 표시되지 않습니다.
예: 단순 세금 함수
DEFINE
/// AddTax takes in amount and returns amount including tax
FUNCTION AddTax =
( amount : NUMERIC ) =>
amount * 1.1
EVALUATE
{ AddTax ( 10 ) }
// Returns 11
모델에 저장
쿼리 뷰에서 DAX 모델에 UDF를 저장하려면 다음을 수행합니다.
- 변경 내용이 포함된 모델 업데이트를 클릭하여 쿼리에 모든 UDF를 저장합니다.
- 또는 모델 업데이트: 정의된 함수 위에 새 함수를 추가하여 단일 UDF를 저장합니다.
TMDL 보기 사용
TMDL 보기에서 사용자 정의 함수를 정의 및/또는 업데이트할 수 있습니다. TMDL 보기에 대한 자세한 내용은 TMDL 보기를 참조하세요.
일반 양식
createOrReplace
/// Optional description above the function
function <FunctionName> = ( [ParameterName]: [ParameterType], ... ) => <FunctionBody>
예: 단순 세금 함수
createOrReplace
/// AddTax takes in amount and returns amount including tax
function AddTax =
(amount : NUMERIC) =>
amount * 1.1
모델에 저장
보기 맨 위에 있는 적용 단추를 클릭하여 스크립트의 모든 UDF를 모델에 저장합니다.
Power BI 프로젝트에서 TMDL 스크립트 사용
UDF는 Power BI 프로젝트를 사용할 때 의미 체계 모델 TMDL 스크립트에도 포함됩니다.
functions.tmdl 폴더 내에서 찾을 수 있습니다.
모델 탐색기 사용
모델 탐색기에서 Functions 노드 아래의 모델에서 모든 사용자 정의 함수를 볼 수 있습니다 . 모델 탐색기에 대한 자세한 내용은 모델 탐색기를 참조하세요.
쿼리 보기에서DAX 모델 탐색기 내 UDF의 오른쪽 클릭 메뉴에서 빠른 쿼리를 사용하여 함수를 쉽게 정의하고 평가할 수 있습니다.
TMDL 보기에서 함수를 캔버스로 끌어서 놓거나 스크립트 TMDL을 사용하여 모델 탐색기 내 UDF의 오른쪽 클릭 메뉴에서 스크립트를 생성할 수 있습니다.
DMV를 사용하여 UDF를 검사하기
DMV( 동적 관리 뷰 )를 사용하여 모델에서 UDF를 검사할 수 있습니다. 이러한 뷰를 사용하면 UDF를 비롯한 함수에 대한 정보를 쿼리할 수 있습니다.
모델에서 UDF를 검사하기 위해 INFO.FUNCTIONS 함수를 사용할 수 있습니다. 결과를 UDF로만 제한하려면 매개 변수를 ORIGIN .로 2지정합니다.
EVALUATE INFO.FUNCTIONS("ORIGIN", "2")
이 쿼리는 이름, 설명 및 관련 메타데이터를 포함하여 현재 모델에 있는 모든 UDF의 테이블을 반환합니다.
사용자 정의 함수 사용
UDF가 정의되고 모델에 저장되면 측정값, 계산 열, 시각적 계산 및 기타 UDF에서 호출할 수 있습니다. 이는 기본 제공 DAX 함수를 호출하는 것과 동일하게 작동합니다.
측정값에서 사용자 정의 함수(UDF) 호출하기
측정값에서 UDF를 사용하여 전체 필터 컨텍스트에서 재사용 가능한 논리를 적용합니다.
Total Sales with Tax = AddTax ( [Total Sales] )
예제 측정값은 아래 표에 나와 있습니다.
계산 열에서 UDF 호출
계산 열에서 UDF를 사용하여 테이블의 모든 행에 재사용 가능한 논리를 적용할 수 있습니다.
비고
계산 열에서 UDF를 사용하는 경우 함수가 일관된 형식의 스칼라를 반환하는지 확인합니다. 자세한 내용은 매개 변수 를 참조하세요. 필요한 경우 CONVERT 또는 유사한 함수를 사용하여 결과를 원하는 형식으로 변환합니다.
Sales Amount with Tax = CONVERT ( AddTax ( 'Sales'[Sales Amount] ), CURRENCY )
아래 표에서 사용된 이 예제 측정값을 확인할 수 있습니다.
시각적 계산에서 UDF 호출
시각적 계산에서 UDF를 사용하여 시각적 개체에 논리를 직접 적용할 수 있습니다. 시각적 계산에 대한 자세한 내용은 시각적 계산을 참조하세요.
비고
시각적 계산은 시각적 개체에 있는 필드에만 작동합니다. 시각적 개체의 일부가 아닌 모델 개체에 액세스할 수 없으며, 모델 개체(예: 시각적 개체에 없는 열 또는 측정값)를 이 컨텍스트의 UDF에 전달할 수 없습니다.
Sales Amount with Tax = AddTax ( [Sales Amount] )
아래 표에서 이 예제 측정값을 확인할 수 있습니다.
다른 UDF 내에서 UDF 호출하기
다른 함수에서 함수를 호출하여 UDF를 중첩할 수 있습니다. 이 예제에서는 간단한 AddTax UDF를 정의하고 다른 UDF AddTaxAndDiscount에서 호출합니다.
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
매개 변수
DAX UDF는 0개 이상의 매개 변수를 수락할 수 있습니다. UDF에 대한 매개 변수를 정의할 때 필요에 따라 각 매개 변수에 대한 형식 힌트를 지정할 수 있습니다.
-
형식: 매개 변수가 허용하는 값 형식(
AnyVal,Scalar,Table또는AnyRef)입니다. -
하위 형식(스칼라 형식에만 해당): 특정 스칼라 데이터 형식(
Variant,,Int64,Decimal,Double,String,DateTimeBoolean또는Numeric)입니다. -
ParameterMode: 인수가 평가되는 경우(
val또는expr).
형식 힌트는 다음과 같은 형식입니다. [type] [subtype] [parameterMode]
호출 사이트에서 함수를 더 안전하고 예측 가능하게 만들기 위해 각 매개 변수에 대해 이러한 형식 힌트를 모두 포함하거나 일부 또는 전혀 포함할 수 없습니다. 모든 항목을 생략하고 매개 변수 이름을 작성하면 인수가 AnyVal val호출 시 즉시 평가됨을 의미합니다. 이는 간단한 함수에 유용합니다.
유형
형식은 매개 변수가 허용하는 인수의 범주와 매개 변수가 값 또는 식으로 전달되는지 여부를 정의합니다.
UDF 매개 변수에는 DAX과 식 형식이라는 두 가지 유형 계열이 있습니다.
-
값 형식: 이 인수는 함수가 호출되고 결과 값이 함수에 전달될 때 즉시 평가 됩니다(즉시 계산).
-
AnyVal: 스칼라 또는 테이블을 허용합니다. 매개 변수에 대한 형식을 생략하는 경우 기본값입니다. -
Scalar: 스칼라 값을 허용합니다(하위 형식을 추가할 수 있습니다). -
Table: 테이블을 허용합니다.
-
-
식 형식: 이 인수는 평가되지 않은 식 (지연 계산)을 전달합니다. 함수는 평가할 시기와 컨텍스트를 결정합니다. 이는 참조 매개 변수에 필요하며 필터 컨텍스트(예: 내부 CALCULATE)를 제어해야 하는 경우에 유용합니다.
expr형식은 열, 테이블, 달력 또는 측정값에 대한 참조일 수 있습니다.-
AnyRef: 참조(열, 테이블, 달력 또는 측정값)를 허용합니다.
-
서브타입
하위 형식을 사용하면 특정 Scalar 데이터 형식을 정의할 수 있습니다. 하위 형식을 정의하는 경우 매개 변수를 형식으로 Scalar 명시적으로 정의할 필요가 없으므로 자동으로 가정됩니다.
하위 형식은 다음과 같습니다.
-
Variant: 스칼라를 허용합니다. -
Int64: 전체 numner를 허용합니다. -
Decimal: 고정 정밀도 10진수(예: 통화 또는 돈)를 허용합니다. -
Double: 부동 소수점을 허용합니다. -
String: 텍스트를 허용합니다. -
DateTime: 날짜/시간을 허용합니다. -
Boolean: 수락 /TRUEFALSE. -
Numeric: 숫자 값(Int64,Decimal또는Double하위 형식)을 허용합니다.
ParameterMode
ParameterMode는 매개 변수 식이 계산되는 시기와 위치를 제어합니다. 이는 다음과 같습니다.
-
val(즉시 계산): 함수를 호출하기 전에 식이 한 번 평가됩니다. 그런 다음 결과 값이 함수에 전달됩니다. 이는 간단한 스칼라 또는 테이블 입력에 일반적입니다. 매개 변수에 대해 parameterMode를 생략하는 경우 기본값입니다. -
expr(지연 평가): 식은 함수 내에서 계산되며, 잠재적으로 다른 컨텍스트(예: 행 컨텍스트 또는 필터 컨텍스트)에서 계산되며, 여러 번 또는 반복 내에서 참조되는 경우 여러 번 계산될 수 있습니다. 이는 참조 매개 변수에 필요하며 평가 컨텍스트를 제어해야 하는 경우에 유용합니다.
Scalar 유형은 val 또는 expr를 사용할 수 있습니다. 호출자의 컨텍스트에서 스칼라를 한 번 평가하려는 경우에 사용합니다 val . 평가를 연기하고 함수 내에서 컨텍스트를 적용하려는 경우에 사용합니다 expr .
예제: 테이블 매개 변수를 예로 참조하세요.
형식 AnyRef 은 expr 함수의 컨텍스트에서 해당 참조(열, 테이블, 측정값 등)를 평가해야 합니다.
예: 형 변환
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
예: 테이블 매개 변수(값 및 식)
UDF parameterMode가 필터 컨텍스트에 미치는 영향을 설명하기 위해 'Sales' 테이블의 행을 모두 계산하는 두 가지 함수를 고려합니다. 둘 다 본문에서 CALCULATETABLE(t, ALL('Date'))를 사용하지만, 하나의 매개 변수는 val (즉시 평가)로 선언되고, 다른 매개 변수는 expr (지연 평가)로 선언됩니다.
DEFINE
/// Table val: receives a materialized table, context can't be changed
FUNCTION CountRowsNow = (
t : TABLE VAL
) =>
COUNTROWS ( CALCULATETABLE ( t, ALL ( 'Date' ) ) )
/// Table expr: receives an unevaluated expression, context CAN be changed
FUNCTION CountRowsLater = (
t : TABLE EXPR
) =>
COUNTROWS ( CALCULATETABLE ( t, ALL ( 'Date' ) ) )
EVALUATE
{
CALCULATE ( CountRowsNow ( 'Sales' ), 'Date'[Fiscal Year] = "FY2020" ),
CALCULATE ( CountRowsLater ( 'Sales' ), 'Date'[Fiscal Year] = "FY2020" )
}
// returns 84285, 121253
CountRowsNow는 FY2020에 대한 판매 횟수만 반환합니다. 'Sales' 테이블은 함수를 입력하기 전에 연도별로 이미 필터링되었으므로 ALL('Date') 함수 내부에는 효과가 없습니다.
CountRowsLater는 모든 연도의 판매 수를 반환합니다. 이 함수는 평가되지 않은 테이블 식을 수신하여 외부 ALL('Date')연도 필터를 제거하여 평가합니다.
형식 검사
UDF의 형식 검사는 함수 본문 내에서 호출하여 전달된 매개 변수의 런타임 형식을 확인할 수 있는 새로운 기존 형식 검사 함수를 사용하여 수행할 수 있습니다. 이를 통해 UDF는 컨텍스트 제어를 사용하고, 매개 변수의 유효성을 미리 검사하고, 계산 전에 입력을 정규화할 수 있습니다.
비고
parameterMode 매개 변수의 경우 expr 함수 본문에서 매개 변수를 참조할 때 형식 검사가 수행됩니다(함수 호출 시간이 아님).
사용 가능한 형식 검사 함수
UDF는 다음 함수를 사용하여 스칼라 값을 테스트할 수 있습니다. 제공된 값이 해당 형식인지 여부에 따라 각 반환 TRUE/FALSE 됩니다.
| 카테고리 | Functions |
|---|---|
| Numeric | ISNUMERIC, ISNUMBER |
| Double | ISDOUBLE |
| 정수 | ISINT64, ISINTEGER |
| Decimal | ISDECIMAL (십진수 여부 확인), ISCURRENCY (통화 형식 여부 확인) |
| String | ISSTRING, ISTEXT |
| 불리언 (Boolean) | ISBOOLEAN, ISLOGICAL |
| 날짜 및 시간 | ISDATETIME |
예: 매개 변수가 문자열인지 확인
DEFINE
/// Returns the length of a string, or BLANK if not a string
FUNCTION StringLength = (
s
) =>
IF ( ISSTRING ( s ), LEN ( s ), BLANK () )
EVALUATE
{ StringLength ( "hello" ), StringLength ( 123 ) }
// Returns: 5, BLANK
이렇게 하면 오류가 방지되고 함수에 대한 문자열이 아닌 입력을 처리하는 방법을 결정할 수 있습니다(이 예제에서는 반환 BLANK).
예: 여러 매개 변수 형식 허용
DEFINE
/// Helper 1: get currency name by int64 key
FUNCTION GetCurrencyNameByKey = (
k : INT64
) =>
LOOKUPVALUE ( 'Currency'[Currency], 'Currency'[CurrencyKey], k )
/// Helper 2: get currency name by string code
FUNCTION GetCurrencyNameByCode = (
code : STRING
) =>
LOOKUPVALUE ( 'Currency'[Currency], 'Currency'[Code], code )
/// Accepts key (int64) or code (string) and returns the currency name
FUNCTION GetCurrencyName = (
currency
) =>
IF (
ISINT64 ( currency ),
GetCurrencyNameByKey ( currency ),
GetCurrencyNameByCode ( currency )
)
EVALUATE
{ GetCurrencyName ( 36 ), GetCurrencyName ( "USD" ) }
// returns "Euro", "US Dollar"
이 예제에서는 UDF에서 형식 검사를 사용하여 여러 입력 형식을 안전하게 수락하고 예측 가능한 단일 결과를 반환하는 방법을 보여 줍니다.
GetCurrencyName 는 정수 통화 키 또는 텍스트 통화 코드일 수 있는 하나의 인수 currency를 사용합니다. 함수는 인수 형식을 .로 ISINT64확인합니다. 입력이 정수인 경우 통화 키를 기반으로 통화 이름을 조회하는 도우미 GetCurrencyNameByKey 를 호출합니다. 입력이 정수가 아니면 통화 코드를 기반으로 통화 이름을 조회하는 도우미 GetCurrencyNameByCode 를 호출합니다.
한 번에 여러 함수 정의
UDF를 사용하면 단일 쿼리 또는 스크립트에서 여러 함수를 정의할 수 있으므로 재사용 가능한 논리를 쉽게 구성할 수 있습니다. 관련 계산 또는 도우미 루틴을 함께 캡슐화하려는 경우에 특히 유용합니다. 함수는 함께 또는 개별적으로 평가할 수 있습니다.
DEFINE
/// Multiplies two numbers
FUNCTION Multiply = (
a,
b
) =>
a * b
/// Adds two numbers and 1
FUNCTION AddOne = (
x,
y
) =>
x + y + 1
/// Returns a random integer between 10 and 100
FUNCTION RandomInt = () =>
RANDBETWEEN ( 10, 100 )
EVALUATE
{ Multiply ( 3, 5 ), AddOne ( 1, 2 ), RandomInt () }
// returns 15, 4, 98
고급 예제: 유연한 통화 변환
UDF가 더 복잡한 논리를 처리할 수 있는 방법을 DAX 보여주기 위해 통화 변환 시나리오를 살펴보겠습니다. 이 예제에서는 형식 검사 및 중첩 함수를 사용하여 지정된 날짜의 평균 또는 종료 날짜 환율을 사용하여 지정된 금액을 대상 통화로 변환합니다.
createOrReplace
function ConvertDateToDateKey =
(
pDate: scalar variant
) =>
YEAR ( pDate ) * 10000 + MONTH ( pDate ) * 100 + DAY ( pDate )
function ConvertToCurrency =
(
pCurrency:scalar variant,
pDate: scalar variant,
pUseAverageRate: scalar boolean,
pAmount: scalar decimal
) =>
var CurrencyKey =
EVALUATEANDLOG (
IF (
ISINT64 ( pCurrency ),
pCurrency,
CALCULATE (
MAX ( 'Currency'[CurrencyKey] ),
'Currency'[Code] == pCurrency
)
)
, "CurrencyKey"
)
var DateKey =
EVALUATEANDLOG (
SWITCH (
TRUE,
ISINT64 ( pDate ), pDate,
ConvertDateToDateKey ( pDate )
)
, "DateKey"
)
var ExchangeRate =
EVALUATEANDLOG (
IF (
pUseAverageRate,
CALCULATE (
MAX ( 'Currency Rate'[Average Rate] ),
'Currency Rate'[DateKey] == DateKey,
'Currency Rate'[CurrencyKey] == CurrencyKey
),
CALCULATE (
MAX ( 'Currency Rate'[End Of Day Rate] ),
'Currency Rate'[DateKey] == DateKey,
'Currency Rate'[CurrencyKey] == CurrencyKey
)
)
, "ExchangeRate"
)
var Result =
IF (
ISBLANK ( pCurrency ) || ISBLANK ( pDate ) || ISBLANK ( pAmount ),
BLANK (),
IF (
ISBLANK ( ExchangeRate ) ,
"no exchange rate available",
ExchangeRate * pAmount
)
)
RETURN Result
이 함수는 ConvertToCurrency 통화 및 날짜 모두에 대해 유연한 입력 형식을 허용합니다. 사용자는 통화 키 또는 날짜 키를 직접 제공하거나 통화 코드 또는 표준 날짜 값을 제공할 수 있습니다. 함수는 각 입력의 형식을 확인하고 그에 따라 처리합니다. 정수인 경우 pCurrency 통화 키로 처리되고, 그렇지 않으면 함수는 통화 코드를 가정하고 해당 키를 확인하려고 시도합니다.
pDate 는 비슷한 패턴을 따릅니다. 정수인 경우 날짜 키로 처리됩니다. 그렇지 않으면 함수는 표준 날짜 값이며 도우미 함수를 사용하여 ConvertDateToDateKey 날짜 키로 변환된다고 가정합니다. 함수가 유효한 exchnage 비율을 확인할 수 없는 경우 "사용 가능한 환율 없음" 메시지가 반환됩니다.
그런 다음 이 논리를 사용하여 현지 통화의 Total Sales와 같은 측정값을 정의할 수 있습니다.
Total Sales in Local Currency =
ConvertToCurrency (
SELECTEDVALUE ( 'Currency'[Code] ),
SELECTEDVALUE ( 'Date'[DateKey] ),
TRUE,
[Total Sales]
)
필요에 따라 동적 형식 문자열 과 페어링하여 결과를 적절한 통화 형식으로 표시할 수 있습니다.
CALCULATE (
MAX ( 'Currency'[Format String] ),
'Currency'[Code] == SELECTEDVALUE ( 'Currency'[Code] )
)
예제 결과는 아래 스크린샷에서 볼 수 있습니다.
고려사항 및 제한사항
사용자 정의 함수는 현재 미리 보기로 제공되며 미리 보기 중에는 다음과 같은 고려 사항 및 제한 사항에 유의하세요.
일반:
서비스에서 UDF를 작성하거나 모델링 DAX 할 수 없습니다.
모델에서 UDF를 숨기거나 숨기기 취소할 수 없습니다.
UDF를 표시 폴더에 넣을 수 없습니다.
리본에 '함수 만들기' 단추가 없습니다.
UDF를 번역과 결합할 수 없습니다.
UDF는 테이블이 없는 모델에서 지원되지 않습니다.
쿼리 뷰에 '참조를 사용하여 정의' 빠른 쿼리가 DAX 없습니다.
OLS(Object-Level Security) 는 함수로 전송되거나 그 반대로 전송되지 않습니다. 예를 들어 보안 측정
F값을 참조하는 다음 함수MyMeasure를 고려합니다.function F = () => [MyMeasure] + 42MyMeasure개체 수준 보안을 사용하여 보안이 설정되면 함수 F가 자동으로 보호되지 않습니다.F이(가)MyMeasure에 대한 액세스 없이 특정 ID로 실행될 경우,MyMeasure는 존재하지 않는 것처럼 작동합니다. 함수 이름 및 설명에 보안 개체가 노출되는 것을 방지하는 것이 좋습니다.
UDF 정의:
- 재귀 또는 상호 재귀는 지원되지 않습니다.
- 함수 오버로드가 지원되지 않습니다.
- 명시적 반환 형식은 지원되지 않습니다.
UDF 매개 변수:
- 선택적 매개 변수는 지원되지 않습니다.
- 매개 변수 설명은 지원되지 않습니다.
- UDF는 값을 반환할
enum수 없습니다. 값을 함수 매개 변수로 허용하는enum기본 제공 함수는 해당 컨텍스트에서 UDF를 사용할 수 없습니다. - 형식 힌트
expr의 언바운드 매개 변수는 평가되지 않습니다.
IntelliSense 지원:
- UDF는 라이브 연결 또는 복합 모델에서 사용할 수 있지만 IntelliSense 지원은 없습니다.
- 시각적 계산에 UDF를 사용할 수 있지만 시각적 계산 수식 표시줄에는 UDF에 대한 IntelliSense 지원이 없습니다.
- TMDL 보기에는 UDF에 대한 적절한 IntelliSense 지원이 없습니다.
알려진 버그
다음 문제는 현재 알려져 있으며 기능에 영향을 미칠 수 있습니다.
- UDF의 테이블 형식 모델 개체(예: 측정값, 테이블, 열)에 대한 참조는 해당 개체의 이름을 바꿀 때 자동으로 업데이트되지 않습니다. UDF가 의존하는 개체의 이름을 바꾸면 함수 본문에 이전 이름이 계속 포함됩니다. UDF 식을 수동으로 편집하여 이름이 바뀐 개체에 대한 모든 참조를 업데이트해야 합니다.
- UDF와 관련된 특정 고급 시나리오는 파서 불일치를 초래할 수 있습니다. 예를 들어 열을 매개 변수로
expr전달하거나 정규화되지 않은 열 참조를 사용하는 경우 사용자에게 빨간색 밑줄 또는 유효성 검사 오류가 표시될 수 있습니다.