none
Multiple Value Parameter abfragen in SSRS

    Frage

  • Hallo an alle,

    ich möchte in einem Report eine Spalte entweder einblenden oder ausblenden. Um das zu erlangen habe ich die Sichtbarkeit der Spalte mit einer Formel belegt. Wenn der Parameter nicht mehrere Wert zulässt Funktioniert es auch bestens.

    
    IIF(Parameters!Sichtbarkeit.Value = 1, False, True)
    

    Bei Multiplen Werten nutze ich dies:

    IIF(Parameter!Sichtbarkeit.IsMultiValue = 1, False, True)

    Der Parameter kann den Wert 1 bis 7 enthalten. Wie frage ich ab ober der Parameter dem Wert 1 entspricht?

    Mittwoch, 16. Mai 2018 20:59

Antworten

  • Nun, vielleicht ist dein Ansatz mit Multivalue eher falsch.
    Wenn eine Spalte sichtbar oder nicht sichtbar sein soll, dann nimm gezielt einen Parameter je Spalte.
    Multivalues dienen doch eher dazu, im SQL nach einer Liste von möglichen Werten zu suchen, z.B. "where Jahr in (MultiValueParam)".

    https://www.mssqltips.com/sqlservertip/2866/sql-server-reporting-services-using-multivalue-parameters/

    Ansonsten hilft ggf. die Join-Anweisung um die Parameter zu verketten:
    https://social.msdn.microsoft.com/Forums/sqlserver/en-US/7034963d-7863-403e-9acd-64960af283a3/ssrs-join-parameter?forum=sqlreportingservices

    Und passend dazu dann die "Instr"-Anweisung zum Durchsuchen:

    "instr(join(Parameters!MyParam, ';'), '1;') > 0"

    Mittwoch, 23. Mai 2018 07:22

