2017-08-25 3 views
0

Ich muss meinen SSRS-Bericht in das CSV-Format exportieren. Das Problem, mit dem ich konfrontiert bin, ist, dass sich nur wenige Spaltenkopfnamen mit Ländercode (Parameter) ändern und ich denselben Namen in meinem exportierten CSV anzeigen möchte. Ich habe andere verwandte Fragen und Themen, insbesondere this eins durchlaufen. Es wurde vorgeschlagen, dass ein Problem auftritt, indem der Datenwert auf null gesetzt wird. Ich habe dies versucht, indem ich Spalten hinzugefügt und diese basierend auf dem Ländercode ausgeblendet habe, zusammen mit dem Festlegen des Datenwerts auf Null für dieses Datensatzfeld. Aber es hat nicht funktioniert. Ich bekomme immer noch die versteckte Spalte in meinem Export, ohne Werte.SSRS 2012 CSV-Export - dynamische Spalte Header-Name

Kann jemand bestätigen, dass diese Problemumgehung funktioniert oder gibt es einen anderen Weg als die Erstellung verschiedener Berichte für jedes Land?

UPDATE: (hinzugefügt Bericht Screenshot und eine Beschreibung für Klärung)

auf apporoach Basierend ich genommen habe, ich nur Spalte ‚Stadt‘ für das Land A und nur ‚Vorstadt‘ für Land B zeigen müssen Dies geschieht einfach durch Ausblenden von Spalten basierend auf Länderparameter (und funktioniert gut für EXCEL-Export), aber beim Export in CSV werden beide Spalten exportiert.

enter image description here

UPDATE 2

this Link gefunden, die ähnlich ist, was ich habe, um herauszufinden versucht, und sieht aus wie es keine Lösung gibt, die nur einen Bericht mit erreicht werden kann.

+0

zeigen Ihnen ein Beispiel von dem, was Sie brauchen. Außerdem können Sie Ihre Datasetabfrage anzeigen. In der Vergangenheit habe ich einfach Spalten in der Dataset-Abfrage umbenannt, indem ich das Ergebnis zuerst in eine temporäre Tabelle abgelegt habe, die Spalte umbenannt und dann aus der temporären Tabelle ausgewählt habe. Jedoch abhängig davon, was Sie ändern müssen und wann es eine einfachere Lösung geben könnte. –

+0

@AlanSchofield Entschuldigung für die Verzögerung, ich habe die Frage mit Screenshot und Beschreibung aktualisiert. Dataset ist ziemlich einfach und bringt diese Spalten aus Tabellen (NULL für Spalte, die nicht für bestimmtes Land gilt). –

Antwort

0

Nach diesem Beitrag

MSDN Social: Hide CSV columns conditionally in SSRS report

Die XML- und CSV-Renderer verwenden, um die DataElementOutput Eigenschaft Kontrolle Sichtbarkeit. Wir können auswählen, welches Element im Bericht ausgeblendet werden soll, und die Eigenschaft "DataElementOutput" mit dem Wert "NoOutput" festlegen, um das Problem zu umgehen.


Alternativ können wir unten Ausdruck in dem das Sichtbarkeit des Elements zu steuern. Bitte beachten Sie den Ausdruck unter: = IIF (! Globals RenderFormat.Name = "CSV", True, False)

Dies ist übrigens die zweite Antwort in dem Thread, der Sie auf dem Laufenden. Diese Antwort Links auf die folgenden Artikel, der erklärt, wie genau das tun, was Sie brauchen

Hide/Show Items Dependant On Export Format

UPDATE

Es scheint, dass Sie nicht programmatisch DataElementOutput für CSVs festlegen. Doch nach diesem Beitrag 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. 

Unter Umständen können Sie/verstecken anstatt auf diese Weise bestimmte Spalten Land zeigen.

+0

DataElementOutput-Eigenschaft kann nicht dynamisch festgelegt werden. Wenn ich es auf "NoOutput" setze, wird es niemals diese Spalte nach csv exportieren. Ich muss es dynamisch basierend auf einem CountryCode-Parameter tun. = IIF (Globals! RenderFormat.Name = "CSV", True, False) funktioniert nicht beim CSV-Export. Es funktioniert für Excel. –

+0

@ AB_87 Antwort aktualisiert – twoleggedhorse

+0

Hallo @twoleggedhorse, schlagen Sie vor, dass ich für jedes Land zwei tablix mit Struktur erstellen und Daten basierend auf Land herauszufiltern, da Filter auf Zeilen und Spalten nicht funktionieren. –

0

Mein Ansatz wäre dies in SQL zu tun. Ich bin mir nicht sicher, wie Sie bestimmen, in welchen Ländern die Stadt zurückgegeben werden muss und welche die Vorstadt zurückgeben muss, aber hier sind ein paar Ansätze, die hoffentlich Ihr Szenario abdecken.

In jedem Fall ist die Idee, die Stadt/Vorort-Daten in der gleichen Spalte und dann eine zusätzliche Spalte zurückzugeben, die eine eine Beschriftung enthält, die wir als Spaltenüberschrift verwenden können.

a. Nur eine Spalte in der Stadt oder Vorstadt in Ihrer Tabelle ist ausgefüllt. In diesem Fall ist es ziemlich einfach.

SELECT 
    Country 
    , ISNULL(TownOrCity, StreetSuburb) AS TownSuburb 
    , CASE WHEN TownOrCity IS NULL THEN 'Street-Suburb' ELSE 'Town-City' END AS Caption 
FROM myTable 

b. Sie wissen im Voraus, welche Länder was benötigen und Sie können einen Parameter übergeben, um die richtige Spalte zu erhalten. In diesem Beispiel werden wir einen Parameter namens @TS und übergeben Sie verwenden entweder ein T oder und 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 

Unabhängig davon, welchen Ansatz, den wir nehmen Sie mit einem einfachen Tisch

Country TownSuburb Caption 
Testland TownA   Town 
Testland TownB   Town 
Testland TownC   Town 

In Sie am Ende berichten Sie brauchen nichts zu tun, außer die Orts-/Vorort-Spaltenbeschriftung einen Ausdruck zu machen so etwas wie =FIRST(Fields!Caption.Value)

Das ist es, der Bericht ist jetzt nett und einfach und sollte ohne irgendwelche Probleme exportieren.

UPDATE Methode:

-- 
-- 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 
+0

Hallo @alanSchofield, CSV-Export nicht Spaltenkopf der tablix für Header in dem Export nicht berücksichtigt. Es verwendet Textbox Namen oder Dataelementnamen (Wenn Wert angegeben wird, wird der Header-Wert im Export verwendet. Die Verwendung von Caption für den Namen der Spaltenüberschrift funktioniert daher nicht beim CSV-Export. –

+0

Hallo @ AB_87, ich habe die Antwort geändert, entschuldige mich, dass ich den CSV-Teil übersehen habe, so wichtig wie er war! –

+0

Ich glaube nicht, dass ich ein SSRS-Dataset mit einem gespeicherten proc haben kann, der den dynamischen Spaltenkopf zurückgibt. Auch wenn es möglich ist, ist es eine gute Übung? –