In Berichten ist es eine gute Angewohnheit, die durch den Benutzer ausgewählten Parameter im Bericht anzuzeigen.
Bei Parametern, die dem Benutzer nur einen Wert einzugeben, ist das einfach, da dieser Ausdruck im Ausdruck-Editor einfach zusammengeklickt werden kann, zu z.B.
=“Eingegebene Zahl: “ & Parameters!EinfacherParam.Value
(Zum Vergrößern aufs Bild klicken)
Wenn es sich aber um einen Multi-Value Parameter (wie in meinem Beispiel der Parameter „Wochentag“) handelt, dann erzeugt der Ausdruck-Editor … Parameters!Wochentag.Value(0), was den Value (das ist der Schlüssel) ersten ausgewählten Wochentag ausgibt.
Da mir aber etwas wie „Sie haben folgende Wochentage ausgewähtl: Montag, Dienstag, …“ vorschwebt, müssen wir zunächst den Label anzeigen lassen und nicht den Schlüssel. Das geht über Parameters!Wochentag.Label(0).
Nun wollen wir aber alle ausgewählten Parameterwerte sehen und nicht nur den ersten. Da es sich bei Parameters!Wochentag.Label offensichtlich um ein Array handelt (Array startet mit Position 0), kann man über die Join-Funktion die einzelnen Werte konkatenieren.
Dazu kann man folgenden Code im Ausdruck-Fenster eingeben:
=“Alle (via Ausdruck): “ &
Join(Parameters!Wochentag.Label, „, „)
Damit endet die Möglichkeit im Ausdruck-Fenster.
Will man weitere Funktionalität einbauen, wie z.B. die Liste 1-Montag, 2-Dienstag, …, so kann man das dadurch erreichen, dass man im Code-Fenster auf die Parameter und ihre Werte zugreifen kann:
(Zum Vergößern Bild anklicken)
Das Code-Fenster erreicht man über Bericht > Berichsteigenschaften > Code.
Dort habe ich folgenden Code eingefügt:
function ParameterwerteVerkettet(ParamName as string)
dim i as integer
dim erg as stringfor i = 1 to Report.Parameters(ParamName).Count
erg = erg & Report.Parameters(ParamName).Value(i-1) & „: „
erg = erg & Report.Parameters(ParamName).Label(i-1)
if i<> Report.Parameters(ParamName).Count Then erg = erg & „; „
next iParameterwerteVerkettet=erg
end function
Wie man sieht, kann man einfach in dem VB-Code auf die Parameter-Arrays Value und Label zugreifen.
Diese Funktion ruft man dann im Ausdruck wie folgt auf:
Mein fertiger Bericht sieht dann wie folgt aus:
Das RDL kann man hier runterladen: www.csopro.de/blogdateien/ParamsAnzeigen.rdl
Noch einige weiterführende Hinweise:
-
Leider kann man auf die Datasets eines Reports nicht im Code zugreifen (zumindest ist mir keine Lösung bekannt). Manche Aufgaben, bei denen man das bräuchte, kann man aber evtl. mit Parametern und Code – ähnlich zu dem hier dargestellten – lösen, s. dazu den netten Blog-Eintrag Brian Welcker’s Weblog: Report localization through Parameters
-
Die Labels der Parameter stehen auch zur Verfügung, wenn man nicht über die Oberfläche die Parameter eingibt, sondern beispielsweise über das ReportViewer Control oder einen Deep Link (unter Angabe der Parameter-Keys) den Bericht rendert. Ein Beispiel ist der Link http://localhost/ReportServer/Pages/ReportViewer.aspx?/Blog/ParamsAnzeigen&rs:Command=Render&rs:Format=HTML4.0&rc:Parameters=collapsed&Wochentag=1&Wochentag=3&EinfacherParam=9
Näheres zum URL Access für SSRS siehe http://msdn.microsoft.com/en-us/library/ms153586%28v=SQL.100%29.aspx