5

这个问题是关于如何根据显示在单个选项卡上的组的值有条件地隐藏列。它是对这个问题的后续,但它确实是独立的。我正在使用 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 作为列。我根据几个属性对数据进行分组。明细行和标题行有一个单独的行组,这些组按事件所有者和事件类型 (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 上,我想隐藏 Location 列,因为我觉得显示一个完全空白的列很傻,在给定事件类型的情况下没有意义。我尝试通过将列可见性设置为

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

您可以看到我在此处仅将范围指定为组 (GrpbyOwnerandType)。如果我不指定范围,那么测试显然会失败,因为数据集中至少有一行 EventLocation 不为 NULL。但是,当我在 IIF 条件范围内指定组时,报告预览失败并出现以下错误:

tablix 'X' 的隐藏表达式具有对聚合函数无效的范围参数。范围参数必须设置为字符串常量,该常量等于包含组的名称、包含数据区域的名称或数据集的名称。

我在该列的隐藏属性上使用了相同的表达式,在这种情况下,报告不会出错,但我在 Tab 2 和 Tab 4 上留下了一个难看的白色列,因为没有数据。

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

4

2 回答 2

1

如果您将表达式调整为:

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

...然后范围将被自动评估,并应该给你你所追求的。

于 2012-12-10T05:16:33.097 回答
0

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

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

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

于 2012-12-19T17:50:38.867 回答