基于文本框或列的可见性的SSRS表达式

时间:2019-05-16 20:56:46

标签: reporting-services

是否可以检查SSRS中文本框的可见性(折叠/展开)并将其用于表达式中?

例如:

=iif(Fields!column1 Is Visible,"Use this label","Use this other label")

我要完成的操作是使列标题的初始值显示一些文本,当用户单击特定值时,将显示详细信息行(这是Tablix),然后标题将更改为其他内容(例如初始报告状态是隐藏明细行,仅显示Tablix成员总数,因此当用户展开以查看明细时,列标题将显示为“ ...总数”。

在通过VBA的MS Access中,我可以检查visible属性并基于此创建代码。到目前为止,在SSRS 2016中还没有找到类似的方法。

尝试了用于可见性的设置表达式以及用于更改文本框值的设置表达式。

=IIF(Fields!accountnum.Value IS NOTHING OR Fields!accountnum.Value = TRUE,"Station #", "Station Count")

无错误消息。我的结果应该是根据明细行是折叠(隐藏)还是展开(可见)更改标题(文本框)值。

4 个答案:

答案 0 :(得分:0)

我认为这在SSRS中是不可能的。您可以根据自己的条件更改列标题文本,例如:如果是(IF),则是标题(A),然后是标题B,否则是标题B。但是您希望基于报表上的某些点击(展开/折叠)来更改列标题,这是不可能的。我的意思是我们需要一些数据来设置条件而不是点击。

但是也许有人对SSRS有更多的经验会带来更多的见识。

答案 1 :(得分:0)

要回答第一个问题:

当然,这是可能的,只是不是您想要的那样。这是一个简单的例子。可以说您的可见度标准是以下表达式:

'Visibility expression
=IIF(Fields!Category.Value = "Visible", False, True)

现在,您无需使用Is Visible标准来检查可见性,只需再次使用相同的表达式即可。像这样:

=IIF(
     IIF(Fields!Category.Value = "Visible", 
         Fale, 
         True) = True, 
 "This one is not visible", 
 "This one is visible")

要回答您的问题:

以您希望的方式进行,这是不可能的。但是您可以使用解决方法来做到这一点。 使用两个选项将用户定义的参数添加到报告中:

  • 显示详细信息
  • 隐藏详细信息

然后将两个标签添加到您的报告中。一个不带详细信息的标签,另一个带要显示的详细信息的标签。 然后转到第一个Tablix Tablix属性>可见性并添加以下表达式:

=IIF(Parameters!VisibilityParameter.Value = "Display details", True, False)

以及其他tablix可见性的表达式:

=IIF(Parameters!VisibilityParameter.Value = "Hide details", True, False)  

现在将基于参数结果显示带有或不带有详细信息的talbix。

答案 2 :(得分:0)

您可以执行此操作,也许它看起来不会太优雅,但是我将向您展示我所做的事情,然后您会看到它是否有用。

注意:使用此方法,您不能直接更改实际的列标题,因为它超出了范围,因此这可能无法满足要求,但您可以对其进行调整。我只是认为这是一个不错的挑战! :)

首先,我得到了一些示例数据(WideWorldImports示例数据库),这些数据只给了我一个CountryID,CountryName和Continent。

有了数据后,添加一个表,将CountryName拖到第一列中,然后删除其余两列。

然后右键单击Details行组并进行Add Group => Parent Group选择Continent作为“分组依据”字段,然后选中Add Group Header选项。

表设计应该看起来像这样,简洁明了。 enter image description here

接下来,我们将在明细行上设置切换。右键单击“详细信息”行组,然后选择“组属性”。在可见性上,点击“隐藏”,然后选中“报表项可以切换显示”到Continent

我们现在应该有一个可以按预期扩展和折叠的报告。

接下来,垂直扩展国家名称上方的“空白单元格”,因为我们需要处理一些空间。将其设置为正常高度的4倍左右,我们稍后将其改回,因此尺寸并不重要。

在空白单元格中,右键单击并执行Insert => Rectangle。 在此矩形中,右键单击并执行Insert => TextBox。双击文本框,然后键入“折叠状态”列标题。在我的示例中,我只使用了“ Collapsed Header”。 重复并添加另一个文本框(它必须再次位于矩形内)。将此文本框设置为您的“展开状态”标题。在此示例中,我仅使用了“扩展标题”。

接下来,右键单击“ Collapsed标头”文本框,然后在属性中将可见性设置为Show,并将切换项设置为Continent

重复您的“扩展标题”,但这一次将可见性设置为Hide

enter image description here

最后,将两个文本框都放置在0,0位置,以便它们重叠并将单元格缩小到其原始大小。

最终设计将如下所示……

enter image description here

当我们第一次运行报告时,我们看到了这一点。

enter image description here

如果我们扩展一个节点,就会得到这个。 enter image description here

答案 3 :(得分:0)

这就是InScope()的作用。有关更多信息,请参见here