Reporting Services – Abhängige Parameter

Diesen Blog-Artikel starte ich mit einer Frage: wer hat sich schon einmal über die Parameter-Auswahl beim SQL Reporting Services Point geärgert? Ich gehöre auf jeden Fall dazu. Doch warum?

Folgendes Beispiel verdeutlicht dies:

 

An sich keine schlechte Sache. Man hat zwei wundervolle drop-down Menüs, aus denen man die gewünschten Parameter auswählen kann. Allerdings gibt es hierbei meiner Meinung nach einen Haken. Beide Parameter (AdvertisementID und ComputerName) hängen direkt zusammen. Es besteht also die Möglichkeit, eine Auswahl zu treffen, die kein Ergebnis liefern kann, weil die Kombination so nicht existent ist. Wenn z.B. der virtuelle Firefox nur auf Windows7-Rechner angekündigt ist, dann resultiert die Auswahl eines XP-Rechners unweigerlich in einem Ergebnis ohne Treffer.
Gleiches gilt zum Beispiel für einen Report, der (1) Softwarehersteller und (2) Softwareprodukt als Parameter hat. Wähle ich für (1) Microsoft, dann will ich bei (2) nur noch Produkte zur Auswahl bekommen, die von Microsoft sind („SQL“, „ConfigMgr“, „Server 2008“, „Windows 7“, „Exchange“, „Word“, „Visio“ usw.). Produkte wie „Adobe Reader“, „7zip“, „Firefox“, „SAPGUI“ sollen gar nicht angezeigt werden. Eine Abfrage, die alle Rechner zeigen soll, auf denen „7zip“ vom Hersteller „Adobe“ installiert ist, kann keine Ergebnisse liefern.

Glücklicherweise lässt sich dies umsetzen! Allerdings muss man dazu die vertraute Welt der ConfigMgr Konsole verlassen und den SQL Report Builder verwenden.

Zuerst wird eine neue Datasource angelegt:

Zu Demo-Zwecken ist das bereits vorhandene default Report Model gut geeignet:

 

Anschliessend erzeugt man ein neues Dataset:

 

Folgendes SQL-Statement wurde dazu verwendet:

SELECT    
v_R_System.Name0,
v_GS_ADD_REMOVE_PROGRAMS.Publisher0,
v_GS_ADD_REMOVE_PROGRAMS.DisplayName0
FROM        
v_R_System
INNER JOIN
v_GS_ADD_REMOVE_PROGRAMS
ON
v_R_System.ResourceID = v_GS_ADD_REMOVE_PROGRAMS.ResourceID
WHERE    
(v_GS_ADD_REMOVE_PROGRAMS.DisplayName0 LIKE ‚%‘ + @Disp + ‚%‘
and
Publisher0 like ‚%‘ + @Pub + ‚%‘)

Das Ergebnis sollte dann in etwa so aussehen:

 

Nach Schließen des „Dataset Properties“-Fenster sollten dann praktischerweise schon die in der SQL Query verwendeten Parameter (Variablen) auftauchen:
  

 

Anschließend werden 2 weitere Datasets erstellt: eines für die Abfrage aller vorhandenen Publisher und ein weiteres für die vorhandenen DisplayNames.

SELECT
distinct
v_GS_ADD_REMOVE_PROGRAMS.Publisher0
FROM
v_GS_ADD_REMOVE_PROGRAMS
where Publisher0 is not NULL

DataSet_Publisher:

 

SELECT
distinct
v_GS_ADD_REMOVE_PROGRAMS.DisplayName0
FROM
v_GS_ADD_REMOVE_PROGRAMS
where Publisher0 like @Pub

DataSet_DisplayName:

 

Als Ergebnis erhält man also 2 weitere Datasets, die in den Report-Parametern verwendet werden können

 

 

Jetzt können die Parameter bearbeitet werden. Zuerst wird mit dem für die vorhandenen Publisher begonnen:

 

Unter „Available Values“ wird der Wert „Get values from a query“ und das vorhin angelegte Dataset (DataSet_Publisher) gewählt.

Gleiches wird analog für den Parameter „Disp“ durchgeführt:

 

Abschließend noch eine Ergebnistabelle hinzufügen:

 

Und schon kann der Report in der Vorschau betrachtet werden:

 

 

Wie man sieht, wird bei der Auswahl von „Igor Pavlov“ nur das Produkt „7-zip 4.65“ angezeigt. Bei der Auswahl von „Microsoft Corporation“ erhält man eine Auflistung der MS-Produkte, die in der Datenbank gefunden worden sind.

Die selbe Funktionalität ist natürlich auch vorhanden, wenn die Reports nach dem Publishen vom Reportserver aufgerufen werden:

 

Und jetzt viel Spaß und Erfolg beim Ausprobieren!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.