如何让子组跨越三列?

时间:2016-12-09 21:00:17

标签: sql-server reporting-services

我正在尝试做什么

在我的报告中,我试图在Tablix中获取一些基本数据。在此Tablix中,其中包含一个主摘要行和详细信息行。我想要做的是将细节放在子行中,但分成三列。

例如,我的tablix现在看起来像这样

Row11| Row12| Row13 |
1    | 5    |   4   |
 | Column1 | Column2|
 |   1     |    4   |
 |   2     |    5   |
 |   3     |    6   |
2    | 20   |   25  | 
  Column1  Column2  |
 |   7     |   8    |
 |   9     |   5    |
 |   3     |   6    |

(这只是一个演示表。我的应用程序中的列数不一定是这个数字,无论如何都应该是无关紧要的)

我希望它看起来像:

Row11| Row12| Row13 |
1    | 5    |   4   |
 | Column1 | Column2| Column1 | Column2| Column1 | Column2|
 |   1     |    4   |   2     |    5   |   3     |    6   |
2    | 20   |   25  | 
 | Column1 | Column2| Column1 | Column2| Column1 | Column2|
 |   7     |   8    |   9     |   5    |   3     |   6    |

我只想将详细信息表分成三列。我已经尝试了各种方法,但仍然存在。

我尝试了哪些方法?

  1. 附加子报告方法。我附上了一份子报告,并将报告分成三个单独的表格,并按此顺序拆分列。 这可行,但尝试获取大量数据时速度非常慢。真的不想这样做。
  2. 提到的方法here。没用。
  3. 我一直在尝试SQL本身,但SQL在这里看起来不像是一个问题。
  4. 尝试使用Matrix代替tablix,试图超越我的极限,但没有成功。
  5. 附注:

    如果重要,我正在使用SSRS SDK for PHP并从报表服务器抓取PDF并使用Visual Studio设计报表。

    这看起来很简单,但我坚持这一点。以前有这种情况吗?

    如果您需要更多说明,请与我们联系。

4 个答案:

答案 0 :(得分:1)

方法1:主tablix =具有两个细节行的三列。在第二个细节行中将三列合并在一起。为详细信息创建一个新的Tablix,并将其放在合并的详细信息单元格中。

方法2:主tablix =六列和两个细节行。在第1个细节行合并单元格1/2,3 / 4和5/6。

答案 1 :(得分:1)

创建三个明细表,调整每个行中显示的行,并将它们放在列表中。

此解决方案的工作原理是您的原始数据如下所示: Table of raw data

添加table报表项并将Column1和Column2数据添加到其中,将分组保留为详细信息。右键单击详细信息行,然后转到“行可见性”。

Detail table and Row Visibility

将其切换为“根据表达式显示或隐藏”,并添加以下表达式:

=IIF(RowNumber("tblFirstColumn") MOD 3 = 1, False, True)

这将只显示该表中的第一,第四,第七等记录。在第一个表旁边粘贴此表的两个副本,并在每个表上调整行可见性表达式:

=IIF(RowNumber("tblSecondColumn") MOD 3 = 2, False, True)
=IIF(RowNumber("tblThirdColumn")  MOD 3 = 0, False, True)

接下来添加List项。将列表的行分组更改为按行11分组,将每个行字段添加到此列表的顶部(作为文本框或未分组的表),并将三个详细信息表移动到列表的底部。

Completed design view Completed preview

这应该比使用子报告更好。据我所知,在使用子报表时,将使用该子报表的每个实例查询数据集。在一个报告中使用所有设计,查询应该只运行一次。

答案 2 :(得分:1)

我不得不一次解决同样的问题,我这样做是通过"在TABLIX中插入TABLIX"。我相信,如果你按照下面的链接,shuold解决你想要的:

http://www.sqlcircuit.com/2012/03/ssrs-how-to-show-tablix-inside-tablix.html

我是否在我的报告中已经完成了增加嵌套Tablix的宽度以使其不影响主tablix上的宽度: 1)在插入的tablix上面的行中,我创建了一个列并将其保持为空,并将其下面的单元格合并到嵌套Tablix所在的位置。 2)现在你可以增加空列的大小(使边框不可见)到你希望插入的TABLIX的宽度。

希望这会有所帮助。

答案 3 :(得分:1)

对于它的价值(我看到你已经接受了答案),我认为如果你愿意的话,这可以主要在SQL中完成。

假设您的原始数据如下所示:

/-------------------------------------------\
| Row11 | Row12 | Row13 | Column1 | Column2 |
|-------+-------+-------+---------+---------|
|   1   |   5   |   4   |    1    |    4    |
|   1   |   5   |   4   |    2    |    5    |
|   1   |   5   |   4   |    3    |    6    |
|   2   |  20   |   25  |    3    |    6    |
|   2   |  20   |   25  |    7    |    8    |
|   2   |  20   |   25  |    9    |    5    |
\-------------------------------------------/

让我们创建演示数据来说明:

CREATE TABLE data (
    Row11 INT,
    Row12 INT,
    Row13 INT,
    Column1 INT,
    Column2 INT
)

INSERT INTO data
SELECT 1,5,4,1,4
UNION
SELECT 1,5,4,2,5
UNION
SELECT 1,5,4,3,6
UNION
SELECT 2,20,25,7,8
UNION
SELECT 2,20,25,9,5
UNION
SELECT 2,20,25,3,6

您可以像这样聚合每个摘要和详细信息行:

SELECT DISTINCT d.Row11, 
                d.Row12, 
                d.Row13,
                dfirst.Column1,
                dfirst.Column2,
                dsecond.Column1,
                dsecond.Column2,
                dthird.Column1,
                dthird.Column2
FROM data d
CROSS APPLY
(
    SELECT TOP 1 Column1, Column2
    FROM data d1
    WHERE d1.Row11 = d.Row11 AND d1.Row12 = d.Row12 AND d1.Row13 = d.Row13
    ORDER BY 1,2
) dfirst
CROSS APPLY
(
    SELECT Column1, Column2
    FROM
    (
        SELECT Column1, Column2, ROW_NUMBER() OVER (ORDER BY Column1, Column2) AS rownumber
        FROM data d1
        WHERE d1.Row11 = d.Row11 AND d1.Row12 = d.Row12 AND d1.Row13 = d.Row13
    ) drows
    WHERE rownumber = 2
) dsecond
CROSS APPLY
(
    SELECT TOP 1 Column1, Column2
    FROM data d1
    WHERE d1.Row11 = d.Row11 AND d1.Row12 = d.Row12 AND d1.Row13 = d.Row13
    ORDER BY 1 DESC,2 DESC
) dthird

结果如下:

/-----------------------------------------------------------------------------------\
| Row11 | Row12 | Row13 | Column1 | Column2 | Column1 | Column2 | Column1 | Column2 |
|-------+-------+-------+---------+---------+---------+---------+---------+---------|
|   1   |   5   |   4   |    1    |    4    |    2    |    5    |    3    |    6    |
|   2   |  20   |  25   |    3    |    6    |    7    |    8    |    9    |    5    |
\-----------------------------------------------------------------------------------/

Row11Row12Row13的SSRS报告表格中对此进行分组应该相对简单,将Row11,{{{{ 1}}和Row12进入Group Header行,并将所有6 Row13Column1值的值放入详细信息行:

设计

Design

结果:

Results

注意:这仅适用于每个Column2Column1Column2元组的3 {或更少} Row11 / Row12个值对。