Verwenden von Verweisen auf Datasetfeldauflistungen in Ausdrücken (Berichts-Generator 2.0)

Jedes Dataset in einem Bericht enthält eine Fields-Auflistung. Bei der Fields-Auflistung handelt es sich um eine Gruppe von Feldern, die von der Datasetabfrage und zusätzlichen berechneten Feldern angegeben werden, die Sie erstellen. Nachdem Sie ein Dataset erstellt haben, wird die Feldauflistung im Bereich Berichtsdaten angezeigt.

Ein einfacher Feldverweis in einem Ausdruck wird auf der Entwurfsoberfläche als einfacher Ausdruck angezeigt. Wenn Sie zum Beispiel das Feld Sales aus dem Bereich Berichtsdaten in eine Tabellenzelle der Entwurfsoberfläche ziehen, zeigt Reporting Services den Text [Sales] an. Dies ist der zugrunde liegende Ausdruck =Fields!Sales.Value, der in der Value-Eigenschaft des Textfelds festgelegt wird. Wenn der Bericht ausgeführt wird, wertet der Berichtsprozessor diesen Ausdruck aus und zeigt die eigentlichen Daten der Datenquelle in der Tabellenzelle im Textfeld an. Weitere Informationen finden Sie unter Grundlegendes zu einfachen und komplexen Ausdrücken (Berichts-Generator 2.0) und Arbeiten mit Feldern in einem Berichtsdataset (Berichts-Generator 2.0).

Anzeigen der Feldauflistung für ein Dataset

Ziehen Sie die Felder einzeln in eine Tabellendetailzeile, um die jeweiligen Werte für eine Feldauflistung anzuzeigen. Die Verweise aus der Detailzeile eines Tabellen- oder Listendatenbereichs zeigen für jede Zeile im Dataset einen Wert an.

Um zusammengefasste Werte für ein Feld anzuzeigen, ziehen Sie die einzelnen numerischen Felder in den Datenbereich einer Matrix. Die Standardaggregatfunktion für die gesamte Zeile ist Sum, zum Beispiel =Sum(Fields!Sales.Value). Sie können die Standardfunktion ändern, um andere Gesamtbeträge zu berechnen. Weitere Informationen finden Sie unter Verwenden von integrierten Berichts- und Aggregationsfunktionen in Ausdrücken (Berichts-Generator 2.0).

Sie müssen den Datasetnamen als Bereich für die Aggregatfunktion angeben, um die zusammengefassten Werte für eine Feldauflistung in einem Textfeld direkt auf der Entwurfsoberfläche anzuzeigen (ist nicht Teil eines Datenbereichs). Für ein Dataset mit dem Namen SalesData gibt der folgende Ausdruck den Gesamtbetrag aller Werte für das Feld Sales an: =Sum(Fields!Sales,"SalesData").

Wenn Sie das Dialogfeld Ausdruck zum Definieren eines einfachen Feldverweises verwenden, können Sie die Fields-Auflistung im Bereich Kategorie wählen, um die Liste der verfügbaren Felder im Bereich Feld anzuzeigen. Jedes Feld verfügt über mehrere Eigenschaften, zum Beispiel Value und IsMissing. Bei den restlichen Eigenschaften handelt es sich um vordefinierte erweiterte Feldeigenschaften, die je nach Datenquellentyp für das Dataset verfügbar sind.

Erkennen von Nullen für ein Datasetfeld

Um einen Feldwert zu erkennen, der NULL (Nothing in Visual Basic) ist, können Sie die Funktion IsNothing verwenden. Wenn der folgende Ausdruck in einem Textfeld in eine Tabellendetailzeile eingefügt wird, prüft dieser das Feld MiddleName und ersetzt den Text "No Middle Name", wenn der Wert NULL ist, und den Feldwert selbst, wenn der Wert nicht NULL ist:

=IIF(IsNothing(Fields!MiddleName.Value),"No Middle Name",Fields!MiddleName.Value)

Erkennen von fehlenden Feldern für dynamische Abfragen zur Laufzeit

Elemente in der Fields-Auflistung besitzen in der Standardeinstellung zwei Eigenschaften: Value und IsMissing. Mit der IsMissing-Eigenschaft wird angegeben, ob ein zur Entwurfszeit für ein Dataset definiertes Feld in den Feldern enthalten ist, die zur Laufzeit abgerufen werden. Die Abfrage kann zum Beispiel eine gespeicherte Prozedur aufrufen, bei der das Resultset in Abhängigkeit eines Eingabeparameters variiert, oder die Abfrage kann SELECT * FROM <table> lauten und die Tabellendefinition ändern.

HinweisHinweis

IsMissing erkennt für alle Datenquellentypen Änderungen des Datasetschemas zwischen Entwurfs- und Laufzeit. Sie können IsMissing nicht verwenden, um in einem mehrdimensionalen Cube leere Elemente zu erkennen, und es besteht keine Beziehung zu den Begriffen EMPTY und NON EMPTY der MDX-Abfragesprache.

Sie können die IsMissing-Eigenschaft in benutzerdefiniertem Code testen, um zu ermitteln, ob ein Feld im Resultset vorhanden ist. Für diesen Test können Sie keinen Ausdruck mit einem Visual Basic-Funktionsaufruf verwenden, wie IIF oder SWITCH, weil Visual Basic alle Parameter im Aufruf basierend auf der Funktion auswertet. Dies führt zu einem Fehler, wenn der Verweis auf das fehlende Feld ausgewertet wird.

