在MDX查询中获取叶节点

时间:2010-03-02 00:50:36

标签: database ssas mdx

我正在尝试在TFS多维数据集上创建一个MDX查询,该查询获取Estimate字段的历史值。对于每个任务,我想获得设置Estimate字段的每个人的最后估计。例如,如果Bob项目经理将估计设置为24小时,然后开发人员将Dave设置为32小时,我想创建一个查询,显示每个估计值与实际工作时间的差异[工作完成]。 / p>

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

例如,Bob将估计值设置为转速为2的24。然后Dave将其设置为转速为32的TFS。对于转速2,TFS将另一行添加到-24的数据仓库中。当此卷起时,我看不到鲍勃的估计。

如何仅选择正值?我尝试使用过滤器函数,这将返回正确的成员,但单元格的值仍为空

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 个答案:

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