2013-05-06 137 views
1

我想爲使用底層SQL Server 2008 Analysis Services數據庫的Team Foundation Server 2010創建一些報告。立方體的「團隊系統」是TFS 2010報告中的一個。MDX SUM函數和NULL值

我的問題是。我嘗試使用FactWorkItemHistory的StateChangeCount度量。 對於一段時間沒有工作項狀態更改,但還有其他更改。 所以我們有一些具有NULL StateChangeCount的事實行,稍後會有介紹。

即使基礎事實行包含空值,狀態更改計數度量有時也會生成值0。此度量在[FactWorkItemHistory]。[StateChangeCount]中定義爲SUM。 NULLS的SUM返回0還是我錯過了某些東西? 有問題的時期是2013-03-01(3月)和2013-05-02(5月)。

SELECT 
    [DateSK], 
    COUNT(*) AS COUNT, 
    SUM([StateChangeCount]) AS SUM 
FROM 
     [Tfs_Warehouse].[dbo].[FactWorkItemHistory] 
WHERE 
     [WorkItemSK] IN (SELECT [WorkItemSK] FROM [Tfs_Warehouse].[dbo].[DimWorkItem]  WHERE [System_WorkItemType] = 'Bug') 
GROUP BY 
    [DateSK] 

輸出爲:

DateSK     COUNT SUM 
--------------------------------------- 
2011-05-05 00:00:00.000 13 7 
2012-03-01 00:00:00.000 2  NULL 
2012-09-28 00:00:00.000 60 2 
2013-05-02 00:00:00.000 16 NULL 
2013-05-06 00:00:00.000 9  9 

查詢:

SELECT 
    [DateSK], 
    [StateChangeCount] 
FROM 
     [Tfs_Warehouse].[dbo].[FactWorkItemHistory] 
WHERE 
     [WorkItemSK] IN (SELECT [WorkItemSK] FROM [Tfs_Warehouse].[dbo].[DimWorkItem] WHERE [System_WorkItemType] = 'Bug') 
ORDER BY 
     [DateSK] 

給出:

DateSK     StateChangeCount 
--------------------------------------- 
2011-05-05 00:00:00.000 1 
2011-05-05 00:00:00.000 NULL 
2011-05-05 00:00:00.000 NULL 
2011-05-05 00:00:00.000 1 
2011-05-05 00:00:00.000 NULL 
2011-05-05 00:00:00.000 1 
2011-05-05 00:00:00.000 NULL 
2011-05-05 00:00:00.000 1 
2011-05-05 00:00:00.000 NULL 
2011-05-05 00:00:00.000 1 
2011-05-05 00:00:00.000 NULL 
2011-05-05 00:00:00.000 1 
2011-05-05 00:00:00.000 1 
2012-03-01 00:00:00.000 NULL 
2012-03-01 00:00:00.000 NULL 
2012-09-28 00:00:00.000 1 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 1 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2012-09-28 00:00:00.000 NULL 
2013-05-02 00:00:00.000 NULL 
2013-05-02 00:00:00.000 NULL 
2013-05-02 00:00:00.000 NULL 
2013-05-02 00:00:00.000 NULL 
2013-05-02 00:00:00.000 NULL 
2013-05-02 00:00:00.000 NULL 
2013-05-02 00:00:00.000 NULL 
2013-05-02 00:00:00.000 NULL 
2013-05-02 00:00:00.000 NULL 
2013-05-02 00:00:00.000 NULL 
2013-05-02 00:00:00.000 NULL 
2013-05-02 00:00:00.000 NULL 
2013-05-02 00:00:00.000 NULL 
2013-05-02 00:00:00.000 NULL 
2013-05-02 00:00:00.000 NULL 
2013-05-02 00:00:00.000 NULL 
2013-05-06 00:00:00.000 1 
2013-05-06 00:00:00.000 1 
2013-05-06 00:00:00.000 1 
2013-05-06 00:00:00.000 1 
2013-05-06 00:00:00.000 1 
2013-05-06 00:00:00.000 1 
2013-05-06 00:00:00.000 1 
2013-05-06 00:00:00.000 1 
2013-05-06 00:00:00.000 1 

最後MDX查詢:

SELECT 
NON EMPTY { [Measures].[State Change Count] } ON COLUMNS, 
NON EMPTY { ([Date].[Date].[Date].ALLMEMBERS * [Work Item].[System_State]. [System_State].ALLMEMBERS) } 
ON ROWS FROM (
      SELECT (
        { [Work Item].[System_WorkItemType].&[Bug] } 
         ) 
      ON COLUMNS FROM [Team System]) 
      WHERE ([Work Item].[System_WorkItemType].&[Bug]) 

結果:

       StateChangeCount 
--------------------------------------------- 
2011-05-05 Assigned   4 
2011-05-05 For verification 2 
2011-05-05 In progress  1 
2012-03-01 Assigned   0 
2012-09-28 Assigned   2 
2013-05-02 Assigned   0 
2013-05-06 Assigned   9 

雖然

SELECT 
NON EMPTY { [Measures].[State Change Count] } ON COLUMNS, 
NON EMPTY { ([Date].[Date].[Date].ALLMEMBERS * [Work Item].[System_State]. [System_State].ALLMEMBERS) } 
ON ROWS FROM (
     SELECT (
       { [Work Item].[System_WorkItemType].&[Bug] } 
        ) 
     ON COLUMNS FROM [Team System]) 
     WHERE ([Work Item].[System_WorkItemType].&[Bug]) 

是:

    State Change Count 
------------------------------------ 
May 2011   7 
June 2011   (null) 
July 2011   (null) 
August 2011  (null) 
September 2011 (null) 
October 2011  (null) 
November 2011  (null) 
December 2011  (null) 
January 2012  (null) 
February 2012  (null) 
March 2012  0 
April 2012  (null) 
May 2012   (null) 
June 2012   (null) 
July 2012   (null) 
August 2012  (null) 
September 2012 2 
October 2012  (null) 
November 2012  (null) 
December 2012  (null) 
January 2013  (null) 
February 2013  (null) 
March 2013  (null) 
April 2013  (null) 
May 2013   9 
June 2013   (null) 
July 2013   (null) 
August 2013  (null) 
Unknown   (null) 

我可以看到,對於有問題的時期也有一些事實行,但含有其他工作項數據變化。我希望這些項目不應該污染結果,特別是對於SUM。對於COUNT,同意,看到零值是好的,但不適用於SUM。

任何幫助將不勝感激。

謝謝

+0

您是否嘗試過使用AGGREGATE而不是SUM? – michele 2013-05-09 10:24:02

回答

1

使用

AGGREGATE(set, measure) + 0 

工作對我來說,當我遇到了同樣的問題,寫一個計算的成員。我還沒有嘗試過使用SUM。