2014-05-19 40 views
2

我之前在SSRS報告中使用過the Expand/Collapse feature,但在所有這些情況下,它是Reporting Services正在進行分組和總計。這一次,我在我的數據集查詢中利用GROUPING SETS來讓SQL Server處理聚合數據。我想創建一個具有展開/摺疊功能的報告,但似乎無法使其發揮作用。基於GROUPING SETS的數據集展開 - 摺疊報告

攝製
一起來,這裏有一個方法來得到一個小攝製模仿我的實際情況。使用下面的查詢數據集:

-- Simulating with already denormalized data for sake of simplicity 
DECLARE @Order TABLE (Category VARCHAR(20), Product VARCHAR(20), PersonId INT); 

INSERT INTO @Order 
     (Category, Product, PersonId) 
VALUES ('Fruit', 'Banana', 1) 
     ,('Fruit', 'Banana', 1) 
     ,('Cakes', 'Chocolate', 1) 
     ,('Fruit', 'Apple', 2) 
     ,('Cakes', 'Chocolate', 2) 
     ,('Cakes', 'Berry Jam', 3) 
     ,('Cakes', 'Chocolate', 3) 
     ,('Cakes', 'Chocolate', 3) 
     ,('Fruit', 'Banana', 4) 
     ,('Cakes', 'Berry Jam', 5) 

SELECT Category, 
     Product, 
     COUNT(DISTINCT PersonId) AS NrOfBuyers 
FROM @Order AS o 
GROUP BY GROUPING SETS ((), (Category), (Category, Product)) 

這將提供輸出,(我已經下令手動輸出來說明我的意圖):

Category Product  NrOfBuyers 
-------- -------  ---------- 
Fruit  Apple  1 
Fruit  Banana  2 
Fruit  NULL  3 
Cakes  Berry Jam 2 
Cakes  Chocolate 3 
Cakes  NULL  4 
NULL  NULL  5 

預示什麼我的目標,這是我想要在Excel中獲得的。

預期結果的擴展版本:

expanded report result

預期的結果倒塌版本:

collapsed report result

我試過到目前爲止:

在寫這個問題並創建repro時,我確實意識到我的第一種方法是將我的數據集丟在一個tablix中是錯誤

所以我試圖解決該問題,重新創建適當行組的表矩陣象這樣:

Row Groups pane in SSRS

此外,我需要在左側羣主列保持總行的切換「+」。

然而,這會產生不正確數字爲摺疊版本:

preview of report, collapsed

這些應該是不同的:蛋糕和水果有3個和4個「小計」,分別。

這似乎是與排序行的一個問題,所以我檢查Tablix中的排序和應該爲了行作爲出現在「預期結果」的截圖。事實並非如此,過了一段時間後,我明白了原因:這些團體也進行排序。所以我也爲這些組添加了排序,例如這是一個用於Product行組:

SSRS sorting for Product Row Group

這似乎改善的東西(它的排序位,我需要反正),但它並沒有解決在摺疊狀態下具有錯誤的號碼。

我需要做些什麼才能完成最後一步並完成報告?

回答

2

該方法可以工作,但需要最後一步才能獲取摺疊狀態的正確數字。要知道,從問題的例子這樣的設計:

report design

顯示下面的表達式此單元格:

=Fields!NrOfBuyers.Value 

但這悄悄似乎歸結爲這樣:

=First(Fields!NrOfBuyers.Value) 

在摺疊行的上下文中對其進行評估時。

因此,要「修理」這一點,並獲得正確的子總數的一種方法是該表達式更改爲:

=Last(Fields!NrOfBuyers.Value) 

這將給所需的輸出處於摺疊狀態:

completely collapsed

或半倒塌:

semi-collapsed

最後,展開:

Expanded result