DAX brugerdefinerede funktioner

DAX-brugerdefinerede funktioner (UDF'er (Data Analysis Expressions) giver dig mulighed for at pakke genanvendelig, parametriseret DAX-logik i dine modeller, hvilket gør din DAX-kode nemmere at skrive, vedligeholde og dele. I stedet for at gentage formler på tværs af målinger, beregnede kolonner og visualiseringer giver UDF'er dine semantiske modeller fleksibilitet i programmeringsstil, så du kan definere funktioner én gang og bruge dem overalt, hvor DAX understøttes.

DAX UDF'er er generelt tilgængelige i Power BI Desktop og Power BI Service fra og med juni 2026-udgivelsen. Du kan få mere at vide under DAX-brugerdefinerede funktioner.

Hvorfor bruge brugerdefinerede funktioner?

  • Genbrug og konsistens: Definer en beregning én gang, og genbrug den overalt.
  • Vedligeholdelse: Opdater logik ét sted for at rette eller udvikle regler.
  • Sikrere oprettelse: Valgfrie typetip og hjælpere til typekontrol understøtter forudsigelig, fejlbestandig kode.
  • Førsteklasses modelobjekter: UDF'er findes i modellen og kan ses i Model Explorer.

Definere en funktion

Du kan definere en brugerdefineret funktion i Power BI Desktop ved hjælp af DAX-forespørgselsvisning (DQV) eller TMDL-visning.

Generel syntaks

Den generelle syntaks for en UDF er:

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

Eksempel: Simpel momsfunktion

Her er et simpelt eksempel i DQV , der tilføjer skat til det givne beløb. Du kan også evaluere UDF'er i DQV.

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

EVALUATE
{ AddTax ( 10 ) }
// Returns 11

Når en UDF er defineret, kan du opdatere modellen eller bruge kodelinsen til at tilføje funktionen til din model.

Skærmbillede af DAX-forespørgselsvisning i Power BI Desktop, hvor to steder fremhæves, hvor du kan gemme en brugerdefineret funktion. Den første er opdateringsmodellen med ændringsknappen øverst i visningen. Den anden er en statuslinje i kodeeditoren mærket Opdateringsmodel: Tilføj ny funktion.

Det samme eksempel kan oprettes i TMDL-visningen.

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

Efter en UDF er defineret, kan du anvende ændringer for at tilføje funktionen til din model.

Skærmbillede af TMDL-visning i Power BI Desktop, hvor Apply-knappen øverst i visningen fremhæves. Denne knap er stedet, hvor du kan gemme en brugerdefineret funktion.

Administrer brugerdefinerede funktioner

Når den er defineret og tilføjet til modellen, kan du se og administrere alle brugerdefinerede funktioner fra Model Explorer under Functions-noden .

Skærmbillede af et modeludforskerpanel i Power BI Desktop, der viser den udvidede Funktioner-node. Tre brugerdefinerede funktioner er opført: AddTax, AverageOrderValue og CustomerLifetimeValue.

I DAX query view (DQV) kan du bruge Quick Queries gennem Model Explorer til nemt at definere og evaluere funktioner.

Skærmbillede af en model explorer-panel i Power BI Desktop viser den udvidede Funktioner-node. To kontekstmenuer er åbne: den første menu tilbyder hurtige forespørgsler, Omdøb, Slet fra model, Skjul i rapportvisning, Afvis alle, Sammenlæg alle og Udvid alle. Hurtigforespørgslen markeres og vælges. Den anden menu er fremhævet og tilbyder hurtige forespørgsler som Evaluate, Define and evaluate, Define new function og Define all functions i denne model.

I TMDL-visning kan du trække og slippe funktioner ind i lærredet eller bruge Script TMDL til at bruge Model Explorer via Model-stifinderen.

Skærmbillede af en model explorer-panel i Power BI Desktop viser den udvidede Funktioner-node. To kontekstmenuer er åbne: den første menu giver Script TMDL til, Omdøb, Slet fra modellen, Skjul i rapportvisning, Afhid alle, Sammenlæg alle og Udvid alle. Script til TMDL markeres og vælges. Den anden menu er fremhævet og tilbyder Script til TMDL-mulighederne Script-fanen og Clipboard.

Hvis man bruger en Power BI Project, gemmes funktionerne også i functions.tmdl i mappen definition.

Visual Studio Code-skærmbillede af et Power BI-projekt. Stifinder er åben for mappen med semantisk model. 'functions.tmdl' er åben i kodeeditoren. Der vises tre funktioner: CustomerLifetimeValue, AverageOrderValue og AddTax.

Brug brugerdefinerede funktioner

Efter at have tilføjet en UDF til modellen, kan du bruge den hvor som helst, DAX understøttes. Her bruger AddTax vi som eksempel.

Brug UDF'er med fuld filterkontekst og målinger.

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

Anvend UDF'er på hver række i en tabel med beregnede kolonner.

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

Brug UDF'er direkte i visuelle analyser med visuelle beregninger.

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

Nest UDF'er til avancerede scenarier.

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

Parametre

DAX UDF'er understøtter nul eller flere parametre. For at gøre dine funktioner sikrere og mere forudsigelige kan du valgfrit specificere parametertype-hints:

  • Type: hvilken type værdi parameteren accepterer (AnyVal, Scalar, , Table, AnyRef, CalendarRef, ColumnRef, , MeasureRef, eller TableRef).
  • Undertype (kun for skalartype): den specifikke skalardatatype (Variant, Int64, Decimal, Double, StringDateTimeBoolean, eller ).Numeric
  • ParameterMode: når argumentet evalueres (val for ivrig eller expr for doven).

Typetips følger formen: [type] [subtype] [parameterMode]

Eksempel: Type støbning

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

Dette eksempel bruger en Scalar type, Int64 subtype og val parameterMode. Du kan også opnå samme effekt ved blot at inkludere undertypen, Int64 som ses i eksemplet nedenfor. Ikke-numeriske strenge resulterer i en fejl.

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

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

Kontrol af type

Validér parametertyper inde i din funktion ved hjælp af indbyggede DAX-typekontrolfunktioner såsom:

For en komplet liste over tilgængelige typekontrolfunktioner, se DAX brugerdefinerede funktioner.

For mere information om brug af brugerdefinerede funktioner, se følgende ressourcer: