4

我有一個SSRS報告。它看起來像這樣:如何將此SSRS報告分組?

enter image description here

它的定義是這樣的:

enter image description here

正如你可以看到它的不同列只是一堆數字的A到G.這些數字進行分組通過A然後B然後C對於報告中的每一行,列D,E,F,G是我的詳細數據。問題是,對於每個組(我的意思是按A,B,C分組),我需要列的所有行。對於F & G列,我不想重複。例如,對於第一組,我們可以看到對於列F & G存在重複,數據20,3出現兩次。基本上我想是這樣的(注意相比,上述報告結果的重複被拆除):

enter image description here

看看有黃色背景的數據,這就是我要重複刪除的部分。我不知道如何在SSRS中實現這一點。希望有人能指出我正確的方向。你可以在https://www.dropbox.com/s/qxvloaeuj31m0mj/Report1.rdl?dl=1下載我正在測試的報告。這個簡單的報告是爲了隔離我在更復雜的報告中遇到的問題而創建的。我無法改變邏輯,必須找到實現這一點的方法。提前致謝。

+0

你說你不能改變邏輯;你不能改變什麼邏輯?你的手綁在哪裏? –

+0

@ R.Richards我的意思是我無法更改生成報告數據的數據庫中的存儲過程。我在我的問題中使用的報告只是我實際報告的簡化版本。我試圖將黃色背景部分作爲子報告,它使用分組列的值作爲子報告的參數。它實際上有效,但由於子報告將針對每個組執行,因此性能不可接受。 –

+0

明白了。典型的,對嗎?如何將當前存儲過程的輸出插入臨時表中,然後在將數據輸出到報表之前將其處理到需要的位置?可能?我已經做到了;我並不總是喜歡它,但它有效。 –

回答

3

這是我的這個。我假設你想要的大部分都是你在問題中包含的最後一個截圖。

我拉下了你提供的RDL。感謝那!它可以使這種事情更容易。

報告中的SQL是模擬數據,這對我們正在嘗試的內容很有幫助。我假設你從現在獲取數據的存儲過程給你類似的東西。我對將結果放入臨時表中進行了處理,更改/整形數據,然後將其返回給報告。這就是我在這個答案中使用的機智。

以下是RDL中更新的SQL,爲簡潔起見,省略了幾行。

SELECT * 
INTO #Report 
FROM (VALUES(1,4,1,1,10,20,30), 
(1,4,1,2,11,20,30), 
… 
(22,666,7,14,23,150,6) 
) AS t(A, B, C, D,E,F,G); 

SELECT A.A, A.B, A.C, A.D, A.E -- selecting columns A thru E 
FROM #Report A 

UNION ALL 

SELECT DISTINCT B.A, B.B, B.C, B.F, B.G -- union in columns F and G 
FROM #Report B 
ORDER BY 1, 2, 3 

DROP TABLE #Report 

所有這些的確是使用SELECT INTO創建一個包含原始結果的臨時表。然後,我將結果拆分出來,然後將所有的結果重新排列在一起,只有我需要的列彼此堆疊在一起;也使用DISTINCT您想擺脫重複的位置。

要在您提供的RDL中使用此功能,您必須從Tablix中刪除F和G列,並用此替換SQL。這就是Tablix在設計模式下的樣子。

enter image description here

現在,你提到有,你不能改變一個存儲過程。要將存儲過程的結果存入臨時表,您需要做2件事。

首先,根據過程的結果創建相同形狀的臨時表。這些表格並不一定是臨時表格;你可以將它作爲非臨時表,並在稍後放置它。在臨時表的情況下,DDL會是這個樣子:

CREATE TABLE #Report (A int, B int, C int, D int, E int, F int, G int) 

然後插入存儲過程的結果到該臨時表。

INSERT INTO #Report 
EXEC usp_MyStoredProcedure 

沒有,有沒有簡單的SELECT INTO選項與存儲過程中,如果你想知道。 人們希望有很多

所以,如果這是您最終走向的方式,那麼報告的SQL可能就是這樣。

CREATE TABLE #Report (A int, B int, C int, D int, E int, F int, G int); 

INSERT INTO #Report 
EXEC usp_MyStoredProcedure; 

SELECT A.A, A.B, A.C, A.D, A.E -- grabbing columns A thru E 
FROM #Report A 
UNION ALL 
SELECT DISTINCT B.A, B.B, B.C, B.F, B.G -- union in columns F and G 
FROM #Report B 
ORDER BY 1, 2, 3 

這是報告會看起來像在預覽模式:

enter image description here

希望這有助於你出去。

2

如果您需要基於SSRS的解決方案而不是SQL解決方案,則可以使用相鄰的組分別控制後續的兩組數據。

  • 在你行組,您(Details)組右鍵單擊並選擇Add Group > Adjacent After...
  • 在出現的Tablix組窗口中,按組劃分[F]
  • 右鍵單擊新的(F)行組,然後轉到組屬性。
  • 添加一個額外的組表達式,並在[G]上分組。 (您可能還想將組的名稱更改爲FG)。
  • 將報告中的F和G字段移至新行(在FG組中),並刪除所有空列。

細節組仍將顯示數據集中的每一行,即D和E的每個實例.FG組將僅在每個A/B/C組內顯示每個不同的F和G組合。

Report1 preview with FG group added