1

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

这意味着对于 BusinessEntity 和 EventType 的每个组合,都有一个电子表格,每个电子表格包含 0+ 行活动参与者。在我的特定场景中,我可能有这样的电子表格:

  • #1 - BusinessEntity ABC,EventType 简报
  • #2 - BusinessEntity XYZ,EventType Briefing
  • #3 - BusinessEntity ABC,EventType 研讨会
  • #4 - BusinessEntity XYZ,EventType Workshop

(我的报告针对一个存储过程运行,该过程提取了大部分连接的数据,因此报告本身几乎没有进行数据操作。)

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

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

因此,如果电子表格#A2 没有包含 TechnicalCenter 的行,那么我想隐藏该电子表格上的 Technical Center 列。

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

我希望我说得通。在此先感谢,请提出问题,以便我可以填补我确定我已经离开的空白。

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

好的,感谢使用Scopewith的指针Count。我可以看到这将如何工作,但还没有完全实现。当我用这个表达式运行报告时

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

这让我很高兴。

然后我尝试应用相同的逻辑来隐藏我的列。我根据此表达式将列可见性设置为显示/隐藏:

=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)

但是,如果我尝试将相同的表达式应用于列可见性,则会收到范围参数错误。所以我对自己说,我该如何解决这个收容令问题?

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

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

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

如何指定范围应该是单个选项卡的输出,该选项卡是与分页符组合的组的结果?我如何绕过这个要求:“当内置函数声明您必须指定当前范围或包含范围时,您不能指定比当前范围更低或在包含顺序上相同级别的范围。”

谢谢!

4

1 回答 1

0

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

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

我打开了一个新案例,其中有一个更清楚的条件可见性问题示例,这是我问题的根源: 根据显示在单个选项卡表上的组的值有条件地隐藏列

于 2012-12-06T20:52:48.483 回答