Beispiele für Ausdrücke (Reporting Services)

Ausdrücke werden häufig in Berichten zum Steuern des Inhalts und der Darstellung des Berichts verwendet. Ausdrücke werden in MicrosoftVisual Basic geschrieben und können integrierte Funktionen, einen benutzerdefinierten Code, globale Variablen, Berichts- und Gruppenvariablen sowie benutzerdefinierte Variablen verwenden.

In diesem Thema sind Beispiele für Ausdrücke enthalten, die in einem Bericht für allgemeine Aufgaben verwendet werden können.

  • Visual Basic-Funktionen: Beispiele für Datum, Zeichenfolge, Konvertierung und bedingte Visual Basic-Funktionen.

  • Berichtsfunktionen: Beispiele für Aggregate und andere integrierte Berichtsfunktionen.

  • Darstellung von Berichtsdaten: Beispiele zur Änderung der Darstellung eines Berichts.

  • Eigenschaften Beispiele zum Festlegen von Berichtselementeigenschaften, um Format oder Sichtbarkeit zu steuern.

  • Parameter: Beispiele für die Verwendung von Parametern in einem Ausdruck.

  • Benutzerdefinierter Code: Beispiele für eingebetteten benutzerdefinierten Code.

Beispiele für Ausdrücke und die jeweiligen Verwendungsmöglichkeiten finden Sie in den folgenden Themen:

Weitere Informationen über einfache und komplexe Ausdrücke, über die Verwendungsmöglichkeiten von Ausdrücken sowie über die Verweistypen, die Sie in einen Ausdruck einbinden können, finden Sie unter Arbeiten mit Berichtsausdrücken. Weitere Informationen über den Kontext, in dem Ausdrücke zum Berechnen von Aggregaten ausgewertet werden, finden Sie unter Berechnen von Gesamtwerten und anderen Aggregaten (Reporting Services).

Zusätzlich schließt der Ausdrucks-Editor eine hierarchische Sicht der integrierten Funktionen mit ein. Wenn Sie die Funktion auswählen, wird im Wertebereich ein Codebeispiel angezeigt. Weitere Informationen finden Sie unter Ausdruck (Dialogfeld).

Funktionen

Viele Ausdrücke in einem Bericht enthalten Funktionen. Mit diesen Funktionen können Sie Daten formatieren, Code anwenden und auf Berichtsmetadaten zugreifen. Sie können Ausdrücke schreiben, die Funktionen aus der MicrosoftVisual Basic-Laufzeitbibliothek sowie aus den Namespaces System..::..Convert und System..::..Math verwenden. Sie können Verweise auf Funktionen aus anderen Assemblys oder benutzerdefinierten Code hinzufügen. Außerdem können Sie Klassen aus Microsoft.NET Framework verwenden, einschließlich System.Text.RegularExpressions. Weitere Informationen zu Visual Basic-Funktionen finden Sie im Abschnitt zur Visual Basic-Laufzeitbibliothek unter msdn.microsoft.com.

Der .NET Framework bietet viele Möglichkeiten, benutzerdefinierte Formate anzugeben, z. B. für bestimmte Datumsformate. Weitere Informationen finden Sie unter Formatierung von Typen auf MSDN.

Visual Basic-Funktionen

Mit Visual Basic-Funktionen können Sie die Daten bearbeiten, die in Textfeldern angezeigt oder für Parameter, Eigenschaften oder sonstige Bereiche des Berichts verwendet werden. Dieser Abschnitt enthält Beispiele zur Veranschaulichung einiger dieser Funktionen. In diesen Beispielen werden Visual Basic-Konstanten als Enumerationswerte angegeben, wie z. B. DateInterval.Month. Obwohl der Ausdrucks-Editor kein IntelliSense für diese Werte unterstützt, werden sie in einem Ausdruck ordnungsgemäß kompiliert.

Weitere Informationen zu Visual Basic-Funktionen finden Sie in der Visual Basic-Dokumentation.

