Verwenden von ein- und mehrwertigen Parametern (Berichts-Generator 2.0)
Parameter können ein- oder mehrwertig sein. Ein mehrwertiger Parameter kann auf mehrere Werte festgelegt werden. Wenn Sie eine Liste der verfügbaren Werte für einen mehrwertigen Parameter definieren, wird in der Berichtssymbolleiste in der Dropdownliste automatisch eine Option Alles auswählen angezeigt. Mit dieser Option können Sie alle Werte in der Liste auswählen und deren Auswahl aufheben.
In den Textfeldern der Entwurfsoberfläche werden sowohl ein- als auch mehrwertige Parameter als einfache Ausdrücke, die mit dem Symbol @ beginnen, angezeigt. Beispielsweise wird ein Parameter mit dem Namen Store als [@Store] angezeigt. Weitere Informationen finden Sie unter Grundlegendes zu einfachen und komplexen Ausdrücken (Berichts-Generator 2.0).
Zum Festlegen der mehrwertigen Eigenschaft eines Parameters wählen Sie im Dialogfeld Berichtsparametereigenschaften die Option Mehrere Werte zulassen aus. Sie können alle Parametertypen außer Boolean als mehrwertig festlegen.
Mehrwertige Parameter dienen in erster Linie dazu, Abfrageeinschränkungsklauseln wie Transact-SQL-WHERE-Klauseln oder MDX-Filterklauseln zu ermöglichen, die zur Prüfung auf Vorhandensein in einer Menge von Werten anstelle zur Prüfung auf Übereinstimmung mit einem einzelnen Wert dienen. Weitere Informationen zum Erstellen von mehrwertigen Parametern finden Sie unter Lernprogramm: Hinzufügen von Parametern zum Filtern von Berichtsdaten (Berichts-Generator 2.0) und Erstellen von Berichtsparametern und Festlegen von Berichtsparametereigenschaften (Berichts-Generator 2.0).
Sicherheitshinweis |
---|
Verwenden Sie in einem Bericht, der einen Parameter vom Typ String enthält, eine Liste der verfügbaren Werte (wird auch als Liste der gültigen Werte bezeichnet), und stellen Sie sicher, dass Benutzer, die den Bericht ausführen, nur über die Berechtigungen verfügen, die zum Anzeigen der Daten im Bericht erforderlich sind. Wenn Sie einen Parameter vom Typ String definieren, wird für den Benutzer ein Textfeld bereitgestellt, das jeden beliebigen Wert annehmen kann. Mit einer Liste der verfügbaren Werte werden die Werte eingeschränkt, die eingegeben werden können. Wenn der Berichtsparameter an einen Abfrageparameter gebunden ist und Sie keine Liste mit verfügbaren Werten verwenden, kann ein Benutzer des Berichts SQL-Syntax in das Textfeld eingeben. Damit öffnet er den Bericht und Ihren Server potenziell für einen SQL-Injection-Angriff. Wenn der Benutzer über Berechtigungen zum Ausführen der neuen SQL-Anweisung verfügt, können daraus unerwünschte Ergebnisse auf dem Server resultieren. Wenn ein Berichtsparameter nicht an einen Abfrageparameter gebunden ist und die Parameterwerte im Bericht enthalten sind, können die Benutzer des Berichts Ausdruckssyntax oder eine URL in den Parameterwert eingeben und den Bericht für Excel oder HTML rendern. Zeigt ein anderer Benutzer den Bericht an und klickt auf den gerenderten Parameterinhalt, führt der Benutzer möglicherweise unabsichtlich das bösartige Skript bzw. den Link aus. Um das Risiko der unabsichtlichen Ausführung böswilliger Skripts zu verringern, sollten gerenderte Berichte nur von vertrauenswürdigen Quellen geöffnet werden. Weitere Informationen zum Sichern von Berichten finden Sie unter „Sichern von Berichten und Ressourcen“ in der Reporting Services-Dokumentation unter SQL Server-Onlinedokumentation. |
Schreiben von Abfragen für mehrwertige Berichtsparameter
Sie können einen mehrwertigen Parameter für jeden von Ihnen erstellten Berichtsparameter definieren. Wenn Sie jedoch Werte von mehrwertigen Parametern über eine Abfrage an eine Datenquelle zurückgeben möchten, müssen die folgenden Anforderungen erfüllt sein:
Bei der Datenquelle muss es sich um SQL Server, Oracle, Analysis Services, SAP BI NetWeaver oder Hyperion Essbase handeln.
Bei der Datenquelle kann es sich nicht um eine gespeicherte Prozedur handeln. Das Übergeben eines Arrays von mehrwertigen Parametern an eine gespeicherte Prozedur wird von Reporting Services nicht unterstützt.
In der Abfrage muss eine IN-Klausel zum Angeben des Parameters verwendet werden.
Das folgende Beispiel veranschaulicht die Verwendung des IN-Schlüsselwortes in der WHERE-Klausel einer Transact-SQL-Anweisung. Weitere Informationen zum IN-Schlüsselwort oder zu den mit dieser Abfrage zurückgegebenen Ergebnissen finden Sie unter "IN (Transact-SQL)" in der SQL Server 2008-Dokumentation in der SQL Server-Onlinedokumentation.
SELECT FirstName, LastName, e.Title
FROM HumanResources.Employee AS e
JOIN Person.Contact AS c
ON e.ContactID = c.ContactID
WHERE e.Title IN (@Title)
Um dies in einem Bericht auszuprobieren, definieren Sie mithilfe dieser Abfrage ein Dataset. Ändern Sie die Eigenschaften für den automatisch erstellten Berichtsparameter Title wie folgt:
Wählen Sie die Option Mehrwertig aus.
Wählen Sie unter Verfügbare Werte die Option Nicht abgefragt aus. Geben Sie in der Spalte Wert die folgende Liste ein (lassen Sie die Spalte Bezeichnung leer): Design Engineer, Buyer, Marketing Assistant
Geben Sie in das Feld Standardwerte den Text Buyer ein.
Zeigen Sie eine Vorschau an. Wählen Sie für Title verschiedene Wertekombinationen aus, und überprüfen Sie, ob Sie die gewünschten Ergebnisse erhalten.
Hinweis |
---|
Abfragen für Datenquellen, die Parameter nicht als Array verarbeiten können, werden vom Berichtsserver neu geschrieben. Das Neuschreiben der Abfrage ist erforderlich, um das gewünschte Ergebnis zu erzielen. Ein Neuschreiben der Abfrage wird ausgelöst, wenn ein Parameter als mehrwertig definiert ist und in der Abfrage eine IN-Anweisung zum Angeben des Parameters verwendet wird. Wenn Sie eine Abfrage erstellen, die die IN-Anweisung nicht enthält, beachten Sie, dass Sie die Logik umgehen, die der Berichtsserver für die Unterstützung von mehrwertigen Parametern bereitstellt. |
Filterausdrücke für Datasets, Datenbereiche und Gruppen werden auf der Seite Filter des entsprechenden Dialogfelds Eigenschaften definiert. Wenn Sie einen Filterausdruck definiert haben, der sich auf einen mehrwertigen Parameter bezieht, müssen Sie den IN-Operator im Filterausdruck verwenden. Filterausdrücke, die andere Operatoren als IN verwenden, verursachen Verarbeitungsfehler. Weitere Informationen finden Sie unter Vorgehensweise: Hinzufügen eines Filters (Berichts-Generator 2.0).
Schreiben von Ausdrücken, die auf mehrwertige Parameter verweisen
Um in einem Ausdruck auf einen Parameter zu verweisen, verwenden Sie die integrierte Auflistung Parameters. Um in einem Ausdruck einen mehrwertigen Parameter verwenden zu können, müssen Sie verstehen, wie ein einzelner Wert und wie ein gesamtes Array von Werten adressiert wird. Die folgenden Tabelle enthält Beispiele und Beschreibungen von Eigenschaften für Parameter, für die mehrere Werte zulässig sind.
Beispiel: |
Description |
---|---|
Parameters!<ParameterName>.Value |
Ein Array von VARIANT-Datenwerten für den Parameter. |
Parameters!<ParameterName>.Label |
Ein Array von Zeichenfolgen, die Bezeichnungen für den Parameter darstellen. |
Parameters!<ParameterName>.IsMultiValue |
Eine boolesche Eigenschaft, die angibt, ob für den Parameter die Option Mehrere Werte zulassen festgelegt ist. |
Parameters!<ParameterName>.Count |
Die Anzahl der Werte im Array. |
Parameters!<ParameterName>.Value(0) |
Der erste Wert in einem mehrwertigen Array. |
Parameters!<ParameterName>.Label(0) |
Die erste Bezeichnung in einem mehrwertigen Array. |
Parameters!<ParameterName>.Value(Parameters! <ParameterName>.Count-1) |
Der letzte Wert in einem mehrwertigen Array. |
Parameters!<ParameterName>.Label(Parameters! <ParameterName>.Count-1) |
Die letzte Bezeichnung in einem mehrwertigen Array. |
=Join(Parameters!<ParameterName>.Value,", ") |
Ein Ausdruck, der alle Werte im Array eines mehrwertigen Parameters vom Typ String zu einer Zeichenfolge verkettet. |
=Split("Value1, Value2, Value3",",") |
Nimmt eine Zeichenfolge und erstellt ein Array von Objekten, das zur Übergabe an einen Unterbericht oder Drillthroughbericht, der einen mehrwertigen Parameter erwartet, verwendet werden kann. |
Mithilfe der Funktionen SPLIT und JOIN können Sie in beliebigen Ausdrücken Werte in Arrays trennen oder kombinieren. Sie können die Funktionen STRING und CINT verwenden, um die Werte in Zeichenfolgen oder Werte für ganze Zahlen zu konvertieren.
Weitere Informationen und Beispiele ein- und mehrwertiger Parameter in Ausdrücken finden Sie unter Verwenden von Verweisen auf Parameters-Auflistungen in Ausdrücken (Berichts-Generator 2.0).
Siehe auch