DAX-brukerdefinerte funksjoner

Med DAX-brukerdefinerte funksjoner (UDF-er) med Data Analysis Expressions kan du pakke gjenbrukbar, parametrisert DAX-logikk i modellene dine, noe som gjør DAX-koden enklere å skrive, vedlikeholde og dele. I stedet for å gjenta formler på tvers av mål, beregnede kolonner og visualobjekter, gir UDF-er fleksibilitet i programmeringsstil til de semantiske modellene dine, slik at du kan definere funksjoner én gang og bruke dem overalt der DAX støttes.

DAX UDF-er er generelt tilgjengelige i Power BI Desktop og Power BI Service fra og med juni 2026-utgivelsen. Hvis du vil ha mer informasjon, kan du se DAX brukerdefinerte funksjoner.

Hvorfor bruke brukerdefinerte funksjoner?

  • Gjenbrukbarhet og konsistens: Definer en beregning én gang, og bruk den på nytt overalt.
  • Vedlikehold: Oppdater logikk på ett sted for å fikse eller utvikle regler.
  • Sikrere redigering: Valgfrie typetips og typekontrollhjelpere støtter forutsigbar, feilbestandig kode.
  • Førsteklasses modellobjekter: UDF-er finnes i modellen og kan vises i Model Explorer.

Definere en funksjon

Du kan definere en brukerdefinert funksjon i Power BI Desktop ved hjelp av DAX-spørringsvisning (DQV), TMDL-visning eller modellvisning. Du kan også vise og redigere UDF-er i nettleseren gjennom nettmodellering for Power BI-tjenesten.

Generell syntaks

Den generelle syntaksen 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: Enkel avgiftsfunksjon

Her er et enkelt eksempel i DQV som legger skatt på det gitte beløpet. 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 definert, kan du oppdatere modellen eller bruke kodelinsen til å legge til funksjonen i modellen.

Skjermbilde av DAX-spørringsvisningen i Power BI Desktop, og fremhever to steder hvor du kan lagre en brukerdefinert funksjon. Den første er oppdateringsmodellen med endringsknappen øverst i visningen. Den andre er en statuslinje i kodeeditoren merket Oppdater modell: Legg til ny funksjon.

Det samme eksempelet kan opprettes i TMDL-visning.

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

Etter at en UDF er definert, kan du gjøre endringer for å legge funksjonen til modellen din.

Skjermbilde av TMDL-visningen i Power BI Skrivebordet, med markering av Apply-knappen øverst i visningen. Denne knappen er stedet hvor du kan lagre en brukerdefinert funksjon.

Administrer brukerdefinerte funksjoner

Når den er definert og lagt til i modellen, kan du se og administrere alle brukerdefinerte funksjoner fra Modellutforskeren under Funksjoner-noden .

Skjermbilde av et modellutforskerpanel i skrivebordet Power BI som viser den utvidede Funksjoner-noden. Tre brukerdefinerte funksjoner er listet: AddTax, AverageOrderValue og CustomerLifetimeValue.

I DAX query view (DQV) kan du bruke Quick Queries gjennom Model Explorer for enkelt å definere og evaluere funksjoner.

Skjermbilde av et modellutforskerpanel i Power BI Desktop viser den utvidede Funksjoner-noden. To kontekstmenyer er åpne: den første menyen tilbyr raske spørringer, Omdøp, Slett fra modellen, Skjul i rapportvisning, Fjern alle, Kollapser alle, og Utvid alle. Quick query er markert og valgt. Den andre menyen er markert og tilbyr raske spørringsalternativer Evaluate, Define and evaluate, Define new function og Define all functions i denne modellen.

I TMDL-visning kan du dra og slippe funksjoner inn på lerretet eller bruke Script TMDL gjennom Modellutforskeren.

Skjermbilde av et modellutforskerpanel i Power BI Desktop viser den utvidede Funksjoner-noden. To kontekstmenyer er åpne: den første menyen gir Script TMDL til, Omdøp, Slett fra modellen, Skjul i rapportvisning, Fjern alle, Kollapser alle og Utvid alle. Skriptet til TMDL er markert og valgt. Den andre menyen er markert og tilbyr Script to TMDL-alternativene Script-fanen og Clipboard.

Hvis man bruker en Power BI Project, lagres funksjonene også i functions.tmdl i mappen definition.

Visual Studio Code-skjermbilde av et Power BI-prosjekt. Utforsker er åpen for mappen for semantisk modell. 'functions.tmdl' er åpen i koderedigeringsprogrammet. Tre funksjoner vises: CustomerLifetimeValue, AverageOrderValue og AddTax.

Bruk brukerdefinerte funksjoner

Etter å ha lagt til en UDF i modellen, kan du bruke den hvor som helst DAX støttes. Her bruker AddTax vi som eksempel.

Bruk UDF-er med full filterkontekst med målinger.

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

Bruk UDF-er på hver rad i en tabell med beregnede kolonner.

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

Bruk UDF-er direkte i visuelle bilder med visuelle beregninger.

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

Neste UDF-er for avanserte scenarioer.

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 støtter null eller flere parametere. For å gjøre funksjonene dine tryggere og mer forutsigbare kan du valgfritt spesifisere parametertype-hint:

  • Type: hvilken type verdi parameteren aksepterer (AnyVal, Scalar, , TableAnyRef, , CalendarRef, ColumnRef, MeasureRef, , eller TableRef).
  • Undertype (bare for skalartype): den spesifikke skalardatatypen (Variant, Int64, Decimal, DoubleStringDateTimeBoolean, eller ).Numeric
  • ParameterMode: når argumentet evalueres (val for ivrig eller expr for lat).

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

Eksempel: Type casting

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 eksempelet bruker en Scalar type, Int64 subtype og val parameterMode. Du kan også oppnå samme effekt ved bare å inkludere Int64 undertypen som vist i eksempelet nedenfor. Ikke-numeriske strenger gir en feil.

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

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

Typekontroll

Valider parametertyper inne i funksjonen din ved hjelp av innebygde DAX-typekontrollfunksjoner som:

For en komplett liste over tilgjengelige typekontrollfunksjoner, se DAX brukerdefinerte funksjoner.

For mer informasjon om bruk av brukerdefinerte funksjoner, se følgende ressurser: