2011-11-15 42 views
1

要求如下:SSRS - 切换子报告由参数值

  • 分组层次结构应该是交换的,例如Country > City > DepartmentCountry > Department > City可以由最终用户来选择。
  • 对于最终用户,应该只有一个报告。
  • 用户需要的层次结构可以通过参数值进行选择。
  • 报表数据只能加载一次,因为查询包含CPU密集型计算。

我想通过为每个层次结构添加子报表来完成此操作。由于隐藏的子报表会自动加载,因此我无法切换多个子报表的可见性,或者数据将加载两次。 Subreport的ReportName属性不允许使用表达式。我可以使用自定义代码来解决这个问题,或者什么是可行的解决方案?

回答

1

有很多方法可以做到这一点。

如果数据集嵌入在报表上,那么我认为最简单的方法是:

  1. 添加您的参数,让我们称之为GroupingOrder,并进行硬编码你的选择:都说值设置为1的标签Country > City > Department,值为2 Country > Department > City
  2. 将两个计算的字段添加到SSRS中的数据集。 (右键单击该数据集的名称,然后选择“添加计算字段...”一个命名为“MiddleGroupName”,另一组场源,以公式像这样的MiddleGroupName。“InnerGroupName”:

    =IIF(Parameters!GroupingOrder.Value = 1, Fields!City.Value, Fields!Department.Value)

  3. 使用这些计算领域的正常对照组在报告中

  4. 奖励积分,设置基于参数列标题:为中等组中的列标题可能是:

    =IIF(Parameters!GroupingOrder.Value = 1, "City", "Department")

另一种方法可能涉及将这些计算移入分组逻辑本身。

但在这种情况下,我会避开子报表。他们往往会伤害到性能并造成调试困难。

+0

非常好,得到了这个工作,谢谢:) – Bas