2012-02-23 42 views
0

我有是會得到傳遞給SSRS報告看起來像這樣的數據集:SSRS 2008年數據集過濾 - SUM /細分按月

CODE TEXT COUNT MONTH 
100 ABC 20  January 
100 ABC 10  February 
200 DEF 15  January 
200 DEF 15  February 
300 GHI 0  x 
400 JKL 10  January 

這個「X」表示不存在用於數據該代碼/文本爲本年,但是,我仍然需要它來顯示。在SSRS我想有一列來顯示當前月(2月)和一列以顯示今年迄今:

CODE TEXT MONTH_TO_DATE YEAR_TO_DATE 
    100 ABC 10   30 [20 + 10] 
    200 DEF 15   30 [15 + 15] 
    300 GHI 0    0 [0] 
    400 JKL 0    10 [0 + 10] 

在2008年SSRS這可能嗎?

回答

1

這將需要在SQL中完成,因此,如果您發佈了已有的數據,而不是通過該數據生成的數據,則可以更容易地調整SQL SQL。

無論如何,我們必須找到一個辦法知道它是當前月份並顯示它,我們可以用SQL語句CASE做。也許你有一個日期字段,你可以查詢哪一個可能比下面更乾淨,但是我只是按照你提供的數據運行(也就是說,我們只有一個月份名稱,我們使用DATENAME與當前月份進行比較, GETDATE SQL函數 - 顯然,如果你有多年的數據爲每年二月都會被彙總到當月這不工作,但你適合做什麼的想法):現在

SELECT [CODE], [TEXT], 
    SUM(CASE WHEN [MONTH] = DateName(month, GetDate()) THEN [COUNT] END) AS CurrentMonth, 
    SUM([COUNT]) AS YearToDate 
FROM MyTable 
GROUP BY [CODE], [TEXT] 
ORDER BY [CODE], [TEXT] 

,在評論弗拉德的答案你說你不能做一個SUM(COUNT(fieldname)),如果你使用嵌套查詢,你可以這樣做:

SELECT [CODE], [TEXT], SUM([COUNT]) AS Total 
FROM (-- This is a nested query 
    SELECT [CODE], [TEXT], COUNT(somefield) AS [COUNT] 
    FROM MyTable 
) 
GROUP BY [CODE], [TEXT] 
ORDER BY [CODE], [TEXT] 

如果你想顯示x的零個值,則使用了YearToDate單元的格式如下:

#,##0;-#,##0;x 
+0

嗨,克里斯,我能夠使用上面發佈的一些內容,並結合我的一些調整來獲得我想要的結果。這應該很適合SSRS。謝謝你,也感謝你回答我的問題。 – user961714 2012-02-24 20:22:07

0

我想你應該從SQL SELECT /存儲過程返回此。您應該使用左連接我認爲這些0結果

+0

嗨弗拉德,我不認爲我可以用SQL做到這一點。目前我的查詢使用LEFT JOIN組合5個表來獲得我已有的0。 COUNT列已由COUNT(ColumnName)創建。我嘗試在SELECT子句中添加另一列,以將COUNT列中的值[SUM(COUNT(ColumnName))中的值加總爲'YearlyCount'],但是SQL不喜歡那種語法。如果有辦法做到這一點,請讓我知道。 – user961714 2012-02-23 23:45:33

+0

如果你發佈你的代碼,它可能會幫助更多。從結果中很難看出。我的一般策略是爲所有可能的代碼創建一個表格,然後將結果與該結果相結合,對於任何缺失的月份結果,將0或null留空。 – Vlad 2012-02-24 13:04:49

1

這可以在SQL或SSRS做 - 做它的SQL(由克里斯·拉塔描述)應該更簡單,更高效,但如果該選項不可用,在這裏是如何做到這一點在SSRS:

  1. 添加一個4列的表格報告,用適當的數據集。
  2. 在您的CODETEXT列中添加一個組(包括組頁腳)到表中。
  3. 添加您CODETEXT值組頁腳。
  4. 刪除(或隱藏)報表上的詳細信息部分行。
  5. 輸入下列表達式進組尾行本年度至今列在相應的單元格:

    =Sum(Fields!COUNT.Value)

  6. 輸入下列表達式成組尾行中的相應單元格本月至今柱:

    =Sum(iif(MonthName(DatePart("m",Now()))=Fields!MONTH.Value,Fields!COUNT.Value,0))