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

Jen*_*niQ 5 visibility scope reporting-services ssrs-2008

此问题是关于如何根据显示在单个选项卡表上的组的值有条件地隐藏列.这是这个问题的后续问题,但它确实是独立的.我正在使用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  |
Run Code Online (Sandbox Code Playgroud)

在我的报告中,我使用的是表格,而不是矩阵.我有一个最里面的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)
Run Code Online (Sandbox Code Playgroud)

在标签2和标签4上,我想隐藏"位置"列,因为我感觉很愚蠢,显示一个完全空白的列,然后根据事件类型显示无意义.我尝试通过将列可见性设置为来执行此操作

=IIF(CountDistinct(Fields!EventLocation.Value, "GrpbyOwnerandType")= 0, True, False)
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Jen*_*niQ 0

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

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

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