2010-03-02 4 views
0

Je tente de créer une requête MDX sur le cube TFS qui récupère les valeurs historiques du champ Estimation. Pour chaque tâche, je veux obtenir la dernière estimation pour chaque personne qui a défini le champ Estimation. Par exemple, si Bob le chef de projet fixe l'estimation à 24 heures et que Dave le développeur la règle à 32 heures, je veux créer une requête qui montre la variance de chacune de leurs estimations par rapport aux heures réelles travaillées [Travail terminé]. Le problème que je rencontre est que les valeurs historiques des éléments de travail dans TFS sont suivies avec revs (révisions), mais TFS met à la fois une valeur positive et négative dans un seul rev pour les éléments de travail qui sont modifiés. Ce qui fait que la somme ressemble à 0/cellule vide. Par exemple, Bob définit l'estimation à 24 dans rev 2. Ensuite, Dave le définit à 32 dans rev 3. TFS ajoute une autre ligne à l'entrepôt de données de -24 pour rev 2. Lorsque cela est enroulé, je ne peux pas Voir l'estimation de Bob.Obtention de nœuds feuille dans une requête MDX

Comment sélectionner uniquement les valeurs positives? J'ai essayé d'utiliser la fonction de filtre et cela renvoie les membres de droit, mais la valeur de la cellule est toujours nulle

with 
member [Last Estimate] as [Measures].[Microsoft_VSTS_CMMI_Estimate] 
SELECT 
    {nonempty([Changed By].[Person].[All].Children*[Last Estimate])} ON 0, 
    {nonempty([Work Item].[System_Id].[System_Id]*Filter([Work Item].[System_Rev].[All].Children, [Measures].[Microsoft_VSTS_CMMI_Estimate] > 0))} ON 1 

FROM [Work Item History] 
WHERE [Team Project].[Team Project].&[29]; 

Voici les résultats

Work  rev  Bob    Dave 
Item   Last Estimate Last Estimate 
7446  2 (null)   (null) 
7446  3 (null)   32.0 

Chaque ligne doit avoir une valeur pour l'un des deux personnes.

Merci d'avance!

Répondre

1

La fonction de filtre filtre les membres de la dimension mais cela ne suffit pas car un membre peut contenir par exemple à la fois 24 et -24. Essayez de filtrer la mesure elle-même avec la fonction Iif:

with 
member [Last Estimate] as 
' 
Iif([Measures].[Microsoft_VSTS_CMMI_Estimate] > 0, [Measures].[Microsoft_VSTS_CMMI_Estimate], 0) 
' 
SELECT 
    {nonempty([Changed By].[Person].[All].Children*[Last Estimate])} ON 0, 
    {nonempty([Work Item].[System_Id].[System_Id]*Filter([Work Item].[System_Rev].[All].Children, [Measures].[Microsoft_VSTS_CMMI_Estimate] > 0))} ON 1 

FROM [Work Item History] 
WHERE [Team Project].[Team Project].&[29]; 
+0

Merci Rudolf, mais cela n'a pas fonctionné. Il a juste changé tous les nulls en 0. –

+0

Je vois, il semble que la dimension que vous utilisez dans les colonnes n'a pas un lien approprié à la table de faits. Je ne connais pas la structure du cube TFS, mais est-ce que cela pourrait être [Modifié par]. [Personne] ne contient pas la personne qui a initialement établi l'estimation? – Rudolf

+0

Une autre pensée, il pourrait avoir à faire avec le niveau d'agrégation du calcul. Je viens de rencontrer cette question qui décrit le même problème: http://stackoverflow.com/questions/2371539/calculated-measure-dimension – Rudolf

Questions connexes