Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SSRS-Parameterfilter mit mehreren Werten basierend auf dem Datensatz

Ich habe mich entschieden, meinen Kommentar zu Ihrer Antwort, M.Ali, als Antwort auf meine eigene Frage zu schreiben, da ich einen Weg gefunden habe, dies zu lösen. Vielleicht habe ich mein Problem nicht genau genug beschrieben. Ich bin mir bewusst, wie das obige funktioniert und wie Parameter basierend auf einem Dataset durch die SQL übergeben werden, um ein anderes Dataset zu erstellen, wobei mehrere Werte zulässig sind oder nicht. Ich schätze Ihre Antwort trotzdem!

Das Problem, das ich habe, ist, dass die Abfrage, die meine Werteliste für den Parameter definieren würde, und die Abfrage für das eigentliche Dataset identisch sind. Und es ist eine RIESIGE Abfrage. Mit anderen Worten, wo im Codebeispiel „TABLE“ steht, habe ich mehrere hundert Codezeilen. Und mein Ziel war es, dass diese ganze Abfrage nicht beide Datensätze definiert. Wenn ich in Zukunft die Abfrage ändern muss, muss ich dies an mehr als einer Stelle tun. So habe ich es gelöst:

Ich habe die Hauptabfrage in einem freigegebenen Dataset platziert, anstatt sie in meinen Bericht einzubetten. Und dann habe ich meiner Abfrage eine row_number-Funktion wie folgt hinzugefügt:

SELECT ID, Value, UserID, rn = ROW_NUMBER() OVER(PARTITION BY UserID ORDER BY UserID)
FROM *my huge query*

Das bedeutet, dass es nur eine 'rn =1'-Zeile pro Benutzer-ID gibt. Dann ging ich zurück zu meinem Bericht. Mein ursprüngliches DataSet1 würde dann nur auf das freigegebene Dataset zeigen. Das DataSet2 (der Parameter eins) würde auch auf das gemeinsam genutzte Dataset zeigen, mit dem einzigen Unterschied, dass ich diesem Dataset einen Filter mit der Aufschrift „rn =1“ hinzugefügt habe. Ich habe dann einen Parameter mit "Mehrere Werte zulassen" erstellt, der seine Werte aus DataSet2 übernommen hat. Und es funktioniert wie ein Zauber. Auf diese Weise kann ich einfach zum freigegebenen Dataset gehen, wenn ich die Abfrage aktualisieren muss, und sowohl DataSet1 als auch DataSet2 werden entsprechend aktualisiert!

Erfolg :)

Nochmals vielen Dank für Ihre Antwort!