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

 

Catégories : SSRS

Laisser un commentaire

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