Beispiel für die Steuerung der Sichtbarkeit einer dynamischen Spalte für ein fehlendes Feld

Um einen Ausdruck festzulegen, der die Sichtbarkeit einer Spalte steuert, die ein Feld in einem Dataset anzeigt, führen Sie Folgendes durch: Sie müssen zuerst eine benutzerdefinierte Codefunktion definieren, die einen booleschen Wert basierend darauf zurückgibt, ob das Feld fehlt. Beispielsweise gibt die folgende benutzerdefinierte Codefunktion true zurück, wenn das Feld fehlt, und false, wenn das Feld vorhanden ist.

Public Function IsFieldMissing(field as Field) as Boolean
 If (field.IsMissing) Then
 Return True
  Else 
  Return False
 End If
End Function

Legen Sie die Hidden-Eigenschaft der Spalte auf den folgenden Ausdruck fest, um diese Funktion zum Steuern der Sichtbarkeit einer Spalte zu verwenden:

=Code.IsFieldMissing(Fields!FieldName)

Die Spalte wird ausgeblendet, wenn das Feld nicht vorhanden ist.

Beispiel für die Steuerung des Textfeldwerts für ein fehlendes Feld

Um Text zu ersetzen, den Sie anstelle des Wertes eines fehlenden Felds schreiben, müssen Sie benutzerdefinierten Code schreiben. Der Code muss Text zurückgeben, den Sie anstelle eines Feldwertes verwenden können, wenn das Feld fehlt. Die folgende benutzerdefinierte Codefunktion gibt den Wert des Felds zurück, wenn das Feld vorhanden ist, und die als zweiten Parameter angegebene Meldung, wenn das Feld nicht vorhanden ist:

Public Function IsFieldMissingThenString(field as Field, strMessage as String) as String
 If (field.IsMissing) Then
  Return strMessage
 Else 
  Return field.Value
  End If
End Function

Fügen Sie den folgenden Ausdruck der Value-Eigenschaft hinzu, um diese Funktion in einem Textfeld zu verwenden:

=Code.IsFieldMissingThenString(Fields!FieldName,"Missing")

Das Textfeld zeigt entweder den Feldwert oder den Text an, den Sie angegeben haben.

Verwenden von erweiterten Feldeigenschaften

Bei den erweiterten Feldeigenschaften handelt es sich um zusätzliche Eigenschaften, die für ein Feld über die Datenverarbeitungserweiterung definiert werden, die vom Datenquellentyp für das Dataset bestimmt wird. Erweiterte Feldeigenschaften sind entweder vordefiniert oder gelten speziell für einen Datenquellentyp.

Vordefinierte Eigenschaften sind häufig verwendete Feldeigenschaften, zum Beispiel Key und UniqueName. Reporting Services ordnet diesen vordefinierten Feldern Eigenschaften zu, die in der Datenquelle verfügbar sind. Vordefinierte Eigenschaften werden in der IntelliSense-Liste im Dialogfeld Ausdruck angezeigt. Wie Sie den Namen eines Felds mithilfe der Feldauflistungssyntax eingeben, wird eine Dropdownliste mit den verfügbaren Eigenschaften angezeigt. Verwenden Sie die einfache Feldverweissyntax für vordefinierte Eigenschaften, zum Beispiel =Fields!Sales.Value.

Eigenschaften, die speziell für einen Datenquellentyp gelten, werden im Dialogfeld Ausdruck nicht angezeigt. Sie können jedoch ermittelt werden, wenn Sie eine Datenquelle mit dem zugeordneten Abfrage-Designer untersuchen. Auf alle erweiterten Feldeigenschaften kann mithilfe der Auflistungssyntax =Fields!FieldName("Property") verwiesen werden. Beispiele für erweiterte Feldeigenschaften finden Sie unter Verwenden erweiterter Feldeigenschaften für eine Analysis Services-Datenbank (Berichts-Generator 2.0). Beispiele für Anbieter, die erweiterte Feldeigenschaften unterstützen, finden Sie unter Erstellen von Berichtsdatasets für SQL Server Analysis Services (Berichts-Generator 2.0), Erstellen von Berichtsdatasets aus einer SAP NetWeaver BI-Datenquelle (Berichts-Generator 2.0) und Erstellen von Berichtsdatasets aus einer Hyperion Essbase-Datenquelle (Berichts-Generator 2.0).

Wenn Sie eine Eigenschaft angeben, die für das Feld nicht unterstützt wird, wird der Verweis als null (Nothing in Visual Basic) ausgewertet. Wenn ein Datenanbieter keine erweiterten Feldeigenschaften unterstützt oder wenn das Feld während des Ausführens der Abfrage nicht gefunden wird, entspricht der Wert für die Eigenschaft bei Eigenschaften vom Typ String und Object dem Wert null (Nothing in Visual Basic), und bei Eigenschaften vom Typ Integer entspricht er Null (0). Für eine Datenverarbeitungserweiterung können die Vorteile der vordefinierten Eigenschaften genutzt werden, indem die Abfragen optimiert werden, die diese Syntax enthalten.