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 :

clip_image002

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 :

clip_image004

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.. »

clip_image006

La fenêtre suivante apparaît :

clip_image008

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é.

clip_image010

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.

clip_image012

Ci-dessous, un exemple de ma matrice

clip_image014

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 ».

clip_image016

La fenêtre suivante apparaît :

clip_image018

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 :

clip_image020

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 :

clip_image022

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)

clip_image024

Bien entendu, le rapport apparaît aussi dans la fiche projet côté Portfolio Server :

clip_image026