2016-11-02 13 views
1

Ich möchte eine Abfrage schreiben und für eine Gruppierung in verschiedenen Spalten ermöglichen; Beispielsweise kann der Endbenutzer entweder nach Land, Region, Stadt oder nach keiner Gruppierung gruppieren.
Das Ergebnis soll in einem ssrs-Bericht verwendet werden.dynamische Abfragen in SSRS

so würde ich eine Abfrage wie folgt schreiben:

@value = CASE WHEN @dropdown=1 THEN ', foo.country' ELSE ', foo.region' 

@sqlquery = 'select name '[email protected]+' from foo group by field1'+ @value + ';' 

EXEC(@sqlquery); 

Dies funktioniert wie in Management Studio zu erwarten (wenn ich Variablen definieren und etwas zuweisen @dropdown);

Ich bin ein bisschen bei Verlust auf, wie dies in einem SSRS implementieren berichten: Ich mag, dass die Benutzer in der Lage sein, keine Gruppierung zu wählen (lassen Sie die @value leer)
Visual Studio nicht in der Lage zu ‚sehen "das Feld und ermöglicht es in einem Tablix hinzufügen

+0

Was wird angezeigt, wenn keine Gruppierung ausgewählt ist? alles Land, Region, Stadt? Was ist, wenn nur ein Land ausgewählt wurde? Können Sie eine Probe Ihrer benötigten Ausgabe teilen? – p2k

Antwort

1

Try this:
1. einen Parameter erstellen GroupBy
enter image description here

  1. Erstellen eines eigenen Datensatz. Schreiben Sie Ihre Abfrage nicht direkt in das Feld, sondern verwenden Sie stattdessen expression.
    enter image description here

  2. Schreiben Sie Ihre Abfrage wie folgt:
    enter image description here

Ich glaube, Sie wahrscheinlich Ihre Abfrage-Ausdruck für eine Weile, um versuchen müssen und anpassen, aber es sollte der Weg zu gehen sein. Viel Glück.

+0

Dies ist eine viel bessere Möglichkeit, dynamische Abfragen zu erstellen. Ich habe eine Menge Anpassungen vorgenommen, wobei ich ständig Details wie Leerzeichen vergessen habe. aber am Ende habe ich es viel einfacher als andere Wege funktioniert. Vielen Dank – Brtrnd

0

ich würde diese wickelt in einer gespeicherten Prozedur und dann, dass rufe aus dem Datensatz

create proc report_1 
@value varchar(200) 
as 
@sqlquery = 'select name '[email protected]+' from foo group by field1'+ @value + ';' 
EXEC(@sqlquery); 

müde werden von SQL-Injection, wenn dynamisches SQL verwenden, könnte es Es empfiehlt sich, eine definierte Werteliste für Ihren Dropdown-Parameter festzulegen, entweder statisch oder durch Abfragen der Informationen Chema für Spaltennamen.

+0

Ich habe keine Berechtigungen zum Erstellen gespeicherter Prozeduren. Mir ist nicht klar, wie ssrs die Namen der zurückgegebenen Felder kennen würden. – Brtrnd

2

Vermeiden Sie, dass Benutzer die Gruppierung eingeben (siehe @NeilP-Empfehlung). Erstellen Sie einfach einen Parameter mit der Bezeichnung Grouping, und geben Sie auf der Registerkarte Available Values die Dropdown-Auswahlwerte an.

enter image description here

Im Verfügbare Werte Registerkarte diese Einstellungen verwenden:

enter image description here

Dann im Dataset Eigenschaften zuordnen den SSRS-Parameter auf einen T-SQL-Parameter.

enter image description here

Jetzt können Sie @Grouping im Dataset verwenden:

set @value = CASE WHEN @Grouping = 1 THEN ', foo.country' 
        WHEN @Grouping = 2 THEN ', foo.region' 
        WHEN @Grouping = 3 THEN ', foo.city' 
        ELSE '' 
      END 

set @sqlquery = 'select name '[email protected]+' from foo group by field1'+ @value + ';' 

Der Benutzer kann prompt einen Wert in der Dropdown-Liste ausgewählt werden:

enter image description here

Sie können Definieren Sie einen Standardwert, der im Bericht verwendet wird, sodass Benutzer den Bericht ausführen können, ohne einen Wert anzugeben.

Gehen Sie zu Default Values Tab in Parameter Properties und fügen Sie =0 hinzu, wenn Sie möchten, dass Ihr Bericht standardmäßig ohne Gruppe ausgeführt wird.

Lassen Sie mich wissen, ob dies hilft.

Verwandte Themen