SSRS 2008 R2 Bug?仍然?动态隐藏列或Tablix并导出为CSV

时间:2015-07-14 19:11:17

标签: reporting-services ssrs-2008 ssrs-2008-r2 ssrs-tablix

我原本以为这是一项简单的任务,但是经过几个小时的研究后,我正在阅读将隐藏字段导出为CSV时可能会出现SSRS错误而这种情况无法实现?

我想做什么:

我有一个包含多个列的报告(比方说50)。我有一个REPORT_VERSION参数下拉列表,允许用户选择“标准”(所有50列)或“快速”(仅10列)。我已经能够正确显示2个版本,但是当我将(快速版本)导出为CSV时,它会显示所有列(和/或Tablix),而不是结果的样子。

我读过并尝试过:

  1. 如果我创建了2个tablix并根据参数值隐藏了一个Tablix,则导出到CSV仍会显示可见和隐藏的Tablix。

  2. 如果我使用=IIF(Globals!RenderFormat.Name="CSV", True, False) - 这对CSV输出无效

  3. 更改DataElementOutput = NoOutput。这会从CSV输出中隐藏列或表,但不能根据参数值动态更改。

  4. 这可以通过vbscript在“自定义代码”部分完成吗?

    我读过的很多文章和帖子可以追溯到2010 - 2012年,所以希望现在有一个解决方案吗?我真的不在这里。

    非常感谢帮助。谢谢

1 个答案:

答案 0 :(得分:0)

根据您的尝试#2,我能够在SSRS 2008和2012中使用它。我创建了一个虚拟报告,其数据源查询为

SELECT 'value1' as col1, 'value2' as col2

然后我将以下表达式添加到column Visibility to column2

=IIF(Globals!RenderFormat.Name="CSV", False, True)

请注意,truefalse与您的示例相反。生成报告时,第2列被隐藏,但当导出为CSV时,第2列存在。

要将参数合并到可见性表达式中,您可以执行类似这样的操作

=Switch(
    Globals!RenderFormat.Name="CSV", False,
    Parameters!REPORT_VERSION.Value = "Standard", False, 
    True, True
)

如果呈现为CSV,或者如果“REPORT_VERSION”参数设置为“Standard”,则会将列的隐藏属性设置为false,否则隐藏列。需要将此表达式添加到要在报表的“Express”版本中隐藏的每列的列可见性。

修改

好的,我现在理解这个问题并且可以复制它(我在这个概念上是倒退的)。您可以明确地将列的可见性设置为隐藏,并且不会显示在CSV导出中。但是,当您尝试通过表达式控制此操作时,CSV导出将忽略此设置。

基于数据的导出看起来由“DataElementOutput”属性控制。将其设置为“NoOutput”将禁止CSV输出中的该元素。不幸的是,它似乎不能被表达式控制。 Microsoft似乎没有任何计划来更改此项(https://connect.microsoft.com/SQLServer/feedback/details/431073/ssrs-programatically-controlling-the-dataelementoutput-property

Microsoft连接请求提示创建两个Tablix并根据提供的参数(即“Express”或“Standard”)过滤掉每个Tablix的所有结果,另外根据参数值隐藏另一个Tablix。我试过这个,它中途工作了。虽然另一个tablix没有结果,但它仍然会导出列标题和一个空行。

现在我很想知道这个问题会有什么好的解决方案。