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