2012-09-07 67 views
1

最常見的項目我有一個查詢返回以下數據集:我的報告SSRS充分利用數據集中

 
Device | Service 
---------------- 
PC1 | Service1 
PC1 | Service2 
PC1 | Service3 
PC1 | Service4 
PC1 | Service5 
PC1 | Service6 
PC1 | Service7 
PC2 | Service1 
PC2 | Service2 

我有一個表,通過設備組並顯示該服務。但我也想要一張餅圖來顯示五種最常見的服務。

我可以很容易地使用第二個數據集和存儲過程,但我想知道是否會有一種方法來使用這個相同的數據集(數據已被查詢並返回,所以它似乎我認爲這會比在服務器上運行單獨的過程更好)。

任何想法,如果這將是可能的?或者我應該去第二個查詢/存儲過程?

+0

嗨,你可能知道它很容易增加顯示所有的餅圖服務數量來自您現有的數據集。不幸的是,過濾排名前五的數據會更困難,因爲「不支持數據集或數據區域的聚合值過濾」(來自http://technet.microsoft.com/zh-cn/library/ee633648.aspx) – paul

+0

謝謝保羅,那個鏈接很有幫助。顯示所有內容不成問題,有時(大部分情況下)圖表可以包含很多無用的條目。我會留下這個問題,看看有沒有人有任何建議,並在此期間使用單獨的程序。 – Kyle

+0

有一個想法 - 如果你可以在你的SQL查詢中包含'RowNumber()over(按count(*)排序)',那麼你肯定可以在SSRS上過濾 – paul

回答

0

您可以使用嵌套查詢。如果你是從拉動表的名稱叫做「#MYTABLE」,它在你上面的例子返回的兩列,那麼你可以使用

SELECT #MYTABLE.Device, #MYTABLE.Service, NUMBEROFINSTANCES FROM #MYTABLE 
    LEFT JOIN 
     (SELECT SERVICE, COUNT(DEVICE) AS NUMBEROFINSTANCES 
     FROM #MYTABLE 
     GROUP BY SERVICE) AS ABB1 ON ABB1.SERVICE = #MYTABLE.SERVICE 
0

我假設你想擁有每組的次數和只顯示TOP 5.可以使用CTE與COUNT(*)OVERDENSE_RANK()OVER

WITH CTE AS 
(
    SELECT Device, Service 
    , COUNT(Service) OVER (PARTITION BY Device) AS Count 
    , DENSE_RANK() OVER (PARTITION BY Device ORDER BY Service) AS Rank 
    FROM tdevice 
) 
SELECT Count, Rank, Device, Service 
FROM CTE 
WHERE RANK <= 5 

這裏的小提琴:http://sqlfiddle.com/#!3/1f42a/8/