Экспорт файлов с разделителями табуляции в SSRS 2005


1

В статье this MSDN article MS объясняет, как указывать другие разделители, кроме запятых, для экспорта csv-типов из SSRS 2005, однако символы буквенной метки разделяются синтаксисом файла конфигурации, и это не что MS предоставила обходное решение.
This entry Microsoft Connect, похоже, подтверждает это.
Кто-нибудь разработал способ экспорта файлов с разделителями табуляции из SSRS 2005?
Или, возможно, разработан собственный пользовательский рендерер с открытым исходным кодом, чтобы выполнить работу?

Примечание: Я слышал о том, что вручную добавлен &rc:FieldDelimiter=%09 через доступ к URL-адресу, но это не приемлемо для моих пользователей и не работает в любом случае.

1

Я использовал запрос выбора для форматирования данных и BCP для извлечения данных в файл. В моем случае я инкапсулировал все это в хранимую процедуру и назначил ее с помощью агента SQL для удаления файлов в определенное время. Основная кодировка аналогична:

use tempdb 
go 
create view vw_bcpMasterSysobjects 
as 
    select 
     name = '"' + name + '"' , 
     crdate = '"' + convert(varchar(8), crdate, 112) + '"' , 
     crtime = '"' + convert(varchar(8), crdate, 108) + '"' 
    from master..sysobjects 
go 
declare @sql varchar(8000) 
select @sql = 'bcp "select * from tempdb..vw_bcpMasterSysobjects 
        order by crdate desc, crtime desc" 
       queryout c:\bcp\sysobjects.txt -c -t, -T -S' 
              + @@servername 
exec master..xp_cmdshell @sql 

Пожалуйста, посмотрите на отличный пост creating-csv-files-using-bcp-and-stored-procedures.

  0

xp_cmdshell должен работать с административной привилегией. Это не является хорошим ответом для производственной среды. 27 сен. 082008-09-27 20:21:50


0

Позвоните мне Mr Silly, но было бы проще, если бы XML был возвращен из хранимой процедуры proc или SQL? Преобразование XSLT в CSV тривиально.

Или вы можете написать столь же тривиальную страницу ASP.NET, которая получает данные с использованием ADO.NET, очищает выходной поток, устанавливает тип mime в text/csv и записывает в него CSV.

К сожалению, вам нужен разделитель другой чем запятая. Но оба вышеупомянутых решения все еще могут быть применены. Если вы перейдете к ASP, у вас появится страница параметров, которая позволит им выбрать разделитель по своему выбору.


1

Мой текущий обходным путем является добавление пользовательского расширения CSV, как, например:

<Extension Name="Tabs" Type="Microsoft.ReportingServices.Rendering.CsvRenderer.CsvReport,Microsoft.ReportingServices.CsvRendering"> 
    <OverrideNames> 
     <Name Language="en-US">Tab-delimited (requires patch)</Name> 
    </OverrideNames> 
    <Configuration> 
     <DeviceInfo> 
      <Encoding>ASCII</Encoding> 
      <FieldDelimiter>REPLACE_WITH_TAB</FieldDelimiter> 
      <Extension>txt</Extension> 
     </DeviceInfo> 
    </Configuration> 
</Extension> 

... вы можете увидеть, я использую текст «REPLACE_WITH_TAB», как мой разделитель полей, а затем я использую простой независимый от платформы Perl скрипта для выполнения SED-как исправить:

# all .txt files in the working directory 
@files = <*.txt>; 

foreach $file (@files) { 
    $old = $file; 
    $new = "$file.temp"; 

    open OLD, "<", $old or die $!; 
    open NEW, ">", $new or die $!; 

    while (my $line = <OLD>) { 

     # SSRS 2005 SP2 can't output tab-delimited files 
     $line =~ s/REPLACE_WITH_TAB/\t/g; 

     print NEW $line; 
    } 

    close OLD or die $!; 
    close NEW or die $!; 

    rename($old, "$old.orig"); 
    rename($new, $old); 
} 

Это, безусловно, хак, но он получает работу в довольно неинвазивных способ. Для этого требуется только:

  • Perl установлен на компьютере пользователя возможность
  • пользователя перетащить сценарий .pl в каталог .txt файлов способность
  • пользователя дважды щелкнуть сценарий .pl

2

Если кому-то это понадобится, это очень хорошо работает для меня.

<Extension Name="Tabs" Type="Microsoft.ReportingServices.Rendering.DataRenderer.CsvReport,Microsoft.ReportingServices.DataRendering"> 
    <OverrideNames> 
    <Name Language="en-US">Tab-delimited</Name> 
    </OverrideNames> 
    <Configuration> 
    <DeviceInfo> 
     <OutputFormat>TXT</OutputFormat> 
     <Encoding>ASCII</Encoding> 
     <FieldDelimiter>&#9;</FieldDelimiter> 
     <!-- or as this --> 
     <!-- <FieldDelimiter xml:space="preserve">[TAB]</FieldDelimiter> --> 
     <FileExtension>txt</FileExtension> 
    </DeviceInfo> 
    </Configuration> 
</Extension> 
  0

У вас это работало в SSRS * 2005 *? 24 авг. 092009-08-24 18:12:16

  0

Отлично работает в SSRS 2008 R2, кстати. 22 дек. 112011-12-22 02:38:24

  0

Местоположение файла: C: \ Program Files \ Microsoft SQL Server \ MSRS10_50.MSSQLSERVER \ Reporting Services \ ReportServer \ rsreportserver.config. Это относится к элементу <Render>. 01 апр. 132013-04-01 20:15:30