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

 

Laisser un commentaire

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.