[SSRS] Un paramètre pour rechercher… en SQL

Une petite variante sur le même mode de ma recherche dans une dimension en MDX qui commence à dater: la version SQL.
Deux choses à créer
– Un paramètre multivalué (le champ de recherche)
– Un DataSet SQL (le résultat)

On commence par créer un joli DataSet sur une source SQL qui a la structure de ce que l’on veut renvoyer. Pour moi ce sera ça:
SELECT FrenchProductName
FROM AdventureWorksDW2008..DimCustomer
On le valide pour avoir les métadonnées. Maintenant on va créer une expression en lieu et place de cette requête, en cliquant sur le bouton ad-hoc:

L’expression a pour but de générer une requête like %% pour chaque mot recherché, le tout unionné et ordonné par nombre de matches (bon je vous l’accorde ça n’est pas PageRank).

SELECT FrenchProductName
FROM
(
SELECT ProductKey, FrenchProductName
FROM AdventureWorksDW2008..DimProduct
WHERE FrenchProductName LIKE ‘%vélo%’
UNION ALL
SELECT ProductKey,FrenchProductName
FROM AdventureWorksDW2008..DimProduct
WHERE FrenchProductName LIKE ‘%randonnée%’
)
AS T
GROUP BY ProductKey, FrenchProductName
ORDER BY COUNT(*) DESC, FrenchProductName ASC
Pour générer cela on va donc créer une expression qui est d’abord constituée du début et de la fin de la requête.
=
« SELECT FrenchProductName, COUNT(*) Rank « +
« FROM « +
« (« +
« ) »+
« AS T « +
« GROUP BY ProductKey, FrenchProductName « +
« ORDER BY COUNT(*) DESC, FrenchProductName ASC »
Entre chaque élément contenu dans le paramètre Recherche, on va intercaler du SQL suffisant à générer l’ensemble de requête UNION visibles au dessus.
Join
(
Parameters!Recherche.Value,
« %’ « +
« UNION ALL « +
« SELECT ProductKey,FrenchProductName « +
« FROM AdventureWorksDW2008..DimProduct « +
« WHERE FrenchProductName LIKE ‘% »
)
Ne reste plus qu’à rajouter le code SQL suffisant à traiter le premier et le dernier élément de la liste et on a le résultat final:

="SELECT FrenchProductName, COUNT(*) Rank "+
"FROM "+
"("+
"SELECT ProductKey, FrenchProductName "+
"FROM AdventureWorksDW2008..DimProduct "+
"WHERE FrenchProductName LIKE '%"+
Join
(
Parameters!Recherche.Value,
"%' "+
"UNION ALL "+
"SELECT ProductKey,FrenchProductName "+
"FROM AdventureWorksDW2008..DimProduct "+
"WHERE FrenchProductName LIKE '%"
)+
"%') AS T "+
"GROUP BY ProductKey, FrenchProductName "+
"ORDER BY COUNT(*) DESC, FrenchProductName ASC"

Une fois l’expression définie comme requête du DataSet on peut la tester, par exemple en la donnant comme source d’un paramètre:

Voilà, à bientôt!

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s