在SSRS 2005中显示/隐藏行组而不进行子目录调整?

时间:2011-05-05 17:16:09

标签: asp.net reporting-services reportingservices-2005

我在SSRS 2005中有一个矩阵报告,行中有一些部分。想象一下左边的一系列

1    $100
2    $400
3    $150
4    $650
5    $500
6    $400
7    $900

我希望能够隐藏一些行。例如,第7行是第5行和第6行的总和,所以我想在第7行旁边+/-显示/隐藏第5行和第6行。(请注意,我不计算这些总数,它们已完成由会计师,我必须使用数据库中的值,而不是自己计算总数。)

现在我在数据库中有这个“父/子”关系,我可以在行上添加它作为一个组

       4  1    $100
       4  2    $400
       4  3    $150
   -   4  4    $650
       7  5    $500
       7  6    $400
   -   7  7    $900

然后我可以将切换添加到第一列,但是我不希望在卷起时对这些值进行小计。我只想让第5/6行消失,只显示第7行。对SSRS有点新意,所以任何建议都会很棒。

所以一组切换:

   +   4  4    $650
       7  5    $500
       7  6    $400
   -   7  7    $900

其他gorup切换:

   +   4  4    $650
   +   7  7    $900

       4  1    $100
       4  2    $400
       4  3    $150
   -   4  4    $650
   +   7  7    $900

如何实现这一点,以便我不重新计算父行(本例中的第4行和第7行)?

如果有一个可以在ASP.NET中实现此功能的免费Web控件,我也很高兴听到它。我有一种沉闷的感觉,我将不得不自己写一些AJAX来实现这一目标。我有点想知道是否有一些黑客可以在报告中嵌入一些可以实现此目的的javascript。

2 个答案:

答案 0 :(得分:1)

实际上你有两个问题:

  1. 报告来自数据库的小计,而非计算小计
  2. 动态隐藏和公开详细信息行
  3. 您可以使用标准表格报告执行此操作,如下所示:

    1. 报告数据库小计
    2. 您可以在纯SQL中执行此操作(D是详细信息表,G是组表):

      SELECT D.ParentId, D.ChildId, 
      D.Description as DetailDescription, D.Amount AS DetailAmount, 
      G.GroupDescription, G.GroupAmount
      FROM MyTable D INNER JOIN 
          (SELECT ChildId AS GroupId, Max(Description) as GroupDescription, MAX(Amount) AS GroupAmount 
          FROM MyTable 
          GROUP BY ChildId 
          WHERE ChildId IN (SELECT DISTINCT ParentId FROM MyTable)) G ON GroupId = D.ParentId
      WHERE D.ChildId NOT IN (SELECT DISTINCT ParentId FROM MyTable)
      

      所以我们正在做的是获取所有不是小计的行(即ChildId不是ParentId的行),并且在嵌套选择中我们也将小计放在每个细节行上。现在,在表格中的组中,我们可以简单地从数据集中报告GroupTotal字段,而不是实际的小计。

      1. 动态隐藏和显示行
      2. 在表格中创建一个群组。这里是您将GroupTotal报告为字段的地方,而不是总计(尽管如果您愿意,可以使用MAX或MIN)。

        右键单击详细信息组,然后单击“编辑”。在“可见性”选项卡上,选中“可见性可以由另一个报表项切换”复选框,然后选择上面组中第一个文本框的文本框名称。根据需要将初始可见性设置为可见或隐藏。

        离开我的头顶并且未经测试但你应该明白这一点。

        编辑以更好地解释布局(注意:上面的SQL也经过编辑以显示说明)

        我在这里使用的是表格,而不是矩阵。

        布局如下所示(第一列显示您所在的组):

        Table Header                 Parent Id               Child Id   Description                                                    Amount
        Group1 Header   =Fields!ParentId.Value                          =Last(Fields!GroupDescription.Value)   =Max(Fields!GroupAmount.Value)
        Details Group   =Fields!ParentId.Value  =Fields!ChildId.Value   =Fields!DetailDescription.Value            =Fields!DetailAmount.Value
        

        在ParentId上将Group1设置为Group,仅显示标题(无页脚),该组上的ParentId Textbox称为ParentIdGroup。详细信息组已选中“可以通过其他项目切换可见性”,并且“报告项目”设置为ParentIdGroup。

        我现在已经模拟了这个报告,它可以像你描述的那样工作 - 看起来像小计实际上是数据库字段,而描述显示在组行上。

答案 1 :(得分:0)

我能够通过将数据字段值的表达式设置为Last来实现此目的,因为在我的情况下,小计始终是行序列的最后一行。每当行展开时,Last都显示每行的值,因为每一行都是它自己的组。然后每当我使用PatenLineNumber切换时崩溃,则Last显示该父行的值,因为它显示为组中的最后一行。

所以我的矩阵报告是这样的:

                                            Amount
ParentLineNumber       ChildLineNumber      =Last(Fields!Amount.Value)

我仍然有一个单独的问题,但这是一个单独的问题。