• Les semaines sont dans le désordre dans le Cube OLAP de Project Server 2007

    Bonjour,

    Je souhaite parler aujourd’hui d’un problème qui nous a été remonté par un client, et qui peut potentiellement vous concerner.

    Ce mois-ci (février 2011), les semaines ne sont pas ordonnées correctement dans la vue Data Analysis:

     

    clip_image002[4]clip_image003[4]

     

    La Semaine 10 apparait avant la deuxième partie de la Semaine 6. Ce problème apparaissant déjà en février 2010. Par contre, cela ne se produit pas avec Project Server 2010. 

    La cause de ce problème est lié à la dimension Time qui est construite à partir de la vue MSP_TimeByDay_OLAPView dans la base de Reporting. Cette vue renvoie les informations Année, Trimestre, Mois, Semaine et Jour sous la forme d’un binôme [CalendarMemberKey, CalendarMemberName]:

     

    SELECT     TimeByDay, TimeYear AS CalendarMemberKeyYear, TimeYear AS CalendarMemberNameYear, TimeQuarter AS CalendarMemberKeyQuarter,

                          'Quarter' + CONVERT(CHAR, TimeQuarter) AS CalendarMemberNameQuarter, TimeMonthOfTheYear AS CalendarMemberKeyMonth,

                          dbo.MFN_GetLocalizedMonthName(TimeMonthOfTheYear) AS CalendarMemberNameMonth, TimeWeekOfTheYear AS CalendarMemberKeyWeek,

                          'Week' + CONVERT(CHAR, TimeWeekOfTheYear) AS CalendarMemberNameWeek, TimeByDay AS CalendarMemberKeyDay, 'Day' + CONVERT(CHAR,

                          TimeDayOfTheMonth) AS CalendarMemberNameDay, ISNULL(CAST(FiscalYear AS nvarchar(255)), N'Not Set') AS FiscalMemberKeyYear,

                          ISNULL(CAST(FiscalYear AS nvarchar(255)), N'Not Set') AS FiscalMemberNameYear, ISNULL(CAST(FiscalQuarter AS nvarchar(255)), N'Not Set')

                          AS FiscalMemberKeyQuarter, 'Qtr' + ISNULL(CAST(FiscalQuarter AS nvarchar(255)), N'Not Set') AS FiscalMemberNameQuarter,

                          ISNULL(CAST(FiscalPeriodName AS nvarchar(255)), N'Not Set') AS FiscalMemberKeyPeriod, ISNULL(CAST(FiscalPeriodName AS nvarchar(255)),

                          N'Not Set') AS FiscalMemberNamePeriod, TimeByDay AS FiscalMemberKeyDay, dbo.MFN_GetLocalizedMonthName(TimeMonthOfTheYear)

                          + ' ' + 'Day' + ' ' + CONVERT(CHAR, TimeDayOfTheMonth) AS FiscalMemberNameDay

    FROM         dbo.MSP_TimeByDay

     

    Quand le cube OLAP est construit, la hiérarchie de la dimension Time est créée par cette requête basée sur la vue MSP_TimeByDay_OLAPView. Si l’on fait une trace SQL Profiler dans Analysis Services, on peut voir :

     

    SELECT [MSP_TimeByDay_OlapView_Dimension].[CalendarMemberKeyDay] AS [MSP_TimeByDay_OlapView_DimensionCalendarMemberKeyDay0_0],[MSP_TimeByDay_OlapView_Dimension].[CalendarMemberNameDay] AS [MSP_TimeByDay_OlapView_DimensionCalendarMemberNameDay0_1],[MSP_TimeByDay_OlapView_Dimension].[CalendarMemberKeyWeek] AS [MSP_TimeByDay_OlapView_DimensionCalendarMemberKeyWeek0_2],[MSP_TimeByDay_OlapView_Dimension].[CalendarMemberKeyMonth] AS [MSP_TimeByDay_OlapView_DimensionCalendarMemberKeyMonth0_3],[MSP_TimeByDay_OlapView_Dimension].[CalendarMemberKeyQuarter] AS [MSP_TimeByDay_OlapView_DimensionCalendarMemberKeyQuarter0_4],[MSP_TimeByDay_OlapView_Dimension].[CalendarMemberKeyYear] AS [MSP_TimeByDay_OlapView_DimensionCalendarMemberKeyYear0_5],[MSP_TimeByDay_OlapView_Dimension].[CalendarMemberNameWeek] AS [MSP_TimeByDay_OlapView_DimensionCalendarMemberNameWeek0_6],[MSP_TimeByDay_OlapView_Dimension].[CalendarMemberNameMonth] AS [MSP_TimeByDay_OlapView_DimensionCalendarMemberNameMonth0_7],[MSP_TimeByDay_OlapView_Dimension].[CalendarMemberNameQuarter] AS [MSP_TimeByDay_OlapView_DimensionCalendarMemberNameQuarter0_8],[MSP_TimeByDay_OlapView_Dimension].[CalendarMemberNameYear] AS [MSP_TimeByDay_OlapView_DimensionCalendarMemberNameYear0_9],[MSP_TimeByDay_OlapView_Dimension].[TimeByDay] AS [MSP_TimeByDay_OlapView_DimensionTimeByDay0_10]

    FROM [MSP_TimeByDay_OlapView] AS [MSP_TimeByDay_OlapView_Dimension]

     

    Chaque niveau de la hiérarchie Time est un binôme tel que [CalendarMemberKey, CalendarMemberName]. C’est le cas pour Année, Trimestre, Mois, Semaine et Jour. Tous les niveaux sont attachés à la racine [All Time] en fonction de leur CalendarMemberKey :

     

    Et c’est là que le problème intervient, car la valeur CalendarMemberKeyest est traitée en type Text et non en type Integer (numérique). Dans ce cas, la valeur “10” de CalendarMemberKey est placée devant la valeur “6” de CalendarMemberKey. C’est la raison pour laquelle on obtient, dans le cube OLAP :

     

    clip_image006[4]clip_image007[4]

     

    Pour résoudre ce problème, il faut modifier la vue MSP_TimeByDay_OLAPView en forçant l’ajout d’un “0” devant les valeurs de CalendarMemberKey qui ne contiennent qu’un seul chiffre (1->01, 2->02 etc…) :

     

    SELECT     TimeByDay, TimeYear AS CalendarMemberKeyYear, TimeYear AS CalendarMemberNameYear, TimeQuarter AS CalendarMemberKeyQuarter,

                          'Quarter' + CONVERT(CHAR, TimeQuarter) AS CalendarMemberNameQuarter, TimeMonthOfTheYear AS CalendarMemberKeyMonth,

                          dbo.MFN_GetLocalizedMonthName(TimeMonthOfTheYear) AS CalendarMemberNameMonth,

                         (CASE WHEN LEN (CONVERT(CHAR,TimeWeekOfTheYear))<2 THEN '0' ELSE '' END) + CONVERT(CHAR,TimeWeekOfTheYear) AS CalendarMemberKeyWeek,

                          'Week' + CONVERT(CHAR, TimeWeekOfTheYear) AS CalendarMemberNameWeek, TimeByDay AS CalendarMemberKeyDay, 'Day' + CONVERT(CHAR,

                          TimeDayOfTheMonth) AS CalendarMemberNameDay, ISNULL(CAST(FiscalYear AS nvarchar(255)), N'Not Set') AS FiscalMemberKeyYear,

                          ISNULL(CAST(FiscalYear AS nvarchar(255)), N'Not Set') AS FiscalMemberNameYear, ISNULL(CAST(FiscalQuarter AS nvarchar(255)), N'Not Set')

                          AS FiscalMemberKeyQuarter, 'Qtr' + ISNULL(CAST(FiscalQuarter AS nvarchar(255)), N'Not Set') AS FiscalMemberNameQuarter,

                          ISNULL(CAST(FiscalPeriodName AS nvarchar(255)), N'Not Set') AS FiscalMemberKeyPeriod, ISNULL(CAST(FiscalPeriodName AS nvarchar(255)),

                          N'Not Set') AS FiscalMemberNamePeriod, TimeByDay AS FiscalMemberKeyDay, dbo.MFN_GetLocalizedMonthName(TimeMonthOfTheYear)

                          + ' ' + 'Day' + ' ' + CONVERT(CHAR, TimeDayOfTheMonth) AS FiscalMemberNameDay

    FROM         dbo.MSP_TimeByDay

     

    Ainsi, après la création du cube OLAP, vous obtenez :

     

    clip_image009[4]clip_image010[4]

     

    J’ai proposé cette solution au Groupe Produit qui l’a validée. Elle est donc considérée comme officielle et elle doit être utilisée pour corriger ce problème.

    Pour information, la prochaine occurrence de ce problème se situe en mars 2012.

    N’hésitez pas à commenter cet article.

    Bonne journée

    Marc Biarnès

  • Project et Project Server 2010 SP1

    Il y a quelques jours, l’équipe Windows a publié un article sur la disponibilité prochaine du Service Pack1 pour Windows 7 (disponible depuis le 23 février). Mais qu’en est-il exactement du Service Pack 1 pour Office 2010 et les applications Office Server 2010 ?

    En général, Microsoft produit un Service Pack entre douze et dix-huit mois après la sortie d’un produit. Nous devrions être dans le même délai pour Office 2010, Project Server 2010 et Sharepoint 2010.

    Ce Service Pack devrait contenir l’ensemble des Cumulatives Updates déjà disponibles (plus ceux qui seront publiés avant la sortie du Service Pack), ainsi que des corrections mineures n’ayant pas fait l’objet de correctifs particuliers. Cependant, si vous avez décidé d’installer Project Server 2010 dans les jours ou semaines qui viennent, je vous conseille de le faire dès à présent, sans attendre la sortie du Service Pack, mais en appliquant les derniers Cumulative Updates disponibles.

    Bonne journée

    Marc Biarnès

  • Les Cumulative Update du mois de février sont disponibles (MAJ)

    Pour Project et Project Server 2007 :

    Mises à Jour complètes:

    Mises à Jour Individuelles:

    Pour Project et Project Server 2010 :

     Mises à Jour complètes:

    Mises à Jour Individuelles:

    Je vous rappelle qu’en ce qui concerne la version 2010, le correctif client est disponible en deux versions : x86 ou x64. Vérifiez bien que la version que vous téléchargez est en rapport avec la version du client installé sur vos machines.

     Si vous désirez de plus amples informations sur les différentes versions de correctifs disponibles, je vous renvoie à l’article posté pour le CU d’avril dans lequel j’expliquais tout cela : http://blogs.technet.com/b/frenchpjblog/archive/2010/05/04/le-cumulative-update-du-mois-d-avril-est-disponible.aspx

    Bonne journée

    Marc Biarnès