Einführung
Die Funktion der benutzerdefinierten Funktionen wurde als erste Vorschauversion mit dem Launch vom September 2025 eingeführt.
Mit dieser Funktion können wir Geschäftslogik in Funktionen kapseln, die wie alle anderen Standardfunktionen aufgerufen werden können.
In diesem Artikel werde ich die Verwendung dieser Funktion anhand eines realen Beispiels demonstrieren: der Berechnung einer Prognose auf der Grundlage von Inflationsraten.
Sie erfahren, wie Sie eine einfache Funktion erstellen und ein komplexeres Szenario handhaben.
Szenario
Stellen wir uns ein Unternehmen vor, das seine Einnahmen mithilfe einer Inflationssimulation prognostizieren möchte.
Sie wollen simulieren, wie sich unterschiedliche Inflationsraten auf ihr monatliches Einkommen auswirken.
Der Einfachheit halber ignorieren wir die Saisonalität und verwenden den letzten bekannten monatlichen Verkaufsbetrag, um das zukünftige Einkommen für den Relaxation des Jahres zu berechnen.
Der Benutzer muss in der Lage sein, eine Inflationsrate einzustellen und zu sehen, wie sich die Zahlen ändern.
Bereiten Sie das Datenmodell vor
Nun kommt es darauf an, ob ich mit einer neuen Energy BI-Datei beginne und die Daten lade oder diese Funktionalität zu einer bestehenden hinzufüge.
Als erstes müssen Sie die Vorschaufunktion aktivieren:

Möglicherweise müssen Sie Energy BI Desktop nach der Aktivierung neu starten.
Für eine vorhandene Energy BI-Datei müssen wir den richtigen Kompatibilitätsgrad festlegen, um benutzerdefinierte Funktionen (UDFs) zu erstellen.
Sie können entweder eine Dummy-Funktion erstellen, die den Kompatibilitätsgrad automatisch aktualisiert, oder verwenden Tabelleneditor um es auf mindestens 1702 einzustellen:

Sie können 1702 in das markierte Feld eingeben und speichern.
Ich werde später in diesem Artikel zeigen, wie man eine einfache UDF erstellt.
Weitere Informationen zum Erstellen einer neuen UDF in Energy BI Desktop finden Sie in der Microsoft-Dokumentation. Den Hyperlink finden Sie im Abschnitt „Referenzen“ am Ende dieses Artikels.
Hinzufügen der Tarifauswahl
Da der Benutzer die Inflationsrate auswählen können muss, füge ich dem Datenmodell einen Parameter hinzu:

Nachdem ich auf „Numerischer Bereich“ geklickt habe, fülle ich das Formular aus:

Da ich den Prozentsatz steuern möchte, stelle ich den Bereich auf -0,02 bis 0,05 ein, was -2 % bis 5 % entspricht.
Nach einigen Sekunden wurde der neue Slicer automatisch zur Berichtsseite hinzugefügt.
Aber es werden nur die Dezimalzahlen angezeigt.
Ich muss das Zahlenformat ändern, um Prozentsätze anzuzeigen:

Jetzt zeigt der Slicer die Zahl nach Bedarf an:

Jetzt ist es einsatzbereit.
Schreiben Sie die erste Funktion
Erstellen wir zunächst eine UDF, um die ausgewählte Charge zurückzugeben.
Ich bevorzuge es, es im Tabelleneditor zu schreiben, da der DAX-Editor viel schneller ist als Energy BI Desktop.
Sie können es aber auch in der DAX-Abfrageansicht in Energy BI Desktop erstellen.
Im Tabelleneditor gehe ich zum Knoten „Funktionen“, klicke mit der rechten Maustaste darauf und wähle „Neue benutzerdefinierte Funktion“ aus:

Jetzt kann ich einen Namen festlegen.
Für dieses erste habe ich „ReturnRate“ eingestellt.
Dies ist der Code für die Funktion:
(
Charge : DECIMAL VAL
)
=>
Charge
Innerhalb der Klammern definiere ich den Eingabeparameter.
Nach dem => kann ich den DAX-Code für die Funktion eingeben.
In diesem Fall gebe ich den Enter-Parameter zurück.
Jetzt erstelle ich eine Kennzahl, um diese Funktion zu verwenden:
Get Inflation fee = ReturnRate((Inflation fee Worth))
Die Kennzahl (Wert der Inflationsrate) wurde erstellt, als ich den Parameter zur Auswahl der Inflationsrate erstellte.
Wenn ich eine Karte hinzufüge und ihr die neue Kennzahl zuweise, sehe ich den ausgewählten Wert im Slicer:

OK, das ist eine elementare Funktion, aber sie dient nur zur Veranschaulichung ihrer Funktionsweise.
Schreiben Sie die echte Funktion
Möglicherweise ist Ihnen das Schlüsselwort VAL in der Parameterdefinition aufgefallen.
Wie Sie in den beiden folgenden Artikeln ausführlicher lesen können, haben wir zwei Modi zum Übergeben von Parametern:
- VAL: Übergeben Sie den Inhalt des Parameters unverändert.
- EXPR: Übergeben Sie den Parameter als Ausdruck, der innerhalb der Funktion wie ein gewöhnliches Measure verwendet werden kann.
In der folgenden Funktion verwende ich beide.
Hier ist der vollständige Code für die Funktion MonthlyInflation:
(
Charge : DECIMAL VAL
,InputVal : EXPR
)
=>
VAR CurrentMonth = MAX( 'Date'(MonthKey) )
VAR LastMonthWithData = CALCULATE(
LASTNONBLANK( 'Date'(MonthKey)
, InputVal
)
, ALLEXCEPT( 'Date', 'Date'(Yr) )
)
VAR LastValueWithData = CALCULATE(InputVal
,ALLEXCEPT('Date', 'Date'(Yr))
,'Date'(MonthKey) = LastMonthWithData
)
VAR MonthDiff = CurrentMonth - LastMonthWithData
VAR End result = IF(MonthDiff<=0
,InputVal
,(1 + ( Charge * MonthDiff ) ) * LastValueWithData
)
RETURN
End result
Der erste Parameter der Funktion ist wie zuvor.
Der zweite Parameter ist der Ausdruck des Eingabemaßes.
Innerhalb der Funktion kann ich den Parameternamen verwenden, um den Filterkontext und andere Dinge zu ändern. Ich muss den Parameter als festlegen EXPR wenn ich innerhalb der Funktion auf diese Weise arbeiten muss.
Die Funktion führt die folgenden Schritte aus:
- Ich erhalte den höchsten MonthKey und speichere ihn in der Variablen
CurrentMonth
Der Inhalt ist der Monat des aktuellen Filterkontexts in der numerischen Kind JJJJMM. - Ich erhalte den letzten Monat des aktuellen Jahres mit einem Wert aus dem Eingabeparameter (Maßzahl) und speichere ihn in der Variablen
LastMonthWithData - Ich subtrahiere den aktuellen Monat vom letzten Monat mit Daten, um die Differenz zu erhalten. Dies ist der Faktor zur Berechnung der Inflationsrate. Das Ergebnis wird in der Variablen gespeichert
MonthDiff - Wenn MonthDiff kleiner oder gleich 0 ist, enthält der Filterkontext (Monat) einen Wert aus der Eingabevariablen
- Wenn nicht, liegt der Filterkontext (Monat) in der Zukunft und wir können das Ergebnis berechnen.
Was ich hier mache, ist, die ausgewählte Inflationsrate mit der Anzahl der Monate seit dem letzten Monat mit Daten zu multiplizieren (LastMonthWithData).
Jetzt kann ich eine Kennzahl erstellen, um die Prognose Monat für Monat basierend auf der ausgewählten Inflationsrate dynamisch zu berechnen:
On-line Gross sales With Inflation =
MonthlyInflation((Inflation fee Worth), (Sum On-line Gross sales))
Dies ist das Ergebnis für eine Inflationsrate von 3 %:

Die blau markierten Monate enthalten tatsächliche Daten und die rot markierten Monate werden auf Foundation der gewählten Inflationsrate berechnet.
Das Schöne ist, dass ich jeden DAX-Ausdruck an das gewünschte Maß übergeben kann.
Ich kann zum Beispiel On-line-Verkäufe mit Einzelhandelsverkäufen hinzufügen:

Das Maß hierfür ist folgendes:
Whole Gross sales With Inflation =
MonthlyInflation((Inflation fee Worth), (Sum On-line Gross sales) + (Sum Retail Gross sales))
Nun, das ist ganz einfach.
Ich weiß, dass die Berechnung sehr einfach ist, aber ich habe dieses Beispiel verwendet, um zu zeigen, was mit UDFs gemacht werden kann.
Was ist der Sinn?
Darum geht es additionally bei UDFs?
Die meisten der hier gezeigten Dinge können auch mit Berechnungsgruppen durchgeführt werden.
Nun, das stimmt.
Die Verwendung einer UDF ist jedoch viel einfacher als die Verwendung eines Berechnungselements.
Darüber hinaus können wir modellunabhängige UDFs schreiben und sie in mehreren Modellen wiederverwenden.
Schauen Sie mal rein Erweitern Sie Energy BI mit DAX Lib.
Dabei handelt es sich um eine wachsende Sammlung modellunabhängiger UDFs mit Logik, die in jedem Datenmodell verwendet werden kann.
Weitere Unterscheidungsmerkmale zwischen UDFs und Berechnungselementen sind:
- UDFs können nicht gruppiert werden, Berechnungselemente können jedoch in Berechnungsgruppen gruppiert werden.
- Berechnungselemente haben keine Parameter.
- UDF kann wie jede andere DAX-Funktion direkt aufgerufen werden.
Probieren Sie es aus, um mehr über die Möglichkeiten von UDFs zu erfahren.
Abschluss
sind eine großartige Ergänzung zum Toolset in Energy BI und Material.
Ich bin sicher, dass es immer wichtiger wird, zu wissen, wie man mit UDFs arbeitet, da ihr Potenzial mit der Zeit immer offensichtlicher wird.
Da wir uns in der Anfangsphase der Einführung dieser Funktion befinden, müssen wir auf dem Laufenden bleiben, um zu sehen, was Microsoft als Nächstes tun wird, um sie zu verbessern.
Für diese Funktion gelten einige Einschränkungen. Sie finden sie hier: Überlegungen und Einschränkungen benutzerdefinierter DAX-Funktionen.
Es gibt genügend Raum für Verbesserungen.
Mal sehen, was als nächstes kommt.
Referenzen
Hier die Microsoft-Dokumentation für benutzerdefinierte Funktionen: Verwenden benutzerdefinierter DAX-Funktionen (Vorschau) – Energy BI | Microsoft Study.
Dies ist der SQL BI-Artikel, der die Funktion ausführlich erklärt: Einführung in benutzerdefinierte Funktionen in DAX – SQLBI.
Eine Sammlung kostenloser modellunabhängiger UDFs: Erweitern Sie Energy BI mit DAX Lib.
Wie in meinen vorherigen Artikeln verwende ich den Contoso-Beispieldatensatz. Sie können den ContosoRetailDW-Datensatz kostenlos von Microsoft herunterladen Hier.
Die Contoso-Daten können wie beschrieben unter der MIT-Lizenz frei verwendet werden in diesem Dokument. Ich habe den Datensatz geändert, um die Daten auf aktuelle Daten zu verschieben.
