none
Parameter mit schachtelten Mehrfachabfragen

    Frage

  • Hallo zusammen,

    SSRS 2014

    ich habe ein Problem mit einem Report.
    In dem Report sind mehrere Parameter die aufeinander aufbauen. Einer dieser Parameter, der letzte in der Kette, lässt Mehrfachauswahl zu.
    Alle anderen hatten bisher nur einen Standardwert.
    Nun möchte das Business, dass auch der vorletzte Parameter in der Kette eine Mehrfachauswahl zulässt.
    Sobald ich das aber so einrichte bekomme ich einen Fehler beim Aufruf des Reports:

    Fehler bei der Berichtsverarbeitung. (rsProcessingAborted)Fehler beim Ausführen der Abfrage für das Data_Pillar-Dataset. (rsErrorExecutingCommand)
    Incorrect syntax near ','.

    Die Datasets sehen wie folgt aus

    SELECT DISTINCT
    AsAtDate, BusinessGroup, BusinessUnit
    FROM recent.codePILLARCODE
    WHERE BusinessGroup = @BusinessGroup
    and BusinessUnit like 'LTM%'
    SELECT DISTINCT AsAtDate, PillarCode, BusinessUnit
            FROM recent.codePILLARCODE
    WHERE BusinessUnit = @BusinessUnit
    ORDER BY PillarCode ASC

    @Businessgroup ist ein einzelner Wert, @BusinessUnit soll mehrere enthalten.

    Was mache ich falsch?
    Sobald @BusinessUnit nur einen Wert enthält läuft der Report.

    Ich hoffe, ich habe alles relevante berichtet.

    Schon mal Danke und Gruß
    Christa

    Donnerstag, 1. März 2018 14:41

Antworten

  • Hallo Christa,

    lange nichts mehr von Dir gehört; obwohl ich täglich hier über Deinen Namen stolpere ;-)

    Wenn man einen Parameter mit Mehrfachauswahl hat, übergibt SSRS den in der generierten Abfrage bereits als richtig formatierte, kommaseparierte Liste und Du kannst darauf den IN Operator anwenden; das funktioniert ja auch, wenn nur ein Wert ausgewählt wird =>

    SELECT DISTINCT AsAtDate, PillarCode, BusinessUnit
            FROM recent.codePILLARCODE
    WHERE BusinessUnit IN (@BusinessUnit)
    ORDER BY PillarCode ASC


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Donnerstag, 1. März 2018 14:59
  • Hallo Christa,

    der Workaround der mir eingefallen ist, ist ein unsichtbarer Parameter mit Default INTERACTIVE.

    Das Abo setzt dann einen anderen Wert und die Datasets berücksichtigen diesen neuen Parameter.

    Kannst Du ja mal ausprobieren!


    Einen schönen Tag noch, Christoph -- Data Platform MVP - http://www.insidesql.org/blogs/cmu

    Montag, 5. März 2018 06:18