Alle Antworten

  • Hier findest du alles (leider in Englisch):

    https://docs.microsoft.com/en-us/previous-versions/sql/sql-server-2008/aa337292(v=sql.100)

    Mittwoch, 16. Mai 2018 22:38
  • @bfuerchau Danke für deine Hilfe. Ich habe zwar nun verstanden was ich falsch mache aber ich habe noch keine Lösung wie ich es richtig mache.

    Ich habe folgende Situation:

    Ich möchte die Sichtbarkeit einer Spalte steuern. Hierzu möchte ich einen Ausdruck schreiben der nichts anderes macht als den Parameter (Multiple Value also Array) auf einen Wert prüft und wenn der Wert in dem Array gesetzt ist dann soll die Spalte angezeigt werden.

    Jedoch habe ich keine Ahnung wie ich das mache. Meine Idee

    =IIf(Parameters!paraAbsatz.Value like "1", "False", "True")
    Ich müsste irgendwie das Array durchwandern und nach dem Wert suchen leider finde ich jedoch nicht den passenden Ausdruck.

    Dienstag, 22. Mai 2018 08:16
  • Wenn die Liste der Parameterwerte fest ist und sortiert, kannst Du über den Indexer den Array-Wert abfragen, z.B. den ersten Parameterwert

    =IIf(Parameters!paraAbsatz.Value(0) = "1", "False", "True")


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Dienstag, 22. Mai 2018 09:14
  • Mit der Abfrage selber kann man nicht wahlweise die Sichtbarkeit ein/ausschalten.
    Entweder, die Spalte wird ausgewählt oder eben nicht.

    Ansonsten muss man mit dynamischen Abfragen arbeiten, was aber wohl hier gar nicht geht (also den SQL zur Laufzeit zusammenbauen).

    Du musst das hier auf der Berichtsdefinition selber erledigen, nicht auf der Abfrage:

    https://docs.microsoft.com/de-de/sql/reporting-services/report-builder/hide-an-item-report-builder-and-ssrs?view=sql-server-2017

    Dienstag, 22. Mai 2018 10:19
  • @bfuerchau genau das mache ich ja auch. Nun ist aber das Problem das ich sowas bräuchte wie prüfe den ganzen Inhalt des Arrays und wenn darin eine 1 ist dann zeig die Spalte an.

    @Olaf deine Lösung hatte ich auch schon im Sinn. ich weiß nur nie ob an Stelle 0 oder an einer anderen Stelle der gesuchte Wert steht. Es müsste sowas geben wie durchsuche das ganze Array nach einem bestimmten Wert. ist dieser im Array vorhanden dann zeig die Spalte an, wenn nicht dann blende die Spalte aus.

    Geht sowas nicht ?

    Dienstag, 22. Mai 2018 19:30
  • Nun, vielleicht ist dein Ansatz mit Multivalue eher falsch.
    Wenn eine Spalte sichtbar oder nicht sichtbar sein soll, dann nimm gezielt einen Parameter je Spalte.
    Multivalues dienen doch eher dazu, im SQL nach einer Liste von möglichen Werten zu suchen, z.B. "where Jahr in (MultiValueParam)".

    https://www.mssqltips.com/sqlservertip/2866/sql-server-reporting-services-using-multivalue-parameters/

    Ansonsten hilft ggf. die Join-Anweisung um die Parameter zu verketten:
    https://social.msdn.microsoft.com/Forums/sqlserver/en-US/7034963d-7863-403e-9acd-64960af283a3/ssrs-join-parameter?forum=sqlreportingservices

    Und passend dazu dann die "Instr"-Anweisung zum Durchsuchen:

    "instr(join(Parameters!MyParam, ';'), '1;') > 0"

    Mittwoch, 23. Mai 2018 07:22
  • so richtig komme ich nicht weiter in dem Thema.

    Ich hätte hier noch einen anderen Lösungsansatz. SSRS müsste doch auch VB können. Ich kenne mich zwar nicht aus aber kann man nicht mit VB ein Array durchlaufen? Sprich VB müsste das Array durchlaufen und an jedem Speicherplatz des Arrays schauen ob der gewünschte Wert vorliegt. Wenn ja gibt der VB-Code den Wert 0 oder 1 zurück (false oder true) und damit könnte ich die Expression der Sichtbarkeit der Spalte steuern.

    Wäre das ein Ansatz? könnte hier jemand helfen? Ich habe noch nie VB in SSRS eingesetzt

    Donnerstag, 24. Mai 2018 16:42
  • Nachzulesen hier:

    https://docs.microsoft.com/de-de/sql/reporting-services/report-design/add-code-to-a-report-ssrs?view=sql-server-2017

    Klappt das denn mit dem "Instr(Join())" nicht?

    Freitag, 25. Mai 2018 07:35
  • Hallo @bfuerchau habe ich total überlesen! sorry!

    ja das funktioniert! "instr(join(Parameters!MyParam, ';'), '1;') > 0"

    jedoch blendet ssrs nun genau die Spalte jetzt aus wenn der Parameter gesetzt ist. Wie kann ich das denn noch ändern? ich verstehe leider dieses >0 hinten dran nicht. der Rest ist mir klar

    Kurze Erklärung so wie ich es verstanden habe. join füge ich alle im Parameter (Array) hinterlegten Werte als String mit der Zeichtrennung ; zusammen. Mit der Anweisung instr durchsuche ich den Ausdruck nach der Zeichenfolge '1;' aber was soll mir diese > 0 sagen?

    Freitag, 25. Mai 2018 10:24
  • Instr liefert die Position der Suchfolge. Wenn gefunden, ist diese eben > 0, wenn nicht gefunden dann = 0;

    Aber das Ausblenden der Spalte war doch gewünscht?

    Wenn du allerdings mehrere Spalten als Parameter im Array hast, also

    "S1" "1" "S2" "1" ...

    dann suche einfach "S1;1;" für die gezielte Benennung einer Spalte.

    Freitag, 25. Mai 2018 12:02
  • @bfuerchau: danke noch mal für die Hilfe! Wenn mal einmal "Instr(Join())" richtig verstanden hat funktioniert dieser Ansatz sehr gut!
    Donnerstag, 14. Juni 2018 09:40