dimanche 31 mai 2009

Drillthrough SSAS dans SSRS

Reporting Services n’est pas compatible avec les actions SSAS de DRILLTHROUGH définis au niveau d’un cube. Il est cependant possible de reproduire en partie cette fonctionnalité dans un rapport via les actions SSRS de type “Go to report”.

Voici un tutorial basique permettant de l’illustrer :

Première étape : création du rapport de détail

Tout d’abord, pour effectuer une requête de type DRILLTHROUGH avec SSRS, il faut utiliser le provider OLEDB for AS (le provider MS Analysis Services ne supporte pas ce type d’instruction).

Update : Comme le souligne François dans son article, il existe une astuce pour effectuer des requêtes de drillthrough avec le provider MS AS en passant en mode DMX dans le query designer.

  • Création de la source de données :

image

  • Création d’un rapport tabulaire avec l’instruction de DRILLTHROUGH; par exemple, un rapport affichant la liste des commandes Internet.

Drillthrough maxrows 200
select [Measures].[Internet Sales Amount] on 0
from [Adventure Works]

Aperçu du rapport :

image

Seconde étape : création du rapport d’analyse

Le rapport permet ici d’analyser les ventes Internet des produits par sous-catégories.

Requête MDX utilisée :

With member [Measures].SubCatUniqueName as [Product].[Product Categories].currentmember.uniquename
SELECT
{[Measures].[Internet Gross Profit Margin], [Measures].[Internet Order Count],
[Measures].[Internet Sales Amount],[Measures].SubCatUniqueName } ON COLUMNS,
{([Product].[Product Categories].[Subcategory].ALLMEMBERS ) }
ON ROWS FROM [Adventure Works]

Un membre calculé est ajouté dans le but de récupérer dans un champ du dataset le UniqueName des membres de la hiérarchie [Product Categories]. Ce champ sera utilisé ultérieurement pour transmettre la sous-catégorie sélectionnée au rapport de détail.

Exemple de rapport d’analyse construit à partir du dataset résultant :

image

Troisième étape : création du lien entre les 2 rapports

L’objectif est d’obtenir à partir du rapport d’analyse des ventes le détail des commandes en cliquant sur une cellule.

Il faut donc ajouter un paramètre “Sous catégorie” au niveau du rapport de détail. Ce dernier permettra de stocker le UniqueName de la sous-catégorie sélectionnée dans le rapport d’analyse.

  • Création du paramètre SubCategorie :

image

Ensuite ce paramètre est ajouté dans la requête de DRILLTRHOUGH en clause WHERE afin de filtrer sur la sous-catégorie sélectionnée. Le problème est que le provider OLEDB for AS ne supporte pas les paramètres. Il faut donc évaluer la requête en tant que chaine de caractères.

  • Remplacement de la requête de l’étape 1 par l’expression suivante au niveau de la Query du dataset :

="Drillthrough maxrows 200
select [Measures].[Internet Sales Amount] on 0
from [Adventure Works]
where " + parameters!SubCategorie.value + " "

Enfin il reste à définir l’action SSRS de type “Go to report” dans le rapport d’analyse au niveau de la cellule contenant le libellé des sous-catégories :

image

Il suffit alors de sélectionner le rapport de détail et d’effectuer le mapping paramètre [@Subcategorie] avec le valeur courante du champ [SubCatUniqueName] du rapport d’analyse.

  • Modification du design des cellules afin de mettre en évidence le lien. Et voici le résultat :

image

Si besoin les sources de l’exemple sont téléchargeables ici.

3 commentaires:

François Jehl a dit…

Salut Gurv! Pour utiliser le provider SSAS (non OLE DB) j'avais utilisé l'astuce crado de flagger la requête comme du DMX et pas du MDX, ce qui avait l'air de marcher pour le coup... Tu déconseilles? Il vaut mieux utiliser OLE DB?

Gurvan Guyader a dit…

Hello François, et bien je ne connaissais pas cette astuce pour effectuer une requête de Drillthrough avec le Mode DMX du provider MS AS!

L’avantage est qu’avec cette méthode les paramètres sont gérés par le provider à condition d’utiliser ensuite dans la requête MDX les fonctions strtomember, strtotuple ou strtoset qui vont bien.

Merci pour l’info François ;)

François Jehl a dit…

De rien! J'ai fait quelques captures d'écran et deux-trois commentaires pour ceux qui n'ont jamais utilisé ce mode barbare qu'est DMX, c'est ici! @+ ;)

Enregistrer un commentaire