Alle Antworten

  • Dies liegt an der SQL-Syntax, dass du ein Feld nur mit einem Wert vergleichen kannst.
    Benötigst du mehrere Werte musst du mehrere Parameter verwenden:

    WHERE BusinessUnit = @BusinessUnit1 or BusinessUnit = @BusinessUnit2 or BusinessUnit = @BusinessUnit3

    oder

    WHERE BusinessUnit in (@BusinessUnit1, @BusinessUnit1, @BusinessUnit3)

    Allerdings bist du in diesem Fall gezwungen, immer alle Parameter zu übergeben.
    Alternativ geht es dann ggf. nur über eine Prozedur, die das SQL dynamisch zusammenbaut und ausführt.

    Donnerstag, 1. März 2018 14:51
  • Hallo Christa,

    lange nichts mehr von Dir gehört; obwohl ich täglich hier über Deinen Namen stolpere ;-)

    Wenn man einen Parameter mit Mehrfachauswahl hat, übergibt SSRS den in der generierten Abfrage bereits als richtig formatierte, kommaseparierte Liste und Du kannst darauf den IN Operator anwenden; das funktioniert ja auch, wenn nur ein Wert ausgewählt wird =>

    SELECT DISTINCT AsAtDate, PillarCode, BusinessUnit
            FROM recent.codePILLARCODE
    WHERE BusinessUnit IN (@BusinessUnit)
    ORDER BY PillarCode ASC


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Donnerstag, 1. März 2018 14:59
  • Hallo Olaf,

    besten Dank für das Entfernen der Tomaten von meinen Augen.
    SSRS verursacht bei mir immer nur Panik, dann sehe ich nix mehr. Natürlich mußte es IN sein nicht =

    Gruß
    Christa

    Donnerstag, 1. März 2018 15:13
  • Hallo zusammen,

    ich habe doch noch eine Nachfrage.
    Das Business möchte, dass die BusinessUnit nur dann auf 'LTM%' gefiltert wird, wenn der Report automatisch versendet wird.
    Beim interaktiven Aufruf sollen alle BusinessUnits auswählbar sein.
    Die Frage für mich ist, wie erkenne ich im Report, ob der interaktiv aufgerufen oder automatisch versendet wird.
    Kann ich dazu Globals!RenderFormat.IsInteractive verwenden? Natürlich soll der Report dann, wenn er aus dem interaktiven Aufruf heraus als Excel etc. gespeichert wird, das ausgeben, was ausgewählt wurde und nicht die eingeschränkte Auswahl aus dem automatischen Versand.

    Habt ihr dazu auch eine Idee?

    Danke und Gruß
    Christa

    Freitag, 2. März 2018 08:07
  • Hallo Christa,

    Du könntest bei der Tablix für das Dataset einen Filter angegeben. Der könnte dann auch entsprechend die von Dir genannte globale Variable verwenden.

    Diese kannst Du aber nicht schon im Dataset verwenden, da sie erst beim Rendering verfügbar ist. Also wirklich erst mal alles holen und dann filtern!

    HTH!


    Einen schönen Tag noch, Christoph -- Data Platform MVP - http://www.insidesql.org/blogs/cmu

    Freitag, 2. März 2018 11:44
  • Hallo Christoph,

    Das Dataset ist nur für den Parameter zuständig, das hat kein Tablix.
    Ich müßte quasi zur Ausführungszeit unterscheiden, ob der Report im Browser aufgerufen wird oder per Datadirven Subscription verschickt wird.

    Wenn's nicht geht mit das Business damit leben.

    Gruß
    Christa

    Freitag, 2. März 2018 13:26
  • Hallo Christa,

    der Workaround der mir eingefallen ist, ist ein unsichtbarer Parameter mit Default INTERACTIVE.

    Das Abo setzt dann einen anderen Wert und die Datasets berücksichtigen diesen neuen Parameter.

    Kannst Du ja mal ausprobieren!


    Einen schönen Tag noch, Christoph -- Data Platform MVP - http://www.insidesql.org/blogs/cmu

    Montag, 5. März 2018 06:18
  • Hallo Christoph,

    ich komme leider nicht weiter.
    Ich habe einen unsichtbaren Parameter erstellt: SubscriptionName, Defaultwert = ""
    Ich habe einen weiteren unsichtbaren Parameter erstellt: Filter_BusinessUnit, DefaultWert ist "'%'", AvailableValue ist die Rückgabe des folgenden Datasets
    Ich habe ein Dataset erstellt: Default_BusinessUnit, Expression ist

    =IIF(Parameters!SubscriptionName.Value="",
    "SELECT '%' as Value",
    "SELECT 'LTM%' as Value")

    Die Expression des Datasets BusinessUnit siet folgendermaßen aus:

    ="SELECT DISTINCT AsAtDate, BusinessGroup, BusinessUnit FROM recent.codePILLARCODE WHERE BusinessGroup = @BusinessGroup and BusinessUnit like '" + Parameters!Filter_BusinessUnit.Value + "'"
    Der Report läßt sich erstellen und hochladen, der der Ausführung erhalte ich leider den Fehler:

    "Der Befehlstext für das Data_BusinessUnit-Dataset kann nicht festgelegt werden. (rsErrorSettingCommandText) Onlinehilfe
     Fehler beim Verarbeiten des CommandText-Ausdrucks des Data_BusinessUnit-Datasets. (rsQueryCommandTextProcessingError) Onlinehilfe "

    Im Reportserver hat der Parameter die Einstellung: Besitzt Standardwert und Anfragebasiert

    Ich weiß nicht, wo der Fehler liegt.

    Danke und Gruß
    Christa

    Donnerstag, 8. März 2018 08:59
  • so, hab's gefunden.

    Die Reihenfolge der Parameter muß stimmen. Der Parameter SubscriptionName stand ganz unten.
    Nachdem ich den jetzt hochgeschoben habe bekomme ich den Fehler nicht mehr

    Ein Blogeintrag von Tom Green hat mich auf die richtige Spur gebracht

    Danke an alle

    Christa

    Freitag, 9. März 2018 13:34
  • Super!

    Dann kannst Du ja noch meinen Eintrag als Antwort markieren!

    Falls Du Lust hast könntest Du ja mal Deine Erkenntnisse in einen Artikel verpacken und entweder im Newsletter oder in meinem blog veröffentlichen! ;-)


    Einen schönen Tag noch, Christoph -- Data Platform MVP - http://www.insidesql.org/blogs/cmu

    Montag, 12. März 2018 10:07