之前我在SSRS报告中使用过the Expand/Collapse feature,但在所有这些情况下, Reporting Services 正在进行分组和总计。这次我在我的数据集查询中使用GROUPING SETS
让SQL Server处理聚合数据。我想创建一个具有群组扩展/折叠功能的报告,但似乎无法使其生效。
摄制
首先,这是一种模拟我的实际情况的小型repro的方法。对数据集使用以下查询:
-- 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中获得的内容。
预期结果的扩展版本:
预期结果的折叠版本:
到目前为止我尝试过的事情:
在撰写此问题并创建repro时,我确实意识到我的第一种方法是将数据集转储到Tablix中错误 。
所以我试图解决的问题是使用正确的行组重新创建Tablix,如下所示:
除此之外,我需要左侧的一列在外面主要组来保持切换" +"总排。
但是,这会为折叠版本提供错误的数字:
这些应该是不同的:蛋糕和水果有一个"小计"分别为3和4。
这似乎是排序行的问题,所以我检查了Tablix的排序,并且应订购行,因为出现在&中#34;预期结果"截图。它没有,稍后我明白了原因:这些小组也做了排序。所以我也为这些群组添加了排序,例如这是Product
行组的一个:
这似乎可以改善一些事情(它确实是我需要的排序位)但是它并没有解决在折叠状态下错误的数字。
完成最后一段时间并完成报告需要做些什么?
答案 0 :(得分:2)
该方法可行,但需要最后一步才能获得折叠状态的正确数字。知道这个设计问题的例子:
显示此单元格的以下表达式:
=Fields!NrOfBuyers.Value
但是这个偷偷摸摸似乎归结为:
=First(Fields!NrOfBuyers.Value)
在折叠行的上下文中进行评估时。
所以,一种方法来修复"这个并获得正确的子总数是将该表达式更改为:
=Last(Fields!NrOfBuyers.Value)
这将在折叠状态下提供所需的输出:
或半崩溃:
最后,扩展了: