SSRS

MDX Dynamique : Reproduire ce que fait un Tableau croisé dynamique(TCD) au travers de SSRS

Sep 17, 2013

Aziz Ouali

Nous nous sommes tous posés la question (ou pas !) sur la façon de procéder afin de rendre les rapports développés sous Reporting Services, dynamiques, ceci, bien évidement va au-delà de ce que permet de faire l’outil SSRS par le biais du paramétrage classique.

Ce post s’inscrit dans cette logique, je me suis intéressé à reproduire les avantages de l’utilisation d’un TCD dans un rapport SSRS. Pour cela, Follow me…

1-      Créer une source de données vers le cube OLAP

2-      Initialiser un rapport SSRS ,vide, basé sur la Datasource OLAP.rds

 

3-      Créer trois paramètres : (Type Text)

a.       Le premier @RowValue

b.      Le deuxième @ColumnValue

c.       Le troisième concerne les Métriques (@Metrics)

-@RowValue: nous suivrons sur l’axe des lignes les ventes par marque et par pays

-@ColumnValue: nous analyserons en colonne la date de commande ainsi que la date d’expédition des colis

@Metrics: nous suivrons l’évolution de la mesure du nombre de commandes (Order Count) et de la quantité commandée (Quantity)

 4-      Créer le DataSet

 Dans un premier temps, Il est nécessaire de créer le DataSet_Main en choisissant des axes d’analyses en dur. Ceci va permettre à SSRS d’initialiser les MetaDonnées.

 WITH

 MEMBER [Measures].[RowValue] as [Product].[Brand].CurrentMember.Name

 MEMBER [Measures].[ColumnValue] as [Date].[Calendar].CurrentMember.Name

 MEMBER [Measures].[Metrics] as [Measures].[Order Count]

 SELECT

 NON EMPTY {

 [Measures].[RowValue],       –sera rendu Dynamique

 [Measures].[ColumnValue],    –sera rendu Dynamique

 [Measures].[Order Count],    –Mesure qui servira comme référence pour le contrôle

 [Measures].[Quantity],       –Mesure qui servira comme référence pour le contrôle

 [Measures].[Metrics]         –sera rendu Dynamique

 } ON COLUMNS

 ,

       Nonempty (

                   {[Product].[Brand].children}

                   *

                   {[Date].[Calendar].[Month].Members}

                   ,[Measures].[Quantity]

                   )

 ON ROWS

 FROM

 (SELECT {

 ([Date].[Calendar].[Date].&[2013-01-01T00:00:00])

 :

 ([Date].[Calendar].[Date].&[2013-08-08T00:00:00])

 } ON 0

 FROM [CubeOLAP])

 5-      Créer le rapport

 Créer un Tablix de type Matrix et affecter les trois mesures comme indiqué sur la figure ci-dessous (RowValue, ColumnValue &Metrics)

 Valider la structure du rapport une première fois en cliquons sur Preview, pour l’instant, les paramètres du rapport ne sont pas encore fonctionnels

 6-      Modifier le DataSet pour passer la requête MDX à SSRS en mode texte

= »WITH »

+  » MEMBER [Measures].[RowValue] as [Product].[Brand].CurrentMember.Name »

+  » MEMBER [Measures].[ColumnValue] as [Date].[Calendar].CurrentMember.Name »

+  » MEMBER [Measures].[Metrics] as [Measures].[Order Count] »

+  » SELECT »

+  » NON EMPTY {« 

+  » [Measures].[RowValue], » 

+  » [Measures].[ColumnValue], »

+  » [Measures].[Order Count], »

+  » [Measures].[Quantity], »

+  » [Measures].[Metrics] »

+  » } ON COLUMNS »

+  » , »

+  »   Nonempty (« 

+  »               {[Product].[Brand].children} »

+  »               * »

+  »               {[Date].[Calendar].[Month].Members} »

+  »               ,[Measures].[Quantity] »

+  »               ) »

+  » ON ROWS »

+  » FROM »

+  » (SELECT {« 

+  » ([Date].[Calendar].[Date].&[2013-01-01T00:00:00]) »

+  » : »

+  » ([Date].[Calendar].[Date].&[2013-08-08T00:00:00]) »

+  » } ON 0″

+  » FROM [CubeOLAP]) »

Ceci donne à la validation quelque chose qui ressemble à la capture d’écran ci-dessous:

 Valider la requête en procédons à un Preview

 Finalement, il suffit de rendre tous les axes d’analyses paramétrables dans la requête MDX en mode Texte

 = »WITH »

 +  » MEMBER [Measures].[RowValue] as » + Parameters!RowValue.Value

 +  » member [Measures].[ColumnValue] as « + Split(Parameters!ColumnValue.Value, »] »)(0) + « ].[Calendar].CurrentMember.Name »

 +  » MEMBER [Measures].[Metrics] as » + Parameters!Metrics.Value

 +  » SELECT »

 +  » NON EMPTY {« 

 +  » [Measures].[RowValue], » 

 +  » [Measures].[ColumnValue], »

 +  » [Measures].[Order Count], »

 +  » [Measures].[Quantity], »

 +  » [Measures].[Metrics] »

 +  » } ON COLUMNS »

 +  » , »

 +  »   Nonempty (« 

 +  »               { » + Split(Parameters!RowValue.Value, »] »)(0) + « ] » + Split(Parameters!RowValue.Value, »] »)(1) + »].children} »

 +  »               * »

 +  »               { » + Split(Parameters!ColumnValue.Value, »] »)(0) + « ].[Calendar].[Month].Members} »

 +  »               ,[Measures].[Quantity] »

 +  »               ) »

 +  » ON ROWS »

 +  » FROM »

 +  » (SELECT {« 

 +  » (« + Split(Parameters!ColumnValue.Value, »] »)(0) + « ].[Calendar].[Date].&[2013-01-01T00:00:00]) »

 +  » : »

 +  » (« + Split(Parameters!ColumnValue.Value, »] »)(0) + « ].[Calendar].[Date].&[2013-08-08T00:00:00]) »

 +  » } ON 0″

 +  » FROM [CubeOLAP]) »

 Le résultat donne exactement ce que nous attendions, il est désormais possible de croiser les axes d’analyse à volonté !! Enjoy

  

A noter, qu’il est tout à fait possible d’ajouter d’autres axes d’analyses.

Exp ci-dessous : ajout de l’axe date logistique dans le paramètre @ColumnValue:

Preview

 

0 commentaires

Soumettre un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Découvrez nos autres articles

Aller au contenu principal