SSRS - 按参数值切换子报告

时间:2011-11-15 10:07:39

标签: reporting-services

要求如下:

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

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

1 个答案:

答案 0 :(得分:1)

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

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

  1. 添加您的参数,我们称之为GroupingOrder,并对您的选项进行硬编码:例如,为Country > City > Department的标签设置值为1,为Country > Department > City设置值为
  2. 在SSRS中向数据集添加两个计算字段。 (右键单击数据集名称并选择“添加计算字段...”。将一个名称命名为“MiddleGroupName”,将另一个名称命名为“InnerGroupName”。将字段源设置为这样的公式,用于MiddleGroupName:

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

  3. 在报告中将这些计算字段用作普通组。

  4. 对于奖励积分,请根据您的参数设置列标题:中间组的列标题可以是:

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

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

    但在这种情况下,我会避开子报告。它们往往会损害性能并导致调试困难。