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