SQL server 2008 SSRS einen Bericht mehrere datasätze

Hallo, ich bin neu bei SSRS und ich habe einen Bericht, der zwischen 3 verschiedenen Abfragen wechseln muss, je nachdem, was der Benutzer sehen will zB Verbrauchsmaterialien, Service oder Total (beide kombiniert) Was ist der beste path, dies zu tun? Bitte helfen! Abfragen unten:

--Consumables SELECT COUNT(OrderId) AS [Consumable_Order_Amount], CONVERT(DATE, DateCreated) AS [Date], CASE WHEN orderheader.webref = '' THEN 'Call Centre' ELSE 'Web' END AS [Consumable_Order_Type] FROM OrderHeader WHERE ( CONVERT(DATE, DateCreated) BETWEEN @StartDate AND @EndDate ) GROUP BY CONVERT(DATE, DateCreated), CASE WHEN orderheader.webref = '' THEN 'Call Centre' ELSE 'Web' END --Service SELECT COUNT(serviceId) AS [Service_Order_Amount], CONVERT(DATE, DateCreated) AS [Date], CASE WHEN serviceorder.webref = '' THEN 'Call Centre' ELSE 'Web' END AS [Service_Order_Type] FROM ServiceOrder WHERE ( CONVERT(DATE, DateCreated) BETWEEN @StartDate AND @EndDate ) GROUP BY CONVERT(DATE, DateCreated), CASE WHEN serviceorder.webref = '' THEN 'Call Centre' ELSE 'Web' END --Total ; WITH [Total_Order_Amount] AS (SELECT orderid AS [ID], datecreated AS [Date], webref AS [WebRef] FROM orderheader UNION SELECT serviceid AS [ID], datecreated AS [Date], webref AS [WebRef] FROM serviceorder) SELECT COUNT(id) AS [Service_Order_Amount], CONVERT(DATE, date) AS [Date], CASE WHEN webref = '' THEN 'Call Centre' ELSE 'Web' END AS [Service_Order_Type] FROM [Total_Order_Amount] WHERE ( CONVERT(DATE, date) BETWEEN @StartDate AND @EndDate ) GROUP BY CONVERT(DATE, date), CASE WHEN webref = '' THEN 'Call Centre' ELSE 'Web' END 

Sie wollen nicht wirklich 3 Gitter haben, wie Sie diese separat pflegen müssen, sollte eine neue Spalte hinzugefügt werden. Allerdings, wenn Sie sicher sind, dass die Abfragen immer identische Spalten haben, können Sie einfach einen gespeicherten Proc verwenden, der entscheidet, welche Abfrage ausgeführt werden soll. Ok, es gibt getrennte Fragen hier hinsichtlich der performance und der Ausführungspläne für solch ein Proc (wir können später noch gehen).

Warum nicht einen Parameter für den Bericht mit einer list von vordefinierten Optionen erstellen, die jeder Abfrage zugeordnet sind. Dieser Parameter kann dann der gespeicherten Prozedur zugeführt werden und er kann bestimmen, welche Unterabfrage zurückgegeben werden soll.

Zum Beispiel: Erstellen Sie einen Berichtsparameter namens QueryOption mit einem datatyp von Integer ,
Zusätzliche Werte von Consumables , Service und Total mit Werten von 1,2 & 3 hinzufügen. Legen Sie den Standardwert auf 1, 2 oder 3 fest, wenn Sie automatisch eine Option für den Benutzer auswählen möchten.

Ändern Sie die gespeicherte Prozedur, um den Parameter QueryOption zu verwenden, um QueryOption , welche QueryOption zurückgegeben werden soll.

 IF @QueryOption = 1 BEGIN SELECT 'Consumables' -- Add consumables query here END IF @QueryOption = 2 BEGIN SELECT 'Service' -- Add Service query here END IF @QueryOption = 3 BEGIN SELECT 'Total' -- Add Total query here END 

QueryOption Sie auf den DataSet-properties für die gespeicherte Prozedur, dass Sie die Felder QueryOption , damit der QueryOption Parameter automatisch hinzugefügt wird.
Solange der Name des Parameters für das sp den Reportparameternamen übereinstimmt, wird der Parameterwert in die gespeicherte Prozedur eingegeben.

Ich fand die einfachste / sauberste Lösung, passiere Parameter in eine Auswahlabfrage je nach Art des Berichts, kombiniert mit einer case-statement in einer where-Klausel, um die verschiedenen Berichtstypen im memory herauszufiltern. Ich werde dies als die Antwort markieren, es sei denn, es gibt irgendwelche Einwände! Danke für Ihre Hilfe.

 WITH [Total_Order_Amount] AS (SELECT orderid AS [ID], datecreated AS [Date], webref AS [WebRef], 'Consumable'AS [ReportType] FROM orderheader UNION SELECT serviceid AS [ID], datecreated AS [Date], webref AS [WebRef], 'Service' AS [ReportType] FROM serviceorder) SELECT COUNT(id) AS [Order_Amount], CONVERT(DATE, DATE) AS [Date], CASE WHEN webref = '' THEN 'Call Centre' ELSE 'Web' END AS [Order_Type] FROM [Total_Order_Amount] WHERE ( CONVERT(DATE, DATE) BETWEEN @StartDate AND @EndDate ) AND [ReportType] = CASE @ReportType WHEN 1 THEN 'Consumable' WHEN 2 THEN 'Service' ELSE [ReportType] END GROUP BY CONVERT(DATE, DATE), CASE WHEN webref = '' THEN 'Call Centre' ELSE 'Web' END