Datumsfunktionen

  • Die Today-Funktion stellt das aktuelle Datum zur Verfügung. Mit diesem Ausdruck können Sie in einem Textfeld das Datum im Bericht anzeigen oder aber in einem Parameter Daten basierend auf dem aktuellen Datum filtern.

    =Today()
    
  • Mit der DateAdd-Funktion wird ein Datumsbereich basierend auf einem einzigen Parameter bereitgestellt. Der folgende Ausdruck liefert ein Datum, das sechs Monate nach dem Datum eines Parameters vom Typ System..::..DateTime liegt, der mit StartDate bezeichnet wird.

    =DateAdd(DateInterval.Month, 6, Parameters!StartDate.Value)
    
  • Die Year-Funktion zeigt das Jahr für ein bestimmtes Datum an. Hiermit können Sie Datumsangaben zusammenfassen oder die Jahreszahl für eine Datumsgruppe anzeigen. Dieser Ausdruck liefert das Jahr für eine bestimmte Gruppe von Bestelldaten. Mit der Month-Funktion und anderen Funktionen können Datumsangaben auch bearbeitet werden. Weitere Informationen finden Sie in der Dokumentation zu Visual Basic.

    =Year(Fields!OrderDate.Value)
    

Zeichenfolgenfunktionen

  • Mithilfe von Verkettungsoperatoren und Visual Basic-Konstanten können Sie mehrere Felder kombinieren. Der folgende Ausdruck gibt zwei Felder zurück, die sich jeweils in einer eigenen Zeile in demselben Textfeld befinden.

    =Fields!FirstName.Value & vbCrLf & Fields!LastName.Value 
    
  • Mit der Format-Funktion können Sie Datumsangaben und Zahlen in einer Zeichenfolge formatieren. Mit dem folgenden Ausdruck werden Werte des StartDate-Parameters und des EndDate-Parameters im langen Datumsformat angezeigt.

    =Format(Parameters!StartDate.Value, "D") & " through " &  Format(Parameters!EndDate.Value, "D")  
    

    Enthält das Textfeld nur ein Datum oder eine Zahl, sollten Sie die Format-Eigenschaft des Textfelds anstelle der Format-Funktion im Textfeld verwenden, um eine Formatierung anzuwenden.

  • Mit den Funktionen Right, Len und InStr kann eine Teilzeichenfolge zurückgegeben werden, um z. B. DOMAIN\username auf den Benutzernamen zu verkürzen. Der folgende Ausdruck gibt den Teil der Zeichenfolge rechts neben einem umgekehrten Schrägstrich (\) des User-Parameters zurück:

    =Right(Parameters!User.Value, Len(Parameters!User.Value) - InStr(Parameters!User.Value, "\"))
    

    Der folgende Ausdruck liefert dasselbe Ergebnis, wobei Elemente der .NET FrameworkSystem..::..String-Klasse anstelle von Visual Basic-Funktionen verwendet werden:

    =Parameters!User.Value.Substring(Parameters!User.Value.IndexOf("\")+1, Parameters!User.Value.Length-Parameters!User.Value.IndexOf("\")-1)
    
  • Die ausgewählten Werte aus einem mehrwertigen Parameter können angezeigt werden. Im folgenden Beispiel wird die Join-Funktion zum Verketten der ausgewählten Werte des MySelection-Parameters zu einer einzelnen Zeichenfolge verwendet, die als Ausdruck für den Wert eines Textfelds in einem Berichtselement festgelegt werden kann:

    = Join(Parameters!MySelection.Value)
    
  • Die Regex-Funktionen von .NET FrameworkRegularExpressions sind für das Ändern des Formats vorhandener Zeichenfolgen hilfreich, beispielsweise für das Formatieren einer Telefonnummer. Für den folgenden Ausdruck wird die Replace-Funktion zum Ändern des Formats einer zehnstelligen Telefonnummer in ein Feld von "nnn-nnn-nnnn" zu "(nnn) nnn-nnnn" verwendet:

    =System.Text.RegularExpressions.Regex.Replace(Fields!Phone.Value, "(\d{3})[ -.]*(\d{3})[ -.]*(\d{4})", "($1) $2-$3")
    
    HinweisHinweis

    Stellen Sie sicher, dass der Wert für Fields!Phone.Value über keine zusätzlichen Leerzeichen verfügt und vom Typ System..::..String ist.

Konvertierungsfunktionen

Mithilfe der Visual Basic-Funktionen können Sie einen Wert von einem Datentyp in einen anderen Datentyp konvertieren. Konvertierungsfunktionen können zum Konvertieren eines Standarddatentyps für ein Feld in einen Datentyp verwendet werden, der für Berechnungen oder zum Kombinieren von Text erforderlich ist. 

  • Mit dem folgenden Ausdruck wird die Konstante 500 in den Typ Decimal konvertiert, um sie mit einem Transact-SQL money-Datentyp im Feld Wert für einen Filterausdruck zu vergleichen.

    =CDec(500)
    
  • Mit dem folgenden Ausdruck wird die Anzahl der für den mehrwertigen MySelection-Parameter ausgewählten Werte angezeigt.

    =CStr(Parameters!MySelection.Count)
    

Entscheidungsfunktionen

  • Die Iif-Funktion gibt einen von zwei Werten zurück, und zwar abhängig davon, ob der Ausdruck mit TRUE ausgewertet wird. Im folgenden Ausdruck wird mit der Iif-Funktion der boolesche Wert True zurückgegeben, falls der Wert von LineTotal 100 überschreitet. Andernfalls wird False zurückgegeben:

    =IIF(Fields!LineTotal.Value > 100, True, False)
    
  • Verwenden Sie mehrere IIF-Funktionen (die auch als "geschachtelte Iif-Funktionen" bezeichnet werden), um einen von drei Werten in Abhängigkeit vom Wert von PctComplete zurückzugeben. Der folgende Ausdruck kann in die Füllfarbe eines Textfelds platziert werden, um die Hintergrundfarbe basierend auf dem Wert im Textfeld zu ändern.

    =IIF(Fields!PctComplete.Value >= 10, "Green", IIF(Fields!PctComplete.Value >= 1, "Blue", "Red"))
    

    Werte, die größer oder gleich 10 sind, werden mit einem grünen Hintergrund angezeigt. Werte zwischen 1 und 9 erhalten einen blauen Hintergrund, und Werte kleiner als 1 werden mit rotem Hintergrund dargestellt.

  • Eine andere Möglichkeit, die gleiche Funktionalität zu erhalten, bietet die Switch-Funktion. Die Switch-Funktion ist nützlich, wenn Sie drei oder mehr Bedingungen testen müssen. Die Switch-Funktion gibt den Wert zurück, der mit dem ersten Ausdruck in einer Reihe verknüpft ist, die mit TRUE ausgewertet wird:

    =Switch(Fields!PctComplete.Value >= 10, "Green", Fields!PctComplete.Value >= 1, "Blue", Fields!PctComplete.Value = 1, "Yellow", Fields!PctComplete.Value <= 0, "Red",)
    

    Werte, die größer oder gleich 10 sind, werden mit einem grünen Hintergrund angezeigt. Werte zwischen 1 und 9 erhalten einen blauen Hintergrund, Werte, die gleich 1 sind, einen gelben Hintergrund, und Werte, die 0 oder kleiner sind, werden mit einem roten Hintergrund dargestellt.

  • Die dritte Möglichkeit, die gleiche Funktionalität zu erhalten, bietet die Choose-Funktion. Die Choose-Funktion verwendet den ersten Parameter als Index für einen der verbleibenden Funktionsparameter. Der erste Parameter muss eine ganze Zahl sein. Wenn die Hintergrundfarbe eines Textfelds in einer Tabelle auf diesen Ausdruck festgelegt ist, steuert der Wert von MyIndex die Farbe.

    =Choose(Fields!MyIndex.Value,"Red","Green","Yellow")
    

    Wenn MyIndex z. B. 1 ist, ist die Hintergrundfarbe "Red". Überprüfen Sie im Abfrageresultset, ob die Daten für MyIndex den Bereich der Parameterliste nicht überschreiten.

  • Mit dem Ausdruck wird der Wert des Felds ImportantDate geprüft und "Red" zurückgegeben, wenn er älter als eine Woche ist. Andernfalls wird "Blue" zurückgegeben. Mit diesem Ausdruck kann die Color-Eigenschaft eines Textfelds in einem Berichtselement gesteuert werden:

    =IIF(DateDiff("d",Fields!ImportantDate.Value, Now())>7,"Red","Blue")
    
  • Mit dem Ausdruck wird der Wert des Felds PhoneNumber geprüft und "No Value" zurückgegeben, wenn er null (Nothing in Visual Basic) ist. Andernfalls wird der Wert der Telefonnummer zurückgegeben. Mit diesem Ausdruck kann der Wert eines Textfelds in einem Berichtselement gesteuert werden.

    =IIF(Fields!PhoneNumber.Value Is Nothing,"No Value",Fields!PhoneNumber.Value)
    
  • Mit dem Ausdruck wird der Wert des Department-Felds geprüft und entweder ein Unterberichtsname oder ein null-Wert (Nothing in Visual Basic) zurückgegeben. Dieser Ausdruck kann für bedingte Drillthrough-Unterberichte verwendet werden.

    =IIF(Fields!Department.Value = "Development", "EmployeeReport", Nothing)
    
  • Prüft, ob ein Feldwert NULL ist. Dieser Ausdruck kann verwendet werden, um die Hidden-Eigenschaft eines Bildberichtselements zu steuern. Im folgenden Beispiel wird das durch das Feld [LargePhoto] angegebene Bild nur angezeigt, wenn der Wert des Felds ungleich NULL ist.

    =IIF(IsNothing(Fields!LargePhoto.Value),True,False)
    

Berichtsfunktionen

Reporting Services enthält weitere Berichtsfunktionen zum Bearbeiten von Berichtsdaten. In diesem Abschnitt werden Beispiele für zwei dieser Funktionen behandelt. Weitere Informationen zu Berichtsfunktionen und weitere Beispiele finden Sie unter Verwenden von integrierten Berichts- und Aggregationsfunktionen in Ausdrücken (Reporting Services).

Sum

  • Die Sum-Funktion gibt die Summe von Werten in einer Gruppe oder einem Datenbereich zurück. Diese Funktion ist hilfreich für die Kopf- oder Fußzeile einer Gruppe. Der folgende Ausdruck zeigt die Summe von Daten in der Gruppe bzw. im Datenbereich Order an:

    =Sum(Fields!LineTotal.Value, "Order")
    
  • Sie können auch die Sum-Funktion für bedingte Aggregatberechnungen verwenden. Wenn ein Dataset ein Feld mit dem Namen State und den möglichen Werten Not Started, Started und Finished enthält, wird mit dem folgenden Ausdruck die Aggregatsumme bei Platzierung in einem Gruppenheader nur für den Wert Finished berechnet:

    =Sum(IIF(Fields!State.Value = "Finished", 1, 0))
    

RowNumber

  • Mit der RowNumber-Funktion, die in einem Textfeld innerhalb eines Datenbereichs verwendet wird, wird die Zeilennummer für jede Instanz des Textfelds angezeigt, in der der Ausdruck enthalten ist. Diese Funktion eignet sich, um Zeilen in einer Tabelle zu nummerieren. Sie ist auch bei komplizierteren Aufgaben hilfreich, z. B. beim Einfügen von Seitenumbrüchen auf der Grundlage der Zeilenanzahl. Weitere Informationen finden Sie weiter unten unter "Seitenumbrüche".

    Der Bereich, den Sie für RowNumber-Steuerelemente angeben, wenn die Neunumerierung beginnt. Das Nothing-Schlüsselwort gibt an, dass die Funktion die Zählung mit der ersten Zeile im äußersten Datenbereich beginnt. Wenn Sie in geschachtelten Datenbereichen mit dem Zählen beginnen möchten, verwenden Sie den Namen des Datenbereichs. Um mit dem Zählen innerhalb einer Gruppe zu beginnen, verwenden Sie den Namen der Gruppe.

    =RowNumber(Nothing)
    

Darstellung von Berichtsdaten

Mit Ausdrücken können Sie die Darstellung von Daten in einem Bericht ändern. Beispielsweise können Sie die Werte von zwei Feldern in einem einzigen Textfeld anzeigen, Informationen zum Bericht anzeigen oder die Methode zum Einfügen von Seitenumbrüchen im Bericht ändern.

Seitenkopfzeilen und -fußzeilen

Beim Entwerfen eines Berichts soll möglicherweise der Name des Berichts und die Seitenzahl in der Fußzeile des Berichts angezeigt werden. Dazu können Sie die folgenden Ausdrücke verwenden:

  • Der folgende Ausdruck stellt den Namen des Berichts und die Zeit seiner Ausführung bereit. Er kann in einem Textfeld in der Fußzeile oder im Hauptteil des Berichts eingefügt werden. Die Zeit wird mit der .NET Framework-Formatzeichenfolge für ein kurzes Datum formatiert:

    =Globals.ReportName & ", dated " & Format(Globals.ExecutionTime, "d")
    
  • Der folgende Ausdruck zeigt in einem Textfeld in der Fußzeile eines Berichts die Seitenzahl und die Gesamtseitenzahl im Bericht an:

    =Globals.PageNumber & " of " & Globals.TotalPages
    

Die folgenden Beispiele veranschaulichen, wie der erste und letzte Wert einer Seite in der Seitenkopfzeile angezeigt wird, ähnlich wie bei einer Verzeichnisauflistung. Bei diesem Beispiel wird von einem Datenbereich ausgegangen, der das LastName-Textfeld enthält.

  • Der folgende Ausdruck, der sich in einem Textfeld auf der linken Seite des Seitenkopfes befindet, gibt den ersten Wert des LastName-Textfelds auf der Seite an:

    =First(ReportItems("LastName").Value)
    
  • Der folgende Ausdruck, der sich in einem Textfeld auf der rechten Seite des Seitenkopfes befindet, gibt den letzten Wert des LastName-Textfelds auf der Seite an:

    =Last(ReportItems("LastName").Value)
    

Das folgende Beispiel beschreibt, wie die Summe einer Seite angezeigt wird. Bei diesem Beispiel wird von einem Datenbereich ausgegangen, der das Cost-Textfeld enthält.

  • Der folgende Ausdruck, im Seitenkopf oder -fuß platziert, gibt die Summe der Werte im Cost-Textfeld für die Seite an:

    =Sum(ReportItems("Cost").Value)
    
HinweisHinweis

In einem Seitenkopf oder -fuß kann pro Ausdruck nur auf ein einziges Berichtselement verwiesen werden. In Seitenkopf- und -fußausdrücken können Sie außerdem auf den Textfeldnamen, jedoch nicht auf den tatsächlichen Datenausdruck innerhalb des Textfelds verweisen.

Seitenumbrüche

In manchen Berichten möchten Sie möglicherweise einen Seitenumbruch am Ende einer bestimmten Anzahl von Zeilen einfügen, und zwar anstelle von bzw. zusätzlich zu Gruppen oder Berichtselementen. Erstellen Sie dazu eine Gruppe mit den gewünschten Gruppen- oder Detaildatensätzen, und fügen Sie der Gruppe einen Seitenumbruch hinzu. Fügen Sie anschließend einen Gruppenausdruck hinzu, um eine Gruppierung nach einer bestimmten Anzahl von Zeilen durchzuführen.

  • Der folgende Ausdruck weist im Gruppenausdruck einer Gruppe von jeweils 25 Zeilen eine Zahl zu. Wenn ein Seitenumbruch für die Gruppe definiert ist, ergibt sich aus diesem Ausdruck alle 25 Zeilen ein Seitenumbruch.

    =CInt(Ceiling(RowNumber(Nothing)/25))
    

    Damit der Benutzer einen Wert für die Anzahl der Zeilen pro Seite festlegen kann, erstellen Sie einen Parameter mit dem Namen RowsPerPage und basieren den Gruppenausdruck auf dem Parameter, wie im folgenden Ausdruck gezeigt:

    =CInt(Ceiling(RowNumber(Nothing)/Parameters!RowsPerPage.Value))
    

    Weitere Informationen zum Festlegen von Seitenumbrüchen für eine Gruppe finden Sie unter Vorgehensweise: Hinzufügen eines Seitenumbruchs (Reporting Services).

Eigenschaften

Mit Ausdrücken werden nicht nur Daten in Textfeldern angezeigt. Sie können mit Ausdrücken auch festlegen, wie Eigenschaften auf Berichtselemente angewendet werden. Sie können Formatinformationen für ein Berichtselement ändern oder festlegen, ob es angezeigt wird.

Formatierung

  • Wenn der folgende Ausdruck in der Color-Eigenschaft eines Textfelds verwendet wird, wird die Farbe des Texts basierend auf dem Wert des Profit-Felds geändert:

    =Iif(Fields!Profit.Value < 0, "Red", "Black")
    
  • Wenn der folgende Ausdruck in der BackgroundColor-Eigenschaft eines Berichtselements in einem Datenbereich verwendet wird, wird die Hintergrundfarbe der Zeilen von hellgrün in weiß geändert:

    =Iif(RowNumber(Nothing) Mod 2, "PaleGreen", "White")
    

    Wenn Sie einen Ausdruck für einen angegebenen Bereich verwenden, müssen Sie möglicherweise das Dataset für die Aggregatfunktion angeben:

    =Iif(RowNumber("Employees") Mod 2, "PaleGreen", "White")
    
HinweisHinweis

Verfügbare Farben stammen aus der .NET FrameworkKnownColor-Enumeration.

Sichtbarkeit

Berichtselemente können mithilfe der Sichtbarkeitseigenschaften ein- und ausgeblendet werden. In einem Datenbereich, wie z. B. einer Tabelle, können die Detailzeilen basierend auf dem Wert eines Ausdrucks anfänglich ausgeblendet werden.

  • Wenn der folgende Ausdruck für die ursprüngliche Sichtbarkeit von Detailzeilen in einer Gruppe verwendet wird, werden die Detailzeilen für alle Umsätze angezeigt, die im PctQuota-Feld den Wert 90 % übersteigen:

    =Iif(Fields!PctQuota.Value>.9, False, True)
    
  • Wenn der folgende Ausdruck in der Hidden-Eigenschaft einer Tabelle festgelegt ist, wird die Tabelle mithilfe des Ausdrucks nur angezeigt, wenn sie mehr als 12 Zeilen enthält:

    =IIF(CountRows()>12,true,false)
    

URLs

Sie können URLs anpassen, indem Sie die Berichtsdaten verwenden und bedingt steuern, ob URLs als Aktion für ein Textfeld hinzugefügt werden.

  • Wenn der folgende Ausdruck als Aktion für ein Textfeld verwendet wird, wird eine angepasste URL generiert, die das Datasetfeld EmployeeID als URL-Parameter angibt.

    ="http://adventure-works/MyInfo?ID=" & Fields!EmployeeID.Value
    

    Weitere Informationen finden Sie unter Vorgehensweise: Hinzufügen eines Hyperlinks zu einer URL (Reporting Services).

  • Der folgende Ausdruck steuert bedingt, ob eine URL in einem Textfeld hinzugefügt wird. Dieser Ausdruck ist von einem Parameter mit dem Namen IncludeURLs abhängig, mit dem ein Benutzer entscheiden kann, ob aktive URLs in einen Bericht eingeschlossen werden sollen. Dieser Ausdruck wird als Aktion in einem Textfeld festgelegt. Indem Sie den Parameter auf FALSE festlegen und dann den Bericht anzeigen, können Sie den Bericht ohne Links nach Microsoft Excel exportieren.

    =IIF(Parameters!IncludeURLs.Value,"http://adventure-works.com/productcatalog",Nothing)
    

Berichtsdaten

Mit Ausdrücken können die im Bericht verwendeten Daten bearbeitet werden. Sie können auf Parameter und sonstige Berichtsinformationen verweisen. Es ist sogar möglich, die Abfrage zu ändern, mit der Daten für den Bericht abgerufen werden.

Parameter

Ausdrücke können in einem Parameter verwendet werden, um den Standardwert für den Parameter zu ändern. Beispielsweise können Sie mithilfe eines Parameters Daten nach einem bestimmten Benutzer basierend auf der Benutzer-ID filtern, mit der der Bericht ausgeführt wird.

  • Wenn der folgende Ausdruck als Standardwert für einen Parameter verwendet wird, wird die Benutzer-ID der Person abgerufen, die den Bericht ausführt:

    =User!UserID
    
  • Verwenden Sie die globale Parameters-Auflistung, um auf einen Parameter in einem Abfrageparameter, auf einen Filterausdruck, ein Textfeld oder einen anderen Bereich des Berichts zu verweisen. Bei diesem Beispiel wird von einem Parameter namens Department ausgegangen:

    =Parameters!Department.Value
    
  • Parameter können in einem Bericht erstellt und trotzdem ausgeblendet werden. Wenn der Bericht auf dem Berichtsserver ausgeführt wird, erscheint der Parameter nicht auf der Symbolleiste und der Leser des Berichts kann den Standardwert nicht ändern. Sie können einen ausgeblendeten, auf einen Standardwert festgelegten Parameter als benutzerdefinierte Konstante verwenden. Diesen Wert können Sie in einem beliebigen Ausdruck verwenden, einschließlich eines Feldausdrucks. Der folgende Ausdruck gibt das vom Standardparameterwert für den Parameter mit dem Namen ParameterField angegebene Feld an:

    =Fields(Parameters!ParameterField.Value).Value
    

    Weitere Informationen finden Sie unter Festlegen von Parametereigenschaften für einen publizierten Bericht.

Benutzerdefinierter Code

In einem Bericht kann benutzerdefinierter Code verwendet werden. Benutzerdefinierter Code ist entweder in einen Bericht eingebettet oder in einer benutzerdefinierten Assembly gespeichert, die im Bericht verwendet wird. Weitere Informationen zu benutzerdefiniertem Code finden Sie unter Verwenden von benutzerdefinierten Codeverweisen in Ausdrücken (Reporting Services).

  • Im folgenden Beispiel wird eine eingebettete Codemethode namens ToUSD aufgerufen, die den Wert des StandardCost-Felds in einen Dollarwert konvertiert:

    =Code.ToUSD(Fields!StandardCost.Value)
    
  • Im folgenden Beispiel wird veranschaulicht, wie einige benutzerdefinierte Konstanten und Variablen definiert werden können.

    [Visual Basic]

    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 und Variablen nicht in der Ansicht der Ausdrucks-Editor-Konstanten 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). Sie werden wie Variants behandelt.

    [Visual Basic]

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

Eine andere Möglichkeit, benutzerdefinierte Konstanten zu erstellen oder einen Wert für einen Ausdruck anzupassen, ist die Verwendung einer Berichts- oder Gruppenvariablen.

Verwenden von Gruppenvariablen für benutzerdefinierte Aggregation

Sie können den Wert für eine Gruppenvariable initialisieren, die zu einem bestimmten Gruppenbereich lokal ist, und anschließend einen Verweis auf diese Variable in den Ausdrücken einbinden. Eine der Methoden, wie Sie eine Gruppenvariable mit benutzerdefiniertem Code verwenden können, besteht darin, ein benutzerdefiniertes Aggregat zu implementieren. Weitere Informationen finden Sie unter Gruppevariablen in Reporting Services 2008 für benutzerdefinierte Aggregation verwenden.

Weitere Informationen zu Variablen finden Sie unter Verwenden von Verweisen auf Berichts- und Gruppenvariablenauflistungen in Ausdrücken (Reporting Services).

Ersetzen von Text in einem Feld zur Laufzeit

Im folgenden Beispiel wird eine eingebettete Codemethode namens FixSpelling aufgerufen, mit der alle Vorkommen des Texts "Bike" in SubCategory.Value durch "Bicycle" ersetzt werden.

=Code.FixSpelling(Fields!SubCategory.Value)

Mit dem folgenden Code wird eine Implementierung der FixSpelling-Methode veranschaulicht, wenn er in eine Berichtsdefinition eingebettet ist. Dieses Beispiel zeigt, wie auf die .NET FrameworkSystem.Text..::..StringBuilder-Klasse verwiesen wird. Weitere Informationen finden Sie unter Vorgehensweise: Hinzufügen von Code zu einem Bericht (Reporting Services) und Vorgehensweise: Hinzufügen eines Assemblyverweises zu einem Bericht (Reporting Services).

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

Unterdrücken von NULL oder 0 zur Laufzeit

Einige Werte in einem Ausdruck können zur Berichtsverarbeitungszeit mit NULL oder "nicht definiert" ausgewertet werden. Dies kann zu Laufzeitfehlern und zur Anzeige von #Error im Textfeld statt des ausgewerteten Ausdrucks führen. Die IIF-Funktion ist für dieses Verhalten besonders empfindlich, da im Gegensatz zu einer If-Then-Else-Anweisung jeder Teil der IIF-Anweisung (einschließlich Funktionsaufrufe) ausgewertet wird, bevor er an die Routine zur Prüfung auf true oder false übergeben wird. Die Anweisung =IIF(Fields!Sales.Value is NOTHING, 0, Fields!Sales.Value) generiert #Error im gerenderten Bericht, wenn Fields!Sales.Value NOTHING ist.

Wählen Sie eine der folgenden Strategien aus, um diesen Fehler zu vermeiden:

  • Legen Sie den Zähler auf 0 und den Nenner auf 1 fest, wenn der Wert für das Feld B 0 oder nicht definiert ist. Andernfalls legen Sie den Zähler auf den Wert für Feld A und den Nenner auf den Wert für Feld B fest.

    =IIF(Field!B.Value=0, 0, Field!A.Value / IIF(Field!B.Value =0, 1, Field!B.Value))
    
  • Verwenden Sie eine benutzerdefinierte Codefunktion, um den Wert für den Ausdruck zurückzugeben. Im folgenden Beispiel wird der Prozentsatzunterschied zwischen einem aktuellen Wert und einem vorherigen Wert zurückgegeben. Dieser Wert kann zur Berechnung der Differenz wischen zwei aufeinanderfolgenden Werten verwendet werden und verarbeitet den Grenzfall des ersten Vergleichs (wenn kein vorheriger Wert vorhanden ist) sowie Fälle, in denen entweder der vorherige Wert oder der aktuelle Wert null ist (Nothing in Visual Basic).

    Public Function GetDeltaPercentage(ByVal PreviousValue, ByVal CurrentValue) As Object
        If IsNothing(PreviousValue) OR IsNothing(CurrentValue) Then
            Return Nothing
        Else if PreviousValue = 0 OR CurrentValue = 0 Then
            Return Nothing
        Else 
            Return (CurrentValue - PreviousValue) / CurrentValue
        End If
    End Function
    

    Der folgende Ausdruck zeigt, wie dieser benutzerdefinierte Code aus einem Textfeld aufgerufen wird:

    =Code.GetDeltaPercentage(Previous(Sum(Fields!Sales.Value),"ColumnGroupByYear"), Sum(Fields!Sales.Value))
    

Änderungsverlauf

Aktualisierter Inhalt

Beispiele für die Choose-Funktion und zum Berechnen benutzerdefinierter Aggregate mit Gruppenvariablen in Verbindung mit benutzerdefiniertem Code hinzugefügt.