SSRS 2012 csv导出 - 动态列标题名称

时间:2017-08-25 06:38:37

标签: reporting-services export-to-csv ssrs-2012

我需要将SSRS报告导出为csv格式。我面临的问题是,几个列标题名称随国家/地区代码(参数)而变化,我想在导出的csv中显示相同的名称。我已经阅读了其他相关问题和主题,特别是this一个。它建议通过将数据值设置为null来解决问题。我通过添加列并基于国家/地区代码隐藏这些列,以及为该数据集字段将数据值设置为null来尝试此操作。但它没有用。我仍然在导出中获取隐藏列,其中没有值。

有人可以确认此解决方法是否有效,或者除了为每个国家/地区创建不同的报告之外还有其他方法吗?

更新:(添加了报告截图和说明以便澄清)

根据我所采用的方式, 我只需要展示Column' Town'对于A国和唯一的'郊区'对于国家B.这可以通过基于国家参数隐藏列来轻松完成(并且可以很好地用于EXCEL导出),但是当导出到CSV时,两个列都将被导出。

enter image description here

更新2

找到this链接,这与我一直试图弄清楚的相似,看起来没有解决方案只能使用一个报告来实现。

2 个答案:

答案 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的参数并传入TS

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