SSRS:如何仅在某些分组工作表上隐藏列

时间:2012-11-16 23:52:31

标签: reporting-services hide

我有一份报告,报告参加活动的人。每行代表一个参与记录,报告输出被分成单个电子表格,以便每个电子表格代表BusinessEntity和EventType的事件参与者。这是通过具有以下分组的单个组来实现的: BusinessEntityName上的组 然后在EventTypeCode上分组 并且每个组的实例之间都有分页符。

这意味着,对于BusinessEntity和EventType的每个组合,都有一个电子表格,每个电子表格包含0行以上的事件参加者。在我的特定情况下,我可能有这样的传播表:

  • #1 - BusinessEntity ABC,EventType Briefing
  • #2 - BusinessEntity XYZ,EventType Briefing
  • #3 - BusinessEntity ABC,EventType Workshop
  • #4 - BusinessEntity XYZ,EventType Workshop

(我的报告针对的是存储过程,该存储过程主要引入连接数据,因此报告本身的数据操作很少。)

对于每一行,都有一个名为TechnicalCenter的字段,该字段可能为NULL,也可能不为NULL。事件可能与TechnicalCenter相关联,如果是,我想显示该信息。继续上面的示例,数据可能如下所示:

  • #1有10位与会者参加2次会议,其中为每个活动分配了一个技术中心
  • #2有5位与会者参加1次会议,其中没有为此次活动分配技术中心

因此,如果电子表格#A2没有具有TechnicalCenter的行,那么我想隐藏该电子表格上的技术中心列。

我想这是一个很长的例子,如果我在该组中显示的特定集合中没有数据,是否可以隐藏列?我知道我可以使用NOROWS或IF(COUNT)有条件地隐藏列,但我不确定如何在单个组/电子表格中的有限数据集中执行此操作。我也知道如何根据参数选择隐藏数据,但这是不同的。

我希望我有意义。在此先感谢,请提出问题,以便填补我确定已离开的空白。

~~~~~~~~~~~~~~

好的,感谢指向Scope使用Count的指针。我可以看到它是如何工作的,但还没到那里。 当我使用此表达式运行报告时

=Count(Fields!Center.Value, "BusinessEntityName") 在详细信息行中,显示了包含TechnicalCenter的详细行数的正确计数值。 (其中Center.Value是技术中心的名称,BusinessEntityName实际上是我的行组的名称,它由BusinessEntity和EventType分组。)

这让我很开心。

然后我尝试应用相同的逻辑来隐藏我的列。我将Column Visibility设置为基于以下表达式显示/隐藏:

=IIF(Count(Fields!Center.Value, "BusinessEntityName")=0, "True", "False")

当我尝试预览报告时,出现错误: Tablix''的隐藏表达式具有对聚合函数无效的作用域参数。范围参数必须设置为字符串常量,该常量等于包含组的名称,包含数据区域的名称或数据集的名称。

我无法理解错误,因为我以为我使用的是包含组的名称BusinessEntityName。有人能帮我解释一下我明显缺少的逻辑吗?

~~~~~~~~~~~~~~~~~~~

http://msdn.microsoft.com/en-us/library/ms159673(v=sql.100).aspx

我想了解有关范围的更多信息,我认为问题在于“您必须使用默认范围或在包含顺序中指定更高的范围。”所以,我正在尝试应用包含顺序(行组)中的范围,而不是我应用它的数据(数据区域,我认为)。

我可以使用此表达式有条件地隐藏要隐藏的列中的单元格: =IIF(CountDistinct(Fields!Center.Value, "BusinessEntityName") < 1, True, False)

但是,如果我尝试将相同的表达式应用于列可见性,则会得到scope参数错误。所以我告诉自己,我该如何修复这个收容令问题呢?

我尝试将范围更改为数据集名称(EventMemberAttendance)。列可见性基于以下表达式:

=IIF(CountDistinct(Fields!Center.Value, "EventMemberAttendance") < 1, True, False)

当我运行报表预览时,我不再收到错误,并且如果整个数据集的中心值为空,则该列实际上是隐藏的。但是,如果整个数据集中至少有一个中心值,则该列在每个工作表上都可见,而不仅仅是中心数据所在的工作表。 我也尝试将范围更改为tablix本身,其结果与刚刚描述的类似。

如何指定范围应该是单个选项卡的输出,该选项卡是组与分页符组合的结果?如何解决此要求:“当内置函数声明必须指定当前作用域或包含作用域时,不能指定在包含顺序中比当前作用域更低或处于同一级别的作用域。”

谢谢!

1 个答案:

答案 0 :(得分:0)

因为这个问题开头很复杂并且在底部添加了更复杂的注释,我正在考虑这个问题是关于如何编写VB表达式来确定给定的一组结果中是否存在值。 关于Scope的说明非常有用,并引导我学习如何写这个:=Count(Fields!Center.Value, "GroupName")

因此,我认为这个问题得到了回答。

我打开了一个新案例,其中有一个更明确的条件可见性问题示例,这是我问题的根源: Hide a column conditionally based on the values of a group that display on a single tab sheet