SQL Server 2008 SSRS un rapport plusieurs sets de données

Bonjour je suis nouveau à SSRS et j'ai un rapport qui doit basculer entre 3 requêtes différentes en fonction de ce que l'user veut voir, c'est-à-dire Consommables, Service ou Total (les deux combinés) Quelle est la meilleure façon de faire? S'il vous plaît aider! Requêtes ci-dessous:

--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 

Vous ne voulez pas vraiment avoir 3 grids comme vous auriez besoin de les maintenir séparément, vous devriez append une nouvelle colonne. Cependant, si vous êtes sûr que les requêtes auront toujours des colonnes identiques, vous pouvez simplement utiliser un proc stocké qui décide de la requête à exécuter. Ok il y a des problèmes séparés ici concernant la performance et les plans d'exécution pour un tel proc (nous pourrons y revenir plus tard).

Pourquoi ne pas créer un paramètre pour le rapport avec une list d'options prédéfinies qui correspondent à chaque requête. Ce paramètre peut ensuite être transmis à la procédure stockée et déterminer la sous-requête à renvoyer.

Par exemple: créez un paramètre de rapport appelé QueryOption avec un type de données Integer ,
Ajoutez les valeurs disponibles des Consumables , du Service et du Total avec les valeurs de 1,2 et 3. Définissez la valeur par défaut sur 1, 2 ou 3 si vous souhaitez sélectionner automatiquement une option pour l'user.

Modifiez la procédure stockée pour utiliser le paramètre QueryOption pour déterminer la sous-requête à renvoyer.

 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 

Dans les propriétés DataSet de la procédure stockée, assurez-vous d'actualiser les champs afin que le paramètre QueryOption soit automatiquement ajouté.
Tant que le nom du paramètre pour le sp correspond au nom du paramètre de rapport, la valeur du paramètre sera introduite dans la procédure stockée.

J'ai trouvé la solution la plus simple / la plus propre, passer des parameters dans une requête select en fonction du type de rapport, combiné avec une instruction case dans une clause where pour filterr les différents types de rapports en memory. Je marquerai ceci comme la réponse à less qu'il n'y ait des objections! Merci de votre aide.

 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