Arbeiten mit Datentypen in Ausdrücken (Berichts-Generator 2.0)

Datentypen stellen verschiedene Arten von Daten dar, die auf diese Weise effizient gespeichert und verarbeitet werden können. Zu den gängigen Datentypen gehören Text (auch String oder Zeichenfolge genannt), Zahlen mit oder ohne Dezimalstellen, Datum und Uhrzeit sowie Bilder. Daten können aus Gründen der Effizienz mit einem bestimmten Datentyp gespeichert, aber im angezeigten Bericht gemäß Ihren Wünschen formatiert werden. So kann ein Feld, das eine Währung darstellt, als Gleitkommazahl gespeichert, jedoch je nach gewählter Formatierungseigenschaft in verschiedenen Formaten angezeigt werden. Weitere Informationen zu Anzeigeformaten finden Sie unter Formatieren von Berichtselementen (Berichts-Generator 2.0).

Es ist wichtig, dass Sie mit Datentypen vertraut sind, wenn Sie Ausdrücke zum Vergleichen oder Kombinieren von Werten schreiben, zum Beispiel, wenn Sie Gruppierungs- oder Filterausdrücke definieren oder Aggregate berechnen. Vergleiche und Berechnungen können nur mit Elementen des gleichen Datentyps durchgeführt werden. Wenn die Datentypen nicht übereinstimmen, müssen sie explizit in den Berichtselementen durch einen Ausdruck konvertiert werden. In den folgenden Situationen müssen Sie möglicherweise Daten in einen anderen Datentyp konvertieren:

  • Vergleichen des Werts eines Berichtsparameters mit einem Datentyp mit einem Datasetfeld eines anderen Datentyps

  • Schreiben von Filterausdrücken, die Werte mit unterschiedlichen Datentypen vergleichen

  • Schreiben von Sortierungsausdrücken, die Felder mit unterschiedlichen Datentypen kombinieren

  • Schreiben von Gruppierungsausdrücken, die Felder mit unterschiedlichen Datentypen kombinieren

  • Konvertieren eines aus der Datenquelle abgerufenen Werts von einem Datentyp in einen anderen Datentyp

Ermitteln des Datentyps von Berichtsdaten

Zum Ermitteln des Datentyps von Berichtselementen können Sie einen Ausdruck schreiben, der den Datentyp zurückgibt. Wenn Sie beispielsweise den Datentyp des Felds MyField anzeigen möchten, fügen Sie einer Tabellenzelle den folgenden Ausdruck hinzu: =Fields!MyField.Value.GetDataType().ToString(). Das Ergebnis zeigt den CLR-Datentyp an, der MyField darstellt, zum Beispiel System.String oder System.DateTime.

Konvertieren von Datasetfeldern in einen anderen Datentyp

Sie können auch Datasetfelder konvertieren, bevor sie in einem Bericht verwendet werden. Im Folgenden werden Methoden beschrieben, mit denen Sie ein vorhandenes Datasetfeld konvertieren können:

  • Ändern Sie die Datasetabfrage so, dass ein neues Abfragefeld mit den konvertierten Daten hinzugefügt wird. Bei relationalen oder mehrdimensionalen Datenquellen werden in diesem Fall Datenquellenressourcen zum Durchführen der Konvertierung verwendet.
  1. Erstellen Sie ein berechnetes, auf einem bestehenden Berichtsdatasetfeld basierendes Feld, indem Sie einen Ausdruck schreiben, durch den alle Daten in einer Resultsetspalte in eine neue Spalte mit einem anderen Datentyp konvertiert werden. So wird beispielsweise durch den folgenden Ausdruck das Feld Year von einer ganzen Zahl in eine Zeichenfolge konvertiert: =CStr(Fields!Year.Value). Weitere Informationen finden Sie unter Vorgehensweise: Hinzufügen, Bearbeiten oder Löschen eines Felds im Fenster 'Berichtsdaten' (Berichts-Generator 2.0).

Parameterdatentypen

