2010-03-02 86 views
0

我试图在TFS多维数据集上创建一个MDX查询,该查询获取估计字段的历史值。对于每个任务,我想要为设置“估计”字段的每个人获取最新估计值。例如,如果项目经理Bob将估算值设置为24小时,然后开发人员将其设置为32小时,则我想创建一个查询,以显示每个估算值与实际工作时间的差异[工作完成]。在MDX查询中获取叶节点

我遇到的问题是TFS中工作项目的历史值跟踪的是revs(修订版),但TFS将正面和负面的值都放在单个rev中用于更改的工作项目。这使得总和看起来像0 /空单元格。

例如鲍勃设置估计到24转2.然后戴夫将其设置为32转3. TFS添加另一行的-24数据仓库为REV 2,当这个被卷起我不能看鲍勃的估计。

如何仅选择正值?我试图使用过滤器功能,这将返回正确的成员,但该单元格的值仍是空

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]; 

这是效果

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

每一行都应该有一个价值的一个两个人。

在此先感谢!

回答

1

过滤器函数过滤了维度的成员,但这不够,因为成员可以包含例如24和-24。尝试使用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

感谢鲁道夫,但那并没有奏效。它只是将所有零值更改为0。 – 2010-03-02 17:35:09

+0

我看到了,您在列中使用的维度似乎没有正确的链接到事实表。我不知道TFS立方体的结构,但可能是[Changed By]。[Person]不包含最初设置估算的人员? – Rudolf 2010-03-03 09:51:37

+0

另一个想法是,它可能与计算的聚合级别有关。我只是碰到这个问题,它描述了同样的问题:http://stackoverflow.com/questions/2371539/calculated-measure-dimension – Rudolf 2010-03-03 14:33:43