DAX-användardefinierade funktioner

Med dax-användardefinierade funktioner (UDF) kan du paketera återanvändbar, parametriserad DAX-logik i dina modeller, vilket gör DAX-koden enklare att skriva, underhålla och dela. I stället för att upprepa formler mellan mått, beräknade kolumner och visuella objekt ger UDF:er flexibilitet i programmeringsstil till dina semantiska modeller, så att du kan definiera funktioner en gång och använda dem överallt där DAX stöds.

DAX-UDF:er är allmänt tillgängliga i Power BI Desktop och Power BI-tjänsten från och med juni 2026-versionen. Mer information finns i DAX-användardefinierade funktioner.

Varför ska du använda användardefinierade funktioner?

  • Återanvändbarhet och konsekvens: Definiera en beräkning en gång och återanvänd den överallt.
  • Underhåll: Uppdatera logiken på ett ställe för att åtgärda eller utveckla regler.
  • Säkrare redigering: Valfria typtips och typkontrollhjälpare stöder förutsägbar, felbeständig kod.
  • Förstklassiga modellobjekt: UDF:er finns i modellen och kan visas i Modellutforskaren.

Definiera en funktion

Du kan definiera en användardefinierad funktion i Power BI Desktop med hjälp av DAX-frågevyn (DQV), TMDL-vyn eller modellvyn. Du kan också visa och redigera UDF:er i webbläsaren via Power BI Service-webbmodellering.

Allmän syntax

Den allmänna syntaxen för en UDF är:

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

Exempel: Enkel skattefunktion

Här är ett enkelt exempel i DQV som lägger till skatt på det angivna beloppet. Du kan också utvärdera 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 har definierats kan du uppdatera modellen eller använda kodlinsen för att lägga till funktionen i din modell.

Skärmbild av DAX-frågevyn i Power BI Desktop och markera två platser där du kan spara en användardefinierad funktion. Den första är knappen Uppdatera modell med ändringar överst i vyn. Den andra är en statusrad i kodredigeraren med etiketten Uppdateringsmodell: Lägg till ny function.

Samma exempel kan skapas i TMDL-vyn.

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

När en UDF har definierats kan du tillämpa ändringar för att lägga till funktionen i din modell.

Skärmbild av TMDL-vyn i Power BI Desktop och markera knappen Använd överst i vyn. Den här knappen är den plats där du kan spara en användardefinierad funktion.

Hantera användardefinierade funktioner

När du har definierat och lagt till modellen kan du visa och hantera alla användardefinierade funktioner från Modellutforskaren under noden Functions .

Skärmbild av en modellutforskarepanel i Power BI Desktop som visar den expanderade Functions-noden. Tre användardefinierade funktioner visas: AddTax, AverageOrderValue och CustomerLifetimeValue.

I DAX-frågevyn (DQV) kan du använda Snabbfrågor via Modellutforskaren för att enkelt definiera och utvärdera funktioner.

Skärmbild av ett modellutforskarfönster i Power BI Desktop visar den expanderade noden Functions. Två snabbmenyer är öppna: den första menyn innehåller Snabbfrågor, Byt namn, Ta bort från modell, Dölj i rapportvyn, Visa alla, Fäll ihop alla och Expandera alla. Snabbfrågor är markerat och valt. Den andra menyn är markerad och erbjuder alternativen för Snabbfrågor: Utvärdera, Definiera och utvärdera, Definiera ny funktion och Definiera alla funktioner i den här modellen.

I TMDL-vyn kan du dra och släppa funktioner till arbetsytan eller använda TMDL för skript till via Modellutforskaren.

En skärmbild av fönstret Modellutforskaren i Power BI Desktop visar den expanderade noden Functions. Två kontextmenyer är öppna: den första menyn innehåller Skripta till TMDL, Byt namn, Ta bort från modell, Dölj i rapportvyn, Visa alla dolda, Komprimera alla och Expandera alla. Skripta till TMDL är markerat och valt. Den andra menyn är markerad och visar alternativen för Skripta till TMDL: fliken Skript och Urklipp.

Om du använder en Power BI Project lagras även funktioner i mappen functions.tmdl i mappen definition.

Visual Studio Code-skärmbild av ett Power BI-projekt. Utforskaren är öppen för mappen semantisk modell. Functions.tmdl är öppen i kodredigeraren. Tre funktioner visas: CustomerLifetimeValue, AverageOrderValue och AddTax.

Använda användardefinierade funktioner

När du har lagt till en UDF i modellen kan du använda den överallt där DAX stöds. Här använder AddTax vi som exempel.

Använd UDF:er med fullständig filterkontext med mått.

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

Använd UDF:er på varje rad i en tabell med beräknade kolumner.

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

Använd UDF:er direkt i visualer med visuella beräkningar.

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

Nästla UDF:er för avancerade 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

Parameters

DAX-UDF:er stöder noll eller fler parametrar. Om du vill göra dina funktioner säkrare och mer förutsägbara kan du ange tips för parametertyp:

  • Typ: vilken typ av värde parametern accepterar (AnyVal, , ScalarTable, AnyRef, CalendarRef, ColumnRef, MeasureRefeller TableRef).
  • Undertyp (endast för skalär typ): den specifika skalära datatypen (Variant, , Int64Decimal, Double, String, DateTime, Booleaneller Numeric).
  • ParameterMode: när argumentet utvärderas (val för ivrig eller expr för lat).

Typanvisningar har formen: [type] [subtype] [parameterMode]

Exempel: Typgjutning

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

I det här exemplet används en Scalar typ, Int64 undertyp och val parameterMode. Du kan också uppnå samma effekt genom att bara inkludera Int64 undertypen som du ser i exemplet nedan. Icke-numeriska strängar resulterar i ett fel.

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

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

Typkontroll

Verifiera parametertyper i funktionen med hjälp av inbyggda DAX-typkontrollfunktioner, till exempel:

En fullständig lista över tillgängliga funktioner för typkontroll finns i DAX-användardefinierade funktioner.

Mer information om hur du använder användardefinierade funktioner finns i följande resurser: