Benutzerdefinierte DAX-Funktionen

Mit benutzerdefinierten Funktionen (Data Analysis Expressions, DAX, UDFs) können Sie wiederverwendbare, parametrisierte DAX-Logik in Ihre Modelle einbinden, wodurch der DAX-Code einfacher zu schreiben, zu verwalten und zu teilen ist. Anstatt Formeln über Measures, berechnete Spalten und visuelle Elemente hinweg zu wiederholen, bieten UDFs Programmierstilflexibilität für Ihre semantischen Modelle, sodass Sie Funktionen einmal definieren und überall dort verwenden können, wo DAX unterstützt wird.

DAX UDFs sind in Power BI Desktop und dem Power BI-Dienst ab Juni 2026 allgemein verfügbar. Weitere Informationen finden Sie unter BENUTZERDEFINIERTE DAX-Funktionen.

Warum benutzerdefinierte Funktionen verwenden?

  • Wiederverwendbarkeit und Konsistenz: Definieren Sie eine Berechnung einmal, und verwenden Sie sie überall wieder.
  • Verwendbarkeit: Aktualisieren Sie die Logik an einer zentralen Stelle, um Regeln zu beheben oder zu entwickeln.
  • Sicherere Erstellung: Optionale Typenhinweise und Typüberprüfungshilfsprogramme unterstützen vorhersehbaren, fehlersicheren Code.
  • Modellobjekte der ersten Klasse: UDFs leben im Modell und können im Modell-Explorer angezeigt werden.

Definieren einer Funktion

Sie können eine benutzerdefinierte Funktion in Power BI Desktop mithilfe der DAX-Abfrageansicht (DQV) oder der TMDL-Ansicht definieren.

Allgemeine Syntax

Die allgemeine Syntax für eine UDF lautet:

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

Beispiel: Einfache Steuerfunktion

Hier ist ein einfaches Beispiel in DQV , das Steuern auf den angegebenen Betrag hinzufügt. Sie können UDFs auch in DQV evaluieren.

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

EVALUATE
{ AddTax ( 10 ) }
// Returns 11

Nachdem eine UDF definiert wurde, können Sie das Modell aktualisieren oder das Codeobjektiv verwenden, um die Funktion ihrem Modell hinzuzufügen.

Screenshot der DAX-Abfrageansicht in Power BI Desktop mit Hervorhebung von zwei Stellen, an denen Sie eine benutzerdefinierte Funktion speichern können. Die erste ist die Schaltfläche „Modell mit Änderungen aktualisieren“ oben in der Ansicht. Die zweite ist eine Statuszeile im Code-Editor mit der Bezeichnung „Modell aktualisieren: Neue Funktion hinzufügen“.

Dasselbe Beispiel kann in der TMDL-Ansicht erstellt werden.

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

Nachdem eine UDF definiert wurde, können Sie Änderungen anwenden, um die Funktion ihrem Modell hinzuzufügen.

Screenshot der TMDL-Ansicht in Power BI Desktop, wobei die Schaltfläche

Verwalten benutzerdefinierter Funktionen

Nachdem Sie das Modell definiert und dem Modell hinzugefügt haben, können Sie alle benutzerdefinierten Funktionen im Modell-Explorer unter dem Knoten "Funktionen " anzeigen und verwalten.

Screenshot eines Modell-Explorer-Bereichs in Power BI Desktop mit dem erweiterten Knoten

In der DAX-Abfrageansicht (DQV) können Sie Schnellabfragen über den Modell-Explorer verwenden, um Funktionen einfach zu definieren und auszuwerten.

Screenshot des Bereichs „Modell-Explorer“ in Power BI Desktop zeigt den erweiterten Knoten „Funktionen“ an. Zwei Kontextmenüs sind geöffnet: Das erste Menü bietet „Schnellabfragen“, „Umbenennen“, „Aus Modell löschen“, „In der Berichtsansicht ausblenden“, „Alle einblenden“, „Alle reduzieren“ und „Alle erweitern“. „Schnellabfragen“ ist hervorgehoben und ausgewählt. Das zweite Menü ist hervorgehoben und bietet die Schnellabfragen-Optionen „Auswerten“, „Definieren und auswerten“, „Neue Funktion definieren“ und „Alle Funktionen in diesem Modell definieren“.

In der TMDL-Ansicht können Sie Funktionen in die Canvas ziehen und ablegen oder Script TMDL über den Modell-Explorer verwenden.

Ein Screenshot eines Modell-Explorer-Bereichs in Power BI Desktop zeigt den erweiterten Knoten „Functions“. Zwei Kontextmenüs sind geöffnet: Das erste Menü bietet Script to TMDL, Umbenennen, Aus Modell löschen, In Berichtsansicht ausblenden, Alle einblenden, Alle reduzieren und Alle erweitern. Script to TMDL ist hervorgehoben und ausgewählt. Das zweite Menü ist hervorgehoben und bietet die Script-to-TMDL-Optionen „Script tab“ und „Clipboard“.

Bei Verwendung eines Power BI Project werden Funktionen auch in functions.tmdl im Ordner definition gespeichert.

Visual Studio Code-Screenshot eines Power BI-Projekts. Explorer ist für den Semantikmodellordner geöffnet.

Verwenden von benutzerdefinierten Funktionen

Nachdem Sie dem Modell eine UDF hinzugefügt haben, können Sie sie überall verwenden, wo DAX unterstützt wird. Hier wird als Beispiel verwendet AddTax .

Verwenden Sie UDFs im vollständigen Filterkontext mit Maßen.

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

Wenden Sie UDFs auf jede Zeile in einer Tabelle mit berechneten Spalten an.

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

Verwenden Sie UDFs direkt in Visuals in Kombination mit visuellen Berechnungen.

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

Verschachteln von UDFs für erweiterte Szenarien.

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

Parameter

DAX UDFs unterstützen null oder mehr Parameter. Um Ihre Funktionen sicherer und vorhersehbarer zu machen, können Sie optional Parametertyphinweise angeben:

  • Typ: welche Art von Wert der Parameter akzeptiert (AnyVal, Scalar, , Table, AnyRef, CalendarRef, ColumnRef, , oder MeasureRefTableRef).
  • Untertyp (nur für Skalartyp): der spezifische skalare Datentyp (Variant, Int64, , Decimal, Double, String, DateTime, Booleanoder Numeric).
  • ParameterMode: wann das Argument ausgewertet wird (val für eager oder expr für lazy).

Typhinweise haben die Form: [type] [subtype] [parameterMode]

Beispiel: Typumwandlung

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

In diesem Beispiel wird ein Scalar Typ, Int64 Untertyp und val ParameterMode verwendet. Sie können auch denselben Effekt erzielen, indem Sie einfach den Int64 Untertyp einschließen, wie im folgenden Beispiel gezeigt. Nicht numerische Zeichenfolgen führen zu einem Fehler.

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

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

Typüberprüfung

Überprüfen von Parametertypen innerhalb Ihrer Funktion mithilfe integrierter DAX-Typüberprüfungsfunktionen wie:

Eine vollständige Liste der verfügbaren Typüberprüfungsfunktionen finden Sie unter BENUTZERDEFINIERTE DAX-Funktionen.

Weitere Informationen zur Verwendung benutzerdefinierter Funktionen finden Sie in den folgenden Ressourcen: