Benutzerdefinierter Code in Ausdrücken in einem paginierten Bericht in Power BI Report Builder

GILT FÜR:️ Power BI Report Builder ️Power BI Desktop

Sie können in einen Bericht eingebetteten benutzerdefinierten Code hinzufügen. Verwenden Sie eingebetteten Code für benutzerdefinierte Konstanten, komplexe Funktionen oder für Funktionen, die mehrfach in demselben Bericht verwendet werden. In benutzerdefiniertem Code können neue benutzerdefinierte Konstanten, Variablen, Funktionen oder Unterroutinen eingeschlossen werden. Sie können schreibgeschützte Verweise in integrierte Auflistungen, wie die Parameter-Auflistung, einbeziehen. An benutzerdefinierte Funktionen können jedoch keine Sätze von Berichtsdatenwerten übergeben werden, insbesondere werden keine benutzerdefinierten Aggregate unterstützt.

Hinweis

Benutzerdefinierte Assemblys werden in paginierten Berichten in Power BI nicht unterstützt. Erwägen Sie das Konvertieren von Logik aus der benutzerdefinierten Assembly in eingebetteten Code. Beispiele für zu berücksichtigende Alternativen finden Sie unter Assembly alternatives (Alternativen für Assemblys).

Wichtig

Für zeitempfindliche Berechnungen, die einmal zur Laufzeit ausgewertet werden und während der Berichtsverarbeitung denselben Wert behalten sollen, bietet sich eventuell die Verwendung einer Berichts- oder Gruppenvariablen an. Weitere Informationen finden Sie unter Verweise auf Berichts- und Gruppenvariablensammlungen (Power BI Report Builder).

Einschließen von Verweisen auf häufig verwendete Funktionen

Im Dialogfeld Ausdruck können Sie eine kategorisierte Liste allgemeiner im Berichts-Generator integrierter Funktionen anzuzeigen. Wenn Sie Allgemeine Funktionen erweitern und auf eine Kategorie klicken, wird im Bereich Element die Liste der Funktionen angezeigt, die Sie in einen Ausdruck einschließen. Die allgemeinen Funktionen umfassen Klassen aus den .NET Framework-Namespaces Math und Convert sowie Funktionen der Visual Basic-Laufzeitbibliothek. Die gängigsten Funktionen sind im Dialogfeld Ausdruck nach Kategorie sortiert aufgeführt: Text, Datum und Uhrzeit, Mathematische Funktionen, Qualitätskontrolle, Programmfluss, Aggregat, Finanzen, Konvertierung und Sonstiges. Weniger häufig verwendete Funktionen werden nicht in der Liste angezeigt, können jedoch auch in einem Ausdruck verwendet werden.

