Bonjour,

Je voulais partager avec vous la résolution d’un phénomène que vous pouvez rencontrer si vous utilisez une version localisée de SQL Server 2008 (version non-English).

Quand vous accédez à PWA, Analyse de Portefeuille, puis que vous affichez l’analyse de Disponibilité de ressources, vous remarquez que tableau obtenu ne contient la valeur 0  pour tous les mois de l’année, sauf pour le mois de janvier de chaque année.

Ce même phénomène se produit lorsque vous affichez le tableau de Demandes des projets ainsi que Déficit et Surplus:

image

La cause du phénomène est liée à une mauvaise interprétation des dates dans une instruction PIVOT de SQL.

En effet, le résultat visible dans la vue du Portefeuille dans PWA est issue de l’exécution de procédures stockées SQL qui se nomment MSP_PLANNER_ReadResourceAvailAndReq et MSP_PLANNER_ReadResourceSurplusAndDeficit et qui se trouvent dans la base de données Published de Project Server.

Ces procédures stockées construisent une table de dates à partir de la date de début et la date de fin de chaque période de disponibilité des ressources (Champs HORIZON_START_DATE et HORIZON_END_DATE de la table MSP_ANALYSES).

Le résultat de cette table est une chaine de caractères qui a la forme suivante :

« [2011-1-1],[2011-2-1],[2011-3-1],[2011-4-1],[2011-5-1],[2011-6-1],[2011-7-1],[2011-8-1],[2011-9-1],[2011-10-1],[2011-11-1],[2011-12-1],[2012-1-1],[2012-2-1],[2012-3-1],[2012-4-1],[2012-5-1],[2012-6-1],[2012-7-1],[2012-8-1],[2012-9-1],[2012-10-1],[2012-11-1],[2012-12-1],[2013-1-1],[2013-2-1],[2013-3-1],[2013-4-1],[2013-5-1],[2013-6-1],[2013-7-1],[2013-8-1],[2013-9-1],[2013-10-1],[2013-11-1],[2013-12-1] »

Les procédures stockées vont ensuite récupérer toutes les données de disponibilité de ressources pour chaque période.

A ce niveau-là, on constate que toutes les données sont bien présentes depuis le 1er janvier 2011 jusqu’au 1er décembre 2013 :

clip_image002

Mais au moment de construire le pivot (table à 2 dimensions) , les données sont mises à NULL, sauf pour le 1er janvier de chaque année :

pivot
(
sum(Surplus)
for START_DATE in (' + @ps + ')
) as pt

clip_image004

La raison en est simple :

La chaine de caratères contenant les dates est, comme nous l’avons vu précédemment, contruite sous le format AAAA-MM-JJ.

Or, lors de la création du pivot, les dates ne sont pas interprétées correctement et le chiffre du mois et du jour sont interprétés à l’envers (format AAAA-JJ-MM). Ainsi, le pivot censé contenir les données pour le 1er de chaque mois, est en réalité construit en contenant les données pour les 12 premiers jours de janvier 2011, de janvier 2012 et de janvier 2013.

Pour changer ce phénomène, il faut modifier les procédures stockées afin de forcer l’interprétration des dates en fonction du format utilisé par le langage de SQL Server. Mais la meilleure solution reste l’installation du Cumulative Update du mois d’Août 2012 pour Project Server 2010 dont les liens sont disponibles sur ce post.

 

N’hésitez pas à laisser vos commentaires sur cet article.

Bonne journée,

Marc Biarnès