Berichtsparameter müssen einen der folgenden Datentypen aufweisen: Boolesch (Boolean), Datum/Zeit (DateTime), Ganzzahl (Integer), Gleitkomma (Float) oder Text (String). Wenn eine Datasetabfrage Abfrageparameter enthält, werden automatisch Berichtsparameter erstellt und mit den Abfrageparametern verknüpft. Der Standarddatentyp für einen Berichtsparameter lautet String. Wenn Sie den Standarddatentyp eines Berichtsparameters ändern möchten, wählen Sie im Dialogfeld Berichtsparametereigenschaften auf der Seite Allgemein in der Dropdownliste Datentyp den gewünschten Wert aus.

HinweisHinweis

Berichtsparameter mit einem DateTime-Datentyp unterstützen keine Millisekunden. Sie können zwar einen Parameter erstellen, der auf Werten mit Millisekunden basiert, in der Dropdownliste mit den verfügbaren Werten kann jedoch kein Wert ausgewählt werden, der Datums- oder Zeitwerte mit Millisekunden enthält.

Schreiben von Ausdrücken zum Konvertieren von Datentypen oder Extrahieren von Datenteilen

Wenn Sie Text und Datasetfelder mit dem Verkettungsoperator (&) kombinieren, stellt die Common Language Runtime (CLR) im Allgemeinen Standardformate bereit. Falls Sie ein Datasetfeld oder einen Parameter explizit in einen bestimmten Datentyp konvertieren müssen, müssen die Daten mit einer CLR-Methode oder einer Funktion der Visual Basic-Laufzeit konvertiert werden.

Die folgende Tabelle enthält Beispiele zum Konvertieren von Datentypen.

Art der Konvertierung

Beispiel

DateTime zu String

=CStr(Fields!Date.Value)

String zu DateTime

=DateTime.Parse(Fields!DateTimeinStringFormat.Value)

String zu DateTimeOffset

=DateTimeOffset.Parse(Fields!DateTimeOffsetinStringFormat.Value)

Extrahieren des Jahrs

=Year(Fields!TimeinStringFormat.Value)

-- or --

=Year(Fields!TimeinDateTimeFormat.Value)

Boolean zu Integer

=CInt(Parameters!BooleanField.Value)

-1 ist True und 0 ist False.

Boolean zu Integer

=System.Convert.ToInt32(Fields!BooleanFormat.Value)

1 ist True und 0 ist False.

Nur der Datums-/Uhrzeitanteil (DateTime) des DateTimeOffset-Werts

=Fields!MyDatetimeOffset.Value.DateTime

Nur der Zeitverschiebungsanteil (Offset) des DateTimeOffset-Werts

=Fields!MyDatetimeOffset.Value.Offset

Mit der Formatierungsfunktion können Sie zudem das Anzeigeformat des Wertes steuern. Weitere Informationen finden Sie unter Funktionen (Visual Basic).

Komplexere Beispiele

Wenn Sie eine Datenquelle mit einem Datenanbieter verbinden, der nicht die Konvertierung aller Datentypen in der Datenquelle unterstützt, wird standardmäßig für alle nicht unterstützten Datentypen der Datentyp String verwendet. In den folgenden Beispielen finden Sie Lösungen für bestimmte Datentypen, die als Zeichenfolge (String) zurückgegeben werden.

Verketten eines String-Datentyps und eines CLR-DateTimeOffset-Datentyps

Die CLR stellt für die meisten Datentypen eine Standardkonvertierung bereit, sodass Sie Werte mit unterschiedlichen Datentypen mithilfe des &-Operators in einer Zeichenfolge verketten können. Der folgende Ausdruck verkettet zum Beispiel den Text „The date and time are:“ mit einem StartDate-Datasetfeld, bei dem es sich um einen System..::..DateTime-Wert handelt: ="The date and time are: " & Fields!StartDate.Value.

Bei einigen Datentypen müssen Sie eventuell die ToString-Funktion verwenden. Der folgende Ausdruck zeigt das gleiche Beispiel mit dem CLR-Datentyp System..::..DateTimeOffset, der das Datum, die Uhrzeit sowie eine Zeitzonenverschiebung relativ zur UTC-Zeitzone beinhaltet: ="The time is: " & Fields!StartDate.Value.ToString()

Konvertieren eines String-Datentyps in einen CLR-DateTime-Datentyp

Falls eine Datenverarbeitungserweiterung nicht alle in einer Datenquelle definierten Datentypen unterstützt, werden die Daten eventuell als Text abgerufen. Beispiel: Der Datentypwert datetimeoffset(7) wird möglicherweise als String-Datentyp abgerufen. Für Perth in Australien würde der Zeichenfolgenwert für den 1. Juli 2008, 6:05:07.9999999 in etwa wie folgt aussehen:

2008-07-01 06:05:07.9999999 +08:00

Dieses Beispiel zeigt das Datum (1. Juli 2008), gefolgt von der Uhrzeit mit 7-stelliger Präzision (6:05:07.9999999), gefolgt von der UTC-Zeitzonenverschiebung in Stunden und Minuten (plus 8 Stunden, 0 Minuten). In den folgenden Beispielen befindet sich dieser Wert im String-Feld MyDateTime.Value.

Sie können diese Daten mit einer der folgenden Methoden in einen oder mehrere CLR-Werte konvertieren:

  • Verwenden Sie in einem Textfeld einen Ausdruck, um Teile der Zeichenfolge zu extrahieren. Beispiel:

    • Mit dem folgenden Ausdruck wird der Stundenwert der UTC-Zeitzonenverschiebung extrahiert und in Minuten konvertiert: =CInt(Fields!MyDateTime.Value.Substring(Fields!MyDateTime.Value.Length-5,2)) * 60

      Das Ergebnis ist 480.

    • Mit dem folgenden Ausdruck wird die Zeichenfolge in einen Datums- und Uhrzeitwert konvertiert: =DateTime.Parse(Fields!MyDateTime.Value)

      Falls die Zeichenfolge MyDateTime.Value eine UTC-Zeitverschiebung aufweist, passt die Funktion DateTime.Parse zunächst die UTC-Zeitverschiebung an (7:00 - [+08:00] zur UTC-Zeit 23:00 in der vorherigen Nacht). Anschließend wendet die Funktion DateTime.Parse die UTC-Zeitverschiebung des lokalen Berichtsservers an und passt die Zeit ggf. noch einmal an die Sommerzeit an. So ist zum Beispiel in Redmond, Washington/USA die lokale Zeitverschiebung, angepasst an die Sommerzeit, [-07:00], das heißt 7 Stunden früher als 23:00. Daraus ergibt sich der folgende DateTime-Wert: 2007-07-06 04:07:07 PM (6. Juli 2007, 16:07).

Weitere Informationen zum Konvertieren von Zeichenfolgen in DateTime-Datentypen finden Sie unter Verarbeiten von Zeichenfolgen für Datum und Uhrzeit, Formatieren von Datum und Uhrzeit für eine bestimmte Kultur und Auswählen zwischen "DateTime", "DateTimeOffset" und "TimeZoneInfo" auf der MSDN-Website.

  • Fügen Sie ein neues berechnetes Feld dem Berichtsdataset hinzu, das einen Ausdruck verwendet, mit dem Teile der Zeichenfolge extrahiert werden. Weitere Informationen finden Sie unter Vorgehensweise: Hinzufügen, Bearbeiten oder Löschen eines Felds im Fenster 'Berichtsdaten' (Berichts-Generator 2.0).

  • Ändern Sie die Berichtsdatasetabfrage so, dass mit Transact-SQL-Funktionen die Datums- und Uhrzeitwerte unabhängig voneinander abgerufen und separate Spalten erstellt werden. Im folgenden Beispiel wird gezeigt, wie Sie mit der Funktion DatePart eine Spalte für das Jahr und eine Spalte für die in Minuten konvertierte UTC-Zeitzone hinzufügen können:

    SELECT

    MyDateTime,

    DATEPART(year, MyDateTime) AS Year,

    DATEPART(tz, MyDateTime) AS OffsetinMinutes

    FROM MyDates

    Das Resultset hat drei Spalten. Die erste Spalte enthält Datum und Uhrzeit, die zweite das Jahr und die dritte die UTC-Zeitverschiebung in Minuten. Die folgende Zeile enthält Beispieldaten:

    2008-07-01 06:05:07 2008 480

Weitere Informationen zu SQL Server-Datenbanktypen finden Sie unter "Datentypen" und "Datums- und Uhrzeitdatentypen und zugehörige Funktion" in der SQL Server 2008-Dokumentation in der SQL Server-Onlinedokumentation.