Lektion 3: Hinzufügen von Parametern zur Auswahl mehrerer Werte in einer Liste (Berichts-Generator 2.0)
In dieser Lektion erfahren Sie, wie ein Parameter geändert wird, um mehrere Werte zu akzeptieren. Diese Parameter werden als mehrwertige Parameter bezeichnet. Standardmäßig akzeptiert ein Parameter einen einzelnen Wert. Die Parameter, die Sie in der vorherigen Lektion, BusinessPersonID und DayoftheWeek erstellt haben, haben einzelne Werte akzeptiert. Um einen Parameter so zu ändern, dass mehrere Werte akzeptiert werden, müssen Sie wissen, ob der Parameter automatisch aus einem Abfrageparameter erstellt wurde, wie BusinessPersonID, oder ob Sie ihn manuell im Berichtsdatenbereich erstellt haben, wie DayoftheWeek.
Um einen Parameter so zu ändern, dass mehrere Werte akzeptiert werden, müssen Sie einfach eine Berichtsparametereigenschaft festlegen. Wenn der Berichtsparameter auf einem Abfrageparameter basiert hat, müssen Sie auch die Abfrage ändern. Wenn der Parameter in einem Filter verwendet wird, müssen Sie den Filteroperator so ändern, dass eine Gruppe von Werten anstelle eines einzelnen Wertes angegeben wird.
So ersetzen Sie das vorhandene Dataset
Klicken Sie im Berichtsdatenbereich mit der rechten Maustaste auf das Dataset Dataset1, und klicken Sie dann auf Abfrage.
Der textbasierte Abfrage-Designer wird geöffnet.
Ersetzen Sie den Text durch Eingabe der folgenden Abfrage im Textfeld:
SELECT SH.OrderDate ,DATENAME(weekday, SH.OrderDate) as Weekday ,SH.SalesOrderNumber ,SD.OrderQty ,SD.LineTotal ,P.Name AS [Product] ,PS.Name AS [Subcategory] FROM Sales.SalesPerson SP INNER JOIN Sales.SalesOrderHeader AS SH ON SP.BusinessEntityID = SH.SalesPersonID INNER JOIN Sales.SalesOrderDetail AS SD ON SH.SalesOrderID = SD.SalesOrderID INNER JOIN Production.Product AS P ON SD.ProductID = P.ProductID INNER JOIN Production.ProductSubcategory AS PS ON PS.ProductSubcategoryID = P.ProductSubcategoryID INNER JOIN Production.ProductCategory AS PC ON PC.ProductCategoryID = PS.ProductCategoryID WHERE PC.Name = 'Clothing' AND (SH.OrderDate BETWEEN (@StartDate) AND (@EndDate)) AND SH.SalesPersonID IN (@BusinessPersonID)
Im Unterschied zur vorangehenden Abfrage wurde hier eine Bedingung von Gleichheit = in Enthaltensein INgeändert:
AND SH.SalesPersonID IN (@BusinessPersonID)
Klicken Sie auf die Schaltfläche Ausführen (!). Wenn Sie nach den Abfrageparametern gefragt werden, geben Sie die Werte mithilfe der folgenden Tabelle ein. Das Testen mehrwertiger Parameter wird im Abfrage-Designer nicht unterstützt.
@StartDate
20010101
@EndDate
20030101
@BusinessPersonID
290
Klicken Sie auf OK.
Das Resultset wird für den Vertriebsmitarbeiter Ranjit Varkey Chudukatil mit BusinessPersonID = 290 angezeigt.
So bearbeiten Sie den BusinessPersonID-Berichtsparameter zum Annehmen mehrerer Werte
Erweitern Sie im Bereich für die Berichtsdaten den Knoten Parameter, und doppelklicken Sie auf den Parameter BusinessPersonID.
Wählen Sie die Option Mehrere Werte zulassen aus.
Klicken Sie auf OK.
Klicken Sie auf Vorschau. Der Bericht wird automatisch ausgeführt. Die Namen aller Vertriebsmitarbeiter werden in einer Dropdownliste für BusinessPersonID aufgeführt.
Hinweis |
---|
Der Wert (Alles auswählen) wird als erster Wert in einer Dropdownliste der verfügbaren Werte für einen mehrwertigen Parameter angegeben. Mit diesem Kontrollkästchen können Sie alle Werte auswählen bzw. die Auswahl aller Werte aufheben. |
So fügen Sie ein neues Dataset zum Auffüllen der gültigen Werte für einen Berichtsparameter hinzu
Wechseln Sie zur Entwurfsansicht.
Klicken Sie auf der Symbolleiste des Berichtsdatenbereichs auf Neu und anschließend auf Dataset. Das Dialogfeld Dataseteigenschaften wird angezeigt.
Geben Sie in das Feld Name die Bezeichnung WeekDaysfromQuery ein.
Überprüfen Sie unter Abfragetyp, ob Text ausgewählt ist.
Klicken Sie auf Abfrage-Designer und dann auf Als Text bearbeiten.
Fügen Sie folgende Abfrage im Abfragebereich ein:
SET DATEFIRST 1; SELECT DISTINCT DATEPART(weekday, S.OrderDate) as WeekdayNumber, DATENAME(weekday, S.OrderDate) as Weekday FROM Sales.SalesOrderHeader S Order by WeekdayNumber
Klicken Sie auf der Symbolleiste des Abfrage-Designers auf die Schaltfläche Ausführen (!). Im Resultset werden Ordinalzahlen (Ordnungszahlen) und Wochentage angezeigt.
Klicken Sie zweimal auf OK, um das Dialogfeld Dataseteigenschaften zu schließen.
Das Dataset WeekDaysfromQuery wird im Bereich für die Berichtsdaten angezeigt.
So bearbeiten Sie einen Parameter für die Annahme von mehreren Werten, Standardwerten und gültigen Werten
Erweitern Sie im Bereich für die Berichtsdaten den Knoten Parameter, und doppelklicken Sie auf DayoftheWeek. Das Dialogfeld Berichtsparametereigenschaften wird geöffnet.
Wählen Sie Mehrere Werte zulassen aus.
Klicken Sie auf Verfügbare Werte.
Wählen Sie Werte aus Abfrage abrufen aus.
Wählen Sie unter Dataset den Eintrag WeekDaysfromQuery aus der Dropdownliste aus.
Wählen Sie unter Wertfeld den Eintrag WeekdayNumber aus der Dropdownliste aus.
Wählen Sie unter Bezeichnungsfeld den Eintrag Weekday aus der Dropdownliste aus.
Wenn der Benutzer Parameterwerte auswählt, wählt er unter den Bezeichnungen aus, der Bericht verwendet jedoch die Werte. Dies ist wichtig, wenn Sie Standardwerte oder einen Filter festlegen. Die Werte müssen die ganzzahligen Werte für das WeekdayNumber-Feld sein.
Klicken Sie auf Standardwerte.
Wählen Sie Werte angeben aus.
Klicken Sie auf Hinzufügen.
Ersetzen Sie in WertFriday durch 6. Weil die Werte aus einem Dataset stammen, das sowohl eine Wochentagszahl als auch einen Wochentagsnamen angibt, muss der Standardwert die Wochentagszahl angeben. Der Wert 6 stellt Saturday dar.
Klicken Sie auf Hinzufügen.
Geben Sie im Feld Wert den Wert 7 ein. Dieser Wert stellt Sunday dar.
Klicken Sie auf OK.
Bevor Sie eine Vorschau für den Bericht anzeigen können, müssen Sie den Filterausdruck für den Tabellendatenbereich so ändern, dass der IN-Operator verwendet wird, da der DayoftheWeek-Parameter mehrere Werte annehmen kann.
So ändern Sie einen Filter zur Verwendung mehrwertiger Parameter
Klicken Sie im Berichtsdatenbereich mit der rechten Maustaste auf Dataset1, und klicken Sie dann auf Dataseteigenschaften.
Klicken Sie auf Filter. In Lektion 1 wurde bereits ein Filter für DayoftheWeek hinzugefügt.
Vergewissern Sie sich, dass die Spalte Ausdruck (von der Dropdownliste) den Wert [Weekday] enthält.
Ändern Sie den Operator vom Gleichheitszeichen (=) in In.
Geben Sie im Feld Wert[@DayoftheWeek.Label] ein.
Geben Sie die Parameterbezeichnung ein, damit der Name des Wochentags mit dem Bezeichnungsfeld und nicht mit dem numerischen Feld für den Wochentag verglichen wird.
Klicken Sie auf OK.
Der Filter für die Tabelle ist nun so festgelegt, dass der Wert des Felds Weekday mithilfe des In-Operators mit dem Label des Parameters DayoftheWeek verglichen wird. Wenn Sie mehrere Werte für den Berichtsparameter auswählen, testet der Filter jede Zeile der Tabelle daraufhin, ob das Feld Weekday in der DayoftheWeek-Auflistung vorhanden ist.
Klicken Sie auf Ausführen, um den Bericht in der Vorschau anzuzeigen. Im Bericht wird der Berichtsparameter DaysoftheWeek mit den Standardwerten Saturday und Sunday angezeigt, den Bezeichnungen für die Standardwerte, die Sie angegeben haben. Verwenden Sie die Dropdownliste, um mehrere Werte für den DayoftheWeek-Parameter auszuwählen.
Nächste Schritte
Sie haben die Berichtsparametereigenschaften erfolgreich von einwertig in mehrwertig geändert. Sie haben die erforderlichen Änderungen in einer Abfrage, einem Filter und in einem Ausdruck vorgenommen, damit eine mehrwertige Parameterauflistung verwendet wird. Sie haben gelernt, mehrwertige Parameter in einem Ausdruck zu verwenden. In der nächsten Lektion lernen Sie, Parameter zu erstellen, deren Werte in Abhängigkeit vom ausgewählten Wert für einen früheren Parameter bedingt gefüllt werden. Siehe Lektion 4: Hinzufügen von kaskadierenden Parametern (Berichts-Generator 2.0).