我需要将SSRS报告导出为csv格式。我面临的问题是,几个列标题名称随国家/地区代码(参数)而变化,我想在导出的csv中显示相同的名称。我已经阅读了其他相关问题和主题,特别是this一个。它建议通过将数据值设置为null来解决问题。我通过添加列并基于国家/地区代码隐藏这些列,以及为该数据集字段将数据值设置为null来尝试此操作。但它没有用。我仍然在导出中获取隐藏列,其中没有值。
有人可以确认此解决方法是否有效,或者除了为每个国家/地区创建不同的报告之外还有其他方法吗?
更新:(添加了报告截图和说明以便澄清)
根据我所采用的方式, 我只需要展示Column' Town'对于A国和唯一的'郊区'对于国家B.这可以通过基于国家参数隐藏列来轻松完成(并且可以很好地用于EXCEL导出),但是当导出到CSV时,两个列都将被导出。
更新2
找到this链接,这与我一直试图弄清楚的相似,看起来没有解决方案只能使用一个报告来实现。
答案 0 :(得分:0)
根据这篇文章
MSDN Social: Hide CSV columns conditionally in SSRS report
XML和CSV呈现器使用DataElementOutput属性 控制能见度。我们可以选择要隐藏的项目 报告,并设置值为“NoOutput”的“DataElementOutput”属性 解决这个问题。
或者,我们可以添加以下表达式来控制项目 能见度。请参考下面的表达式: = IIF(全局RenderFormat.Name ="!CSV",真,假)
顺便提一下,这是您发布的帖子中的第二个答案。该答案链接到以下文章,该文章解释了如何完全满足您的需求
Hide/Show Items Dependant On Export Format
<强>更新强>
您似乎无法以编程方式为CSV设置DataElementOutput
。但是,根据这篇文章SSRS - Programatically controlling the DataElementOutput property
in RS 2005 / 2008, you should be able to get the desired effect by adding a filter on the tablix directly (in addition to the visibility condition):
Filter expression: =(Parameters!DataPeriod.Value = "DAY")
Filter operator: =
Filter value: =true
Thereby, for the cases where the tablix is not visible, you are also filtering out all the data.
您可以通过这种方式显示/隐藏特定国家/地区的列。
答案 1 :(得分:0)
我的方法是在SQL中执行此操作。我不确定您如何确定哪些国家/地区需要归还该城镇以及哪些国家/地区需要退回该城镇,但这里有几种方法可以覆盖您的情况。
在任何一种情况下,想法都是在同一列中返回城镇/郊区数据,然后是一个附加列,其中包含我们可以用作列标题的标题。
一个。只填充表格中的城镇或郊区列中的一个。在这种情况下,它非常简单。
SELECT
Country
, ISNULL(TownOrCity, StreetSuburb) AS TownSuburb
, CASE WHEN TownOrCity IS NULL THEN 'Street-Suburb' ELSE 'Town-City' END AS Caption
FROM myTable
湾您事先知道哪些国家/地区需要什么,您可以传入参数以获取正确的列。在此示例中,我们将使用名为@TS的参数并传入T
或S
SELECT
Country
, CASE @TS WHEN 'T' THEN TownOrCity ELSE StreetSuburb END as TownSuburb
, CASE @TS WHEN 'T' THEN 'Town-City' ELSE 'Street-Suburb' END AS Caption
FROM myTable
无论我们采取哪种方法,最终都会得到一个简单的表格
Country TownSuburb Caption
Testland TownA Town
Testland TownB Town
Testland TownC Town
在你的报告中,你不需要做任何事情,除了使城镇/郊区栏标题像=FIRST(Fields!Caption.Value)
就是这样,报告现在很简单,并且应该在没有任何问题的情况下导出。
UPDATE to method :
--
-- Dump data into a temp table
--
SELECT
Country
, CASE @TS WHEN 'T' THEN TownOrCity ELSE StreetSuburb END as TownSuburb
INTO #t
FROM myTable
--
--rename the column
--
DECLARE @NewColumnname sysname = CASE @TS WHEN 'T' THEN N'Town-City' ELSE N'Street-Suburb' END
EXECUTE tempdb..sp_rename N'tempdb..#t.[TownSuburb]', @NewColumnname, 'COLUMN'
--
-- finally get the result
--
SELECT * FROM #t