我原本以为这是一项简单的任务,但是经过几个小时的研究后,我正在阅读将隐藏字段导出为CSV时可能会出现SSRS错误而这种情况无法实现?
我想做什么:
我有一个包含多个列的报告(比方说50)。我有一个REPORT_VERSION参数下拉列表,允许用户选择“标准”(所有50列)或“快速”(仅10列)。我已经能够正确显示2个版本,但是当我将(快速版本)导出为CSV时,它会显示所有列(和/或Tablix),而不是结果的样子。
我读过并尝试过:
如果我创建了2个tablix并根据参数值隐藏了一个Tablix,则导出到CSV仍会显示可见和隐藏的Tablix。
如果我使用=IIF(Globals!RenderFormat.Name="CSV", True, False)
- 这对CSV输出无效
更改DataElementOutput = NoOutput。这会从CSV输出中隐藏列或表,但不能根据参数值动态更改。
这可以通过vbscript在“自定义代码”部分完成吗?
我读过的很多文章和帖子可以追溯到2010 - 2012年,所以希望现在有一个解决方案吗?我真的不在这里。
非常感谢帮助。谢谢
答案 0 :(得分:0)
根据您的尝试#2,我能够在SSRS 2008和2012中使用它。我创建了一个虚拟报告,其数据源查询为
SELECT 'value1' as col1, 'value2' as col2
然后我将以下表达式添加到column Visibility to column2
=IIF(Globals!RenderFormat.Name="CSV", False, True)
请注意,true
和false
与您的示例相反。生成报告时,第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没有结果,但它仍然会导出列标题和一个空行。
现在我很想知道这个问题会有什么好的解决方案。