2009-05-21 6 views
2

J'ai un rapport qui doit afficher des données de comptabilité à partir de différents emplacements ou de tous les emplacements.Paramètres de requête SSRS 2008

Table_sales:

PartId Rev  LocId 
1   $10  1 
2   $2  1 
3   $5  2 

permet de dire que la requête est quelque chose de fondamental comme celui-ci pour obtenir toutes les recettes:

SELECT SUM(rev) FROM Table_sales 

Si je veux être en mesure de limiter le rapport à un emplacement particulier, je voudrais dois le changer à:

SELECT SUM(Rev) FROM Table_sales WHERE LocId = @param 

Mais si je faisais cela, comment pourrais-je obtenir tous les emplacements sans avoir plusieurs requêtes? FYI L'option de filtre SQL 2008 ne semble pas fonctionner sur la requête que j'utilise, puisque la requête actuelle utilise le groupe par fonctions. De même, les requêtes DataSet SSRS 2008 peuvent être des expressions, mais je n'arrive pas à le faire fonctionner.

+0

Vous voulez « limiter le rapport à un endroit particulier », mais vous voulez aussi obtenir « obtenir tous les endroits ». Pouvez-vous clarifier le conflit apparent d'intention? – Andomar

Répondre

3

Je ne suis pas sûr au sujet des options de filtrage ou des requêtes dataset que vous avez mentionnés dans SSRS 2008, mais dans certaines des anciennes versions de SSRS, j'ai vu des trucs comme ça:

SELECT SUM(Rev) FROM Table_sales WHERE LocId = @param or 'All' = @param 

Je suis douteuse que c'est la manière la plus efficace de le faire, mais elle vous permet d'avoir une requête où vous pouvez sélectionner tous les résultats (en passant le terme 'All' comme paramètre) ou juste le LocId que vous voulez (en passant le LocId approprié comme paramètre).

+5

C'est ce que nous faisons habituellement pour les cas comme celui-ci. Vous pouvez également faire quelque chose comme WHERE LocId = COALESCE (@param, LocId) et passer null comme paramètre pour 'tous' cas ... mais je doute que ce soit notablement plus rapide/plus efficace. –

+0

Une idée intéressante sur COALESCE - qui ne m'était pas venue auparavant. –

+0

Merci, les deux méthodes fonctionnent et sont de bonnes idées. – MaxGeek

0

Peut-être que vous pouvez l'utiliser:

SELECT SUM(Rev) FROM Table_sales WHERE LocId IN (@param) 
+0

Est-ce que cela gère le cas où je veux les obtenir tous? Comme si je passerais un paramètre nul ou une chaîne spécifique comme 'All' ou quelque chose. – MaxGeek

Questions connexes