Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Funkcje zdefiniowane przez użytkownika (UDF) w języku Data Analysis Expressions (DAX) pozwalają na pakowanie logiki DAX, która jest wielokrotnego użytku i sparametryzowana, w modelach, co ułatwia pisanie, utrzymanie i dzielenie się kodem DAX. Zamiast powtarzać formuły w miarach, kolumnach obliczeniowych i wizualizacjach, funkcje zdefiniowane przez użytkownika wnoszą elastyczność programistyczną do modeli semantycznych, pozwalając na jednokrotne definiowanie funkcji i ich wykorzystywanie wszędzie, gdzie obsługiwany jest DAX.
Funkcje definiowane przez użytkownika (UDF) w języku DAX są ogólnie dostępne w programie Power BI Desktop i usłudze Power BI od wersji z czerwca 2026 r. Aby dowiedzieć się więcej, zobacz Funkcje zdefiniowane przez użytkownika w języku DAX.
Dlaczego warto używać funkcji zdefiniowanych przez użytkownika?
- Możliwość ponownego użycia i spójność: zdefiniuj obliczenie raz i ponownie użyj go wszędzie.
- Łatwość konserwacji: Zaktualizuj logikę w jednym miejscu, aby naprawić lub rozwijać reguły.
- Bezpieczniejsze tworzenie: opcjonalne wskazówki dotyczące typów i pomocnicy sprawdzania typów obsługują przewidywalny, odporny na błędy kod.
- Obiekty modelu pierwszej klasy: funkcje zdefiniowane przez użytkownika, które działają w modelu i można je wyświetlić w Eksploratorze modeli.
Definiowanie funkcji
Funkcję zdefiniowaną przez użytkownika można zdefiniować w programie Power BI Desktop przy użyciu widoku zapytań języka DAX (DQV), widoku języka TMDL lub widoku modelu. Funkcje UDF można również wyświetlać i edytować w przeglądarce za pomocą modelowania w sieci Web w usłudze Power BI.
Składnia ogólna
Ogólna składnia funkcji zdefiniowanej przez użytkownika to:
/// Optional description above the function
/// @param {ParameterType} ParameterName - ParameterDescription
/// ...
/// @returns Return description
FUNCTION <FunctionName> = ( [<ParameterName> [: [<ParameterType>] [<ParameterSubtype>] [<ParameterPassingMode>]] [= <DefaultExpression>], ...] ) => <FunctionBody>
Przykład: Prosta funkcja podatkowa
Oto prosty przykład w DQV , który dodaje podatek do danej kwoty. Można również ocenić UDF w DQV.
DEFINE
/// AddTax takes in amount and returns amount including tax
FUNCTION AddTax = (
amount : NUMERIC
) =>
amount * 1.1
EVALUATE
{ AddTax ( 10 ) }
// Returns 11
Po zdefiniowaniu funkcji UDF, możesz zaktualizować model lub użyć Code Lens, aby dodać funkcję do modelu.
Ten sam przykład można utworzyć w widoku TMDL.
createOrReplace
/// AddTax takes in amount and returns amount including tax
function AddTax = (amount : NUMERIC) => amount * 1.1
Po zdefiniowaniu funkcji UDF możesz zatwierdzić zmiany, aby dodać tę funkcję do modelu.
Zarządzanie funkcjami zdefiniowanymi przez użytkownika
Po zdefiniowaniu i dodaniu do modelu można wyświetlać wszystkie funkcje zdefiniowane przez użytkownika i zarządzać nimi z poziomu Eksploratora modelu w węźle Funkcje .
W widoku zapytań języka DAX (DQV) można używać szybkich zapytań za pośrednictwem Eksploratora modeli, aby łatwo definiować i oceniać funkcje.
W widoku TMDL można przeciągać i upuszczać funkcje na obszar roboczy lub użyć opcji Skrypt TMDL do wykonania tej czynności w Eksploratorze modelu.
W przypadku używania Power BI Project funkcje są również przechowywane w folderze functions.tmdl w folderze definition.
Korzystanie z funkcji zdefiniowanych przez użytkownika
Po dodaniu funkcji zdefiniowanej przez użytkownika do modelu możesz użyć jej w dowolnym miejscu, w którym jest obsługiwany język DAX. W tym miejscu użyjemy AddTax jako przykładu.
Używaj UDF w pełnym kontekście filtrowania w miarach.
Total Sales with Tax = AddTax ( [Total Sales] )
Stosuj funkcje UDF do każdego wiersza w tabeli z kolumnami wyliczanymi.
Sales Amount with Tax = CONVERT ( AddTax ( 'Sales'[Sales Amount] ), CURRENCY )
Używaj funkcji UDF bezpośrednio w wizualizacjach za pomocą obliczeń wizualnych.
Sales Amount with Tax = AddTax ( [Sales Amount] )
Zagnieżdżaj UDF-y na potrzeby zaawansowanych scenariuszy.
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
Funkcje języka DAX definiowane przez użytkownika mogą przyjmować zero lub więcej parametrów. Aby zwiększyć bezpieczeństwo i przewidywalność funkcji, możesz opcjonalnie określić wskazówki dotyczące typu parametru:
-
Typ: jakiego typu wartość przyjmuje parametr (
AnyVal,Scalar, ,Table,AnyRefCalendarRef,ColumnRef, ,MeasureRef, lubTableRef). -
Podtyp (tylko dla typu skalarowego): określony typ danych skalarnych (
Variant,Int64,DecimalDoubleStringDateTimeBooleanlub ).Numeric -
ParameterMode: kiedy argument jest obliczany (
valdla zachłannych lubexprdla leniwych).
Podpowiedzi typów mają postać: [type] [subtype] [parameterMode]
Przykład: rzutowanie typu
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
W tym przykładzie użyto typu Scalar, podtypu Int64 i trybu parametru val. Możesz również osiągnąć ten sam efekt, po prostu uwzględniając podtyp Int64, jak pokazano w poniższym przykładzie. Ciągi znaków nienumeryczne powodują wystąpienie błędu.
DEFINE
/// returns x as an Int64
FUNCTION CastToInt = (
x : INT64
) =>
x
EVALUATE
{ CastToInt ( 3.4 ), CastToInt ( 3.5 ), CastToInt ( "5" ) }
// returns 3, 4, 5
Sprawdzanie typów
Zweryfikuj typy parametrów wewnątrz funkcji przy użyciu wbudowanych funkcji sprawdzania typów języka DAX, takich jak:
Aby uzyskać pełną listę dostępnych funkcji sprawdzania typów, zobacz Funkcje zdefiniowane przez użytkownika w języku DAX.
Treści powiązane
Aby uzyskać więcej informacji na temat korzystania z funkcji zdefiniowanych przez użytkownika, zobacz następujące zasoby: