【发布时间】:2014-05-20 01:10:21
【问题描述】:
我之前在 SSRS 报告中使用过 the Expand/Collapse feature,但在所有这些情况下,都是 Reporting Services 进行分组和总计。这一次,我在我的数据集查询中使用GROUPING SETS 让 SQL Server 处理聚合数据。我想为组创建一个具有展开/折叠功能的报表,但似乎无法正常工作。
复制
首先,这是一种模拟我实际情况的小型复制品的方法。对数据集使用以下查询:
-- 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 中获得的内容。
预期结果的扩展版本:
预期结果的折叠版本:
到目前为止我所做的尝试:
在编写此问题并创建重现时,我确实意识到我将数据集转储到 tablix 的第一种方法是错误。
所以我试图解决这个问题是使用适当的行组重新创建 tablix,如下所示:
除此之外,我还需要在左侧在主组的左侧有一列来保持总行的切换“+”。
但是,这为折叠版本提供了不正确的数字:
这些应该不同:Cakes 和 Fruit 的“小计”分别为 3 和 4。
这似乎是 排序 行的问题,所以我检查了 Tablix 的排序,并且 应该 将行排序为“预期结果”中的显示“截图。它没有,过了一会儿我明白了原因:这些组也进行排序。所以我也为组添加了排序,例如这是Product Row Group 的一个:
这似乎改善了一些事情(无论如何它都做了我需要的排序位),但它不能解决折叠状态下的错误数字。
我需要做些什么来完成最后一段并完成报告?
【问题讨论】:
标签: sql sql-server reporting-services