Um eine integrierte Funktion zu verwenden, doppelklicken Sie auf den Funktionsnamen im Bereich Element. Im Bereich Beschreibung wird eine Beschreibung der Funktion angezeigt, und ein Beispiel des Funktionsaufrufs finden Sie im Bereich Beispiel. Wenn Sie im Codebereich den Funktionsnamen und anschließend eine linke Klammer ( eingeben, zeigt die IntelliSense-Hilfe jede gültige Syntax für diesen Funktionsaufruf an. Zur Berechnung des Höchstwerts für ein Feld mit dem Namen Quantity in einer Tabelle fügen Sie dem Codebereich beispielsweise den einfachen Ausdruck =Max( hinzu und zeigen mithilfe der Smarttags alle gültigen Syntaxmöglichkeiten für den Funktionsaufruf an. Um dieses Beispiel zu vervollständigen, geben Sie =Max(Fields!Quantity.Value)ein.

Weitere Informationen zu den einzelnen Funktionen finden Sie unter Math, Convertund Member der Visual Basic-Laufzeitbibliothek bei MSDN.

Einschließen von Verweisen auf weniger häufig verwendete Funktionen

Um einen Verweis auf andere, weniger häufig verwendete CLR-Namespaces (Common Language Runtime) einzuschließen, verwenden Sie einen vollqualifizierten Verweis, z.B. StringBuilder. IntelliSense wird für die seltener verwendeten Funktionen im Codebereich des Dialogfelds Ausdruck nicht unterstützt.

Weitere Informationen finden Sie unter Member der Visual Basic-Laufzeitbibliothek bei MSDN.

Einschließen von eingebettetem Code

Auf der Registerkarte Code des Dialogfelds Berichtseigenschaften können Sie einem Bericht eingebetteten Code hinzufügen. Der erstellte Codeblock kann mehrere Methoden enthalten. Methoden in eingebettetem Code müssen in Microsoft Visual Basic geschrieben sein und instanzbasiert sein. Vom Berichtsprozessor werden automatisch Verweise für den System.Convert-Namespace und den System.Math-Namespace hinzugefügt.

Die Methoden im eingebetteten Code stehen über ein global definiertes Code -Element zur Verfügung. Zum Zugriff auf die Methoden verweisen Sie auf das Code -Element und den Methodennamen. Im folgenden Beispiel wird die Methode ToUSDaufgerufen, die den Wert des StandardCost -Felds in einen Dollarwert konvertiert:

=Code.ToUSD(Fields!StandardCost.Value)

Um in Ihrem benutzerdefinierten Code auf integrierte Sammlungen verweisen zu können, müssen Sie einen Verweis auf das integrierte Berichts -Objekt hinzufügen:

=Report.Parameters!Param1.Value

In den folgenden Beispielen wird veranschaulicht, wie einige benutzerdefinierte Konstanten und Variablen definiert werden können.

Public Const MyNote = "Authored by Bob"
Public Const NCopies As Int32 = 2
Public Dim  MyVersion As String = "123.456"
Public Dim MyDoubleVersion As Double = 123.456

Obwohl benutzerdefinierte Konstanten nicht in der Konstanten -Kategorie des Dialogfelds Ausdruck angezeigt werden (in der nur integrierte Konstanten angezeigt werden), können Sie Verweise darauf über einen beliebigen Ausdruck hinzufügen (wie in den folgenden Beispielen veranschaulicht). In einem Ausdruck wird eine benutzerdefinierte Konstante als Variantbehandelt.

=Code.MyNote
=Code.NCopies
=Code.MyVersion
=Code.MyDoubleVersion

In den folgenden Beispielen sind sowohl der Codeverweis als auch die Codeimplementierung der Funktion FixSpellingenthalten, mit der der Text "Bicycle" für alle Vorkommen des Texts „Bike“ im SubCategory -Feld ersetzt wird.

=Code.FixSpelling(Fields!SubCategory.Value)

Mit dem folgenden Code wird eine Implementierung der FixSpelling -Methode veranschaulicht, wenn er in den Codeblock einer Berichtsdefinition eingebettet ist. In diesem Beispiel wird gezeigt, wie Sie einen vollqualifizierten Verweis auf die StringBuilder-Klasse von Microsoft .NET Framework anwenden.

Public Function FixSpelling(ByVal s As String) As String
   Dim strBuilder As New System.Text.StringBuilder(s)
   If s.Contains("Bike") Then
      strBuilder.Replace("Bike", "Bicycle")
      Return strBuilder.ToString()
      Else : Return s
   End If
End Function

Weitere Informationen zu integrierten Objektsammlungen finden Sie unter Verweise auf integrierte globale Elemente oder Benutzer (Power BI Report Builder).

Einschließen von Verweisen auf Parameter von Code

Sie können auf die globale Parameters-Sammlung per benutzerdefinierten Code über einen Codeblock der Berichtsdefinition verweisen. Die Parameters-Auflistung ist schreibgeschützt und verfügt über keine öffentlichen Iteratoren. Sie können kein For Each-Konstrukt von Visual Basic verwenden, um die Sammlung zu durchlaufen. Sie benötigen den in der Berichtsdefinition definierten Namen des Parameters, um in Ihrem Code auf ihn verweisen zu können. Allerdings ist es möglich, alle Werte eines mehrwertigen Parameters zu durchlaufen.

Die folgende Tabelle enthält Beispiele für Verweise auf die integrierte Parameters -Sammlung von benutzerdefiniertem Code:

Übergeben einer gesamten globalen Parameters-Auflistung an benutzerdefinierten Code.

Diese Funktion gibt den Wert eines bestimmten Berichtsparameters MyParameterzurück.

Verweis in Ausdruck =Code.DisplayAParameterValue(Parameters)

Benutzerdefinierte Codedefinition

Public Function DisplayAParameterValue(ByVal parameters as Parameters) as Object
Return parameters("MyParameter").Value
End Function

Übergeben eines einzelnen Parameters an benutzerdefinierten Code.

Verweis in Ausdruck =Code.ShowParametersValues(Parameters!DayOfTheWeek)

In diesem Beispiel wird der Wert des übergebenen Parameters zurückgegeben. Entspricht der Parameter einem mehrwertigen Parameter, ist die Rückgabezeichenfolge eine Verkettung aller Werte.

Benutzerdefinierte Codedefinition

Public Function ShowParameterValues(ByVal parameter as Parameter)
 as String
   Dim s as String
   If parameter.IsMultiValue then
      s = "Multivalue: "
      For i as integer = 0 to parameter.Count-1
         s = s + CStr(parameter.Value(i)) + " "
      Next
   Else
      s = "Single value: " + CStr(parameter.Value)
   End If
   Return s
End Function

Nächste Schritte