Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reporting services 如何将此SSRS报告分组?_Reporting Services_Ssrs 2008_Ssrs 2008 R2_Ssrs Tablix_Ssrs Grouping - Fatal编程技术网

Reporting services 如何将此SSRS报告分组?

Reporting services 如何将此SSRS报告分组?,reporting-services,ssrs-2008,ssrs-2008-r2,ssrs-tablix,ssrs-grouping,Reporting Services,Ssrs 2008,Ssrs 2008 R2,Ssrs Tablix,Ssrs Grouping,我有一份SSRS报告。看起来是这样的: CREATE TABLE #Report (A int, B int, C int, D int, E int, F int, G int) 其定义如下: CREATE TABLE #Report (A int, B int, C int, D int, E int, F int, G int) 正如你所看到的,只是a到G列中的一组数字。这些数字由a、B、C组成。对于报告中的每一行,D、E、F、G列是我的详细数据。问题是,对于每个组(我的意思是按A

我有一份SSRS报告。看起来是这样的:

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

其定义如下:

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

正如你所看到的,只是a到G列中的一组数字。这些数字由a、B、C组成。对于报告中的每一行,D、E、F、G列是我的详细数据。问题是,对于每个组(我的意思是按A、B、C分组),我需要D&E列的所有行。对于F&G列,我不想要重复的。例如,对于第一组,我们可以看到F&G列有重复项,数据20,30出现两次。基本上我想要的是这样的(注意,与前面提到的报告结果相比,重复项被删除了):


看一看黄色背景的数据,这就是我想要删除重复项的部分。我不知道如何在SSR中实现这一点。希望有人能给我指出正确的方向。你可以下载我正在测试的报告。创建这个简单的报告是为了隔离我在更复杂的报告中遇到的问题。我无法改变逻辑,必须找到一种方法来实现这一点。提前谢谢。

这是我的建议。我假设你想要的是问题中最后一张截图

我拆下了你提供的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
所有这一切真正做的就是使用
选择进入
来创建一个包含原始结果的临时表。然后,我将结果拆分,然后
UNION
将所有结果重新组合在一起,只需要将我需要的列堆叠在彼此的顶部;也可以在希望消除重复的位置使用
独特的

要在您提供的RDL中使用它,您必须从Tablix中删除F和G列,并用它替换SQL。这就是Tablix在设计模式下的外观

现在,您提到有一个不能更改的存储过程。要将存储过程的结果放入临时表,需要做两件事

首先,在程序结果处以相同形状创建临时表。这些表实际上不必是临时表;您可以将其设置为非临时表,稍后也可以将其删除。在temp table的情况下,DDL看起来像这样:

CREATE TABLE #Report (A int, B int, C int, D int, E int, F int, G int)
然后将存储过程的结果插入该临时表

INSERT INTO #Report
EXEC usp_MyStoredProcedure
不,如果您想知道的话,没有简单的存储过程
选择进入
选项。很多人都希望有

因此,如果这是最终的结果,那么下面是报表的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
这是报表在预览模式下的外观:


希望这对您有所帮助。

如果您需要基于SSRS而不是SQL的解决方案,您可以使用相邻的组分别控制两组后续数据

  • 在您的行组中,右键单击您的
    (详细信息)
    组,然后选择
    添加组>在…
    之后相邻
  • 在出现的Tablix Group窗口中,分组依据
    [F]
  • 右键单击新的
    (F)
    行组并转到组属性
  • 添加一个额外的组表达式,并在
    [G]
    上分组。(您可能还希望将组的名称更改为FG)
  • 将报告中的F和G字段移动到新行(在FG组中),并删除所有空列
“详细信息”组仍将显示数据集中的每一行,即D和e的每个实例。FG组仅在每个A/B/C组中显示F和G的每个不同组合一次


你说你不能改变逻辑;什么逻辑你不能改变?你的手绑在哪里?@R.Richards我的意思是我不能更改数据库中生成报表数据的存储过程。我在问题中使用的报告只是我实际报告的简化版本。我尝试将黄色背景部分作为子报表,它使用分组列的值作为子报表的参数。它实际上是有效的,但性能是不可接受的,因为每个组都会执行子报告。明白了。真的吗?将当前存储过程的输出插入到临时表中,然后在将数据输出到报表之前处理数据,使其到达需要的位置,怎么样?可能的我已经做到了;我并不总是喜欢它,但它是有效的。如果我正确理解了您的问题,您将无法做到这一点,您必须更改您的QueryTanks@oupepasa。您是否知道如何更改数据形状以及如何实现它?我现在不知道。