Intégrer un rapport RS dans les rapports PPS
Une des demandes qui revient de plus en plus fréquemment, c’est la possibilité d’inclure un ou plusieurs rapports personnalisés dés la phase de proposition d’idée.
Récemment, un rapport m’a été demandé, permettant de mettre rapidement en évidence la différence entre les dépenses et les bénéfices (type ROI).
Cet article décrit comment utiliser Reporting Service (Composant de SQL Server) afin de créer un rapport incluant les informations des bases de Portfolio Server.
Il faut savoir que par défaut, à partir du menu « Project report » d’une fiche Projet de PPS, l’application passe les paramètres suivants au serveur de rapport :
Il sera donc nécessaire que l’un de ces paramètres soit inclus dans votre rapport. Le plus souvent seul le paramètre « OriginalID » est nécessaire (et suffisant).
1/ création du rapport
Le Rapport va être créé avec Reporting Services 2005. Dans le menu « Start/All programs/Microsoft SQL Server 2005/SQL server Business Intelligence Development Studio ».
Vous pouvez au choix utiliser le guide de rapport ou créer directement votre rapport
A/ Requête d’extraction de données
Dans l’onglet « Data », renseignez la requête permettant d’extraire les données de la base
La requête utilisée et donnée à titre d’exemple est la suivante. Cette requête a été utilisée dans le cadre d’une démonstration et devra être adaptée à votre besoin et contexte :
SELECT
sfSTRUCTURE_ENTRIES.Name AS Proj_Name, hrORGANIZATION_HIERARCHY.Name AS [Level n], fnVALUES.Value, fnVALUES.Period, fnNAMES_1.Name AS Cost_Niv_Inf, fSTRUCTURE_ENTRIES_1.Name AS [Cost Center], fnVALUES.Granularity, fnNAMES_1.LevelID, fnLEVELS.Name AS Level_Name, fnLEVELS.ShortName, fnLEVELS.EntityType, fnLEVEL_RELATIONS.PrimaryLevelID, fnLEVEL_RELATIONS.SecondaryLevelID, sfSTRUCTURE_ENTRIES.OriginalID, sfSTRUCTURES.AccountID
FROM
fnVALUES INNER JOIN sfSTRUCTURE_ENTRIES INNER JOIN
sfSTRUCTURES ON sfSTRUCTURE_ENTRIES.StructureID = sfSTRUCTURES.ID INNER JOIN
hrGROUPS ON sfSTRUCTURES.InternalClassID = hrGROUPS.InternalClassID INNER JOIN
hrORGANIZATION_HIERARCHY ON hrGROUPS.ID = hrORGANIZATION_HIERARCHY.DefaultPortfolioID ON
fnVALUES.ProjectID = sfSTRUCTURE_ENTRIES.ID INNER JOIN
fnRELATIONS ON fnVALUES.EntityID = fnRELATIONS.ID INNER JOIN
fnNAMES AS fnNAMES_1 ON fnRELATIONS.SecondaryNameID = fnNAMES_1.ID INNER JOIN
sfSTRUCTURE_ENTRIES AS sfSTRUCTURE_ENTRIES_1 ON fnVALUES.CenterID = sfSTRUCTURE_ENTRIES_1.ID INNER JOIN
fnLEVELS ON fnNAMES_1.LevelID = fnLEVELS.ID INNER JOIN
fnLEVEL_RELATIONS ON fnLEVELS.ID = fnLEVEL_RELATIONS.PrimaryLevelID
WHERE
(sfSTRUCTURE_ENTRIES.SolutionID IS NULL) AND (sfSTRUCTURES.Name = N'projects') AND (fnVALUES.Type = N'cost' OR fnVALUES.Type = N'benefit') AND (fnVALUES.Granularity = @Granularity) AND (hrORGANIZATION_HIERARCHY.Name LIKE N'%') AND (sfSTRUCTURE_ENTRIES.OriginalID =@OriginalID)
ORDER BY
Proj_Name
Après la première exécution du rapport le data set se met à jour :
Note : Les 2 autres « DataSet Organisaton_Hierarchy_List »et « Project_List » retourne l’organisation et la liste des projets afin d’inclure éventuellement ces valeurs dans des listes déroulantes de paramètres du rapport. Ce sujet ne sera pas abordé dans ce document.
B/ Mise en forme du rapport
Paramètres du rapport
La requête une fois renseignée, nous allons passer au design du rapport. Le design se réalise dans l’onglet « Layout ».
Mais avant d’aller plus loin, il est nécessaire de définir les paramètres du rapport qui seront récupérées dans la requête précédemment crée. Cliquez sur « Report »/ «Report Parameters.. »
La fenêtre suivante apparaît :
2 paramètres ont été crées et reprit par la requête : Granularity et OriginalID.
Par exemple, le paramètre « granularity » est une liste de valeur Texte associé à une valeur entière permettant de définir la période du rapport (Année, trimestre ou mois)
Design
Dans ce rapport j’ai utilisé 2 objets « Matrix » afin d’obtenir le rendu désiré.
Ensuite j’ai rajouté les lignes et les colonnes nécessaires afin d’obtenir le rendu souhaité (click droit sur la matrice pour rajouter des lignes ou des colonnes). Dans les propriétés de la matrice, dans l’onglet « Groups », il est possible de définir très précisément les propriétés des lignes et des colonnes.
Ci-dessous, un exemple de ma matrice
La deuxième matrice me permet d’afficher constamment la différence entre les coûts et bénéfice, afin de conserver une vision d’ensemble du ROI, même si la première matrice descend très finement dans l’arborescence des lignes de dépenses et de bénéfices.
Mots clés Technorati : Rapport,ROI,Reporting Services,Portfolio,PPS,RS,OPEX,CAPEX
Une fois le rapport terminé, il est possible de le pré visualiser en cliquant sur l’onglet « Preview ». Il est ensuite possible de publier le rapport sur le serveur Reporting Services.
Mais avant, il est nécessaire de définir l’adresse de publication dans les propriétés du rapport
Dans la fenêtre « Solution Explorer » faîtes un clique droit sur le nom de votre rapport et cliquez sur « Propriétés ».
La fenêtre suivante apparaît :
Cette fenêtre permet de définir l’adresse du serveur ainsi que le répertoire cible de publication. Par défaut, PPS est associé au répertoire « Reports ». Les rapports publiés dans ce répertoire seront visible dans l’onglet « Project reports » dans la fiche de projet de Project Portfolio.
Une fois publié, le rapport est disponible à partir de l’interface du serveur de rapports :
Cette liste de rapports est celle qui sera visible dans la fiche projet de PPS.
Si on clique sur notre rapport « Project_ROI », on peut en avoir l’aperçu :
Si vous avez autorisé la notion de « Drill down » dans votre patrice, il sera alors possible de descendre plus bas dans l’arborescence des lignes de dépenses et bénéfices (afin de répondre à des demandes de rapports type OPEX/CAPEX)
Bien entendu, le rapport apparaît aussi dans la fiche projet côté Portfolio Server :