2009-02-10 70 views
0

我想在SQL Server Reporting Services 2008中有一個圖表顯示頂部X值和總和/剩下的其他值。這可能沒有在T-SQL中進行分組?有沒有辦法讓SSRS 2008圖表顯示頂部X結果和其他組合/其餘部分?

例子:

查詢帶回來自美國50個州的總銷售額。我想向銷售額最高的五個州展示其餘的所有其他州,並將它們的銷售總額分組爲「所有其他國家」。

用戶將能夠過濾任意數量的狀態,並且我需要圖表顯示所選中的前5個。

我想爲所有狀態緩存報表的執行情況並從快照中生成報表。

回答

1

最簡單的方法是在SQL本身。鑑於您想要從緩存數據運行報告,這不是一個選項。

下一個明顯的方法是在自定義代碼中執行此操作。你可能會做如下操作:

右鍵單擊佈局空間選擇屬性,然後單擊代碼選項卡。把下面的代碼:

Public Dim RowCount As Integer = 0 
Public Dim Top5Sum As Double = 0 

Public Function HideThisRow(Value As Double) As Boolean 
    RowCount = RowCount + 1 
    if RowCount > 5 Then 
    Return True 
    Else 
    Top5Sum = Top5Sum + Value 
    Return False 
    End If 
End Function 

在細節帶,使兩個細節行 - 第一個是你的正常行,你如果是本表達這個細節行的可見性隱藏屬性和的字段:

=Code.HideThisRow(Fields!YourFieldToSum.Value) 

這將執行上面,因爲它準備除頂部5.它還具有頂部5值求和的副作用以顯示每個細節行和隱藏所有行的代碼。

您的詳細區域中的第二行是我們將顯示「所有其他國家」部分的位置,因此請在該州的名稱列中以及您顯示的列中爲其指定「所有其他國家」現場有表達:

=Sum(Fields!YourFieldToSum.Value) - Code.Top5Sum 

我們還可以隱藏該行所有行除了顯示的最後一行(第5行),所以我們做了可視性 - 隱藏屬性是下面的表達式:

=IIF(RowNumber(Nothing) = 5, False, True) 

這有效地隱藏了所有行的這一行除了要顯示的最後一行(第5行)。

你會認爲你可以在報告的頁腳中做這件事,而不是做所有這些隱藏的行,但是有一個陷阱 - 你無法預測報告將被構建的順序,從而訂單在其中您的代碼將執行。真。

如果您剛剛在頁腳而不是隱藏詳細信息行中進行了計算,那麼Top5Sum變量的值將被適當計算。但是,可見性隱藏功能將不起作用(至少在我的SSRS版本中 - 它在生成準確頁腳之前在我的測試中生成了17個空白頁)。但是,假設你要計算的是每個國家都有的百分比,所以你添加以下表達式爲您詳細介紹頻段:

=Fields!YourFieldToSum.Value/SUM(Fields!YourFieldToSum.Value) 

這是做一個完全合理的事情,但是這完全改變了順序計算報告 - 在這種情況下,詳細波段需要知道場的總和,因此在詳細波段之前計算頁腳波段,這意味着在計算頁腳波段時Top5Sum變量爲零,而您的計算不起作用。但是,Detail行現在已被適當隱藏。

這就是爲什麼你需要在細節帶中進行計算並隱藏所有其他結果,而不是在頁腳帶中這樣做似乎是合乎邏輯的。

相關問題