根据显示在单个选项卡表上的组的值有条件地隐藏列

时间:2012-12-06 20:45:04

标签: reporting-services scope ssrs-2008 visibility

此问题是关于如何根据显示在单个选项卡表上的组的值有条件地隐藏列。这是this question的后续内容,但它实际上是独立的。我正在使用SSRS 2008 R2。

我的数据集由存储过程提供支持,并返回与事件相关的数据。

EventID | Event Owner | Event Type | Location
E001    | Bob         | Meeting    | Conf Rm A
E002    | Jane        | eTraining  | 
E003    | Bob         | Training   | Conf Rm B
E004    | Phil        | eTraining  | 
E005    | Jane        | Meeting    | Conf Rm B
E006    | Phil        | Meeting    | Conf Rm A
E007    | Jane        | eTraining  |

在我的报告中,我使用的是表格,而不是矩阵。我有一个最里面的Detail行,其中包含有关该事件的详细信息,包括EventID和Location as columns。 我将数据分组有几个属性。 详细信息行和标题行具有按行事件所有者和事件类型(GrpbyOwnerandType)分配的单个行组。组的每个实例之间都有一个分页符,这会导致结果显示在报表服务器上的不同页面上,并在下载到Excel时显示在单独的选项卡上(最终目标)。因此,Excel中的输出如下所示:

Tab 1 has E001 (Bob, Meeting) 
Tab 2 has E002 & E007 (Jane, eTraining)
Tab 3 has E003 (Bob, Training)
Tab 4 has E004 (Phil, eTraining)
Tab 5 has E005 (Jane, Meeting)
Tab 6 has E006 (Phil, Meeting)

在选项卡2和4上我想隐藏“位置”列,因为我感觉很愚蠢,显示一个完全空白的列,然后根据事件类型显示无意义。我尝试通过将列可见性设置为

来执行此操作
=IIF(CountDistinct(Fields!EventLocation.Value, "GrpbyOwnerandType")= 0, True, False)

你可以看到我在这里只指定了范围(GrpbyOwnerandType)。如果我没有指定范围,那么测试将明显失败,因为数据集中至少有一行EventLocation不是NULL。但是,当我在IIF条件范围内指定组时,报告预览将失败,并显示以下错误:

  

Tablix'X'的隐藏表达式有一个对聚合函数无效的作用域参数。 scope参数必须设置为一个字符串常量,该常量等于包含组的名称,包含数据区域的名称或数据集的名称。

我在列的隐藏属性上使用了相同的表达式,在这种情况下,报告没有错误输出,但我在选项卡2和选项卡4上留下了一个丑陋的白色列因为没有数据。

那么,有什么方法可以隐藏一些但不是全部的工作表上的位置列吗?

2 个答案:

答案 0 :(得分:1)

如果您将表达式调整为:

= IIF(CountDistinct(Fields!EventLocation.Value)= 0, True, False)

...然后范围将自动评估,并且应该为您提供您所追求的目标。

答案 1 :(得分:0)

我在MSDN上问了这个问题,并被告知这是不可能的。我相信这是真的。

我最终创建了两个不同的表,一个包含我想要的列,另一个没有列,我在每个表中过滤数据以包含支持的记录。

http://social.msdn.microsoft.com/Forums/en-US/sqlreportingservices/thread/ef1ddac4-329f-43eb-b3fd-c226e7624ff6