Как получить разделы данных отчета SSRS по отдельным строкам в выходном файле - PullRequest
0 голосов
/ 18 марта 2020

У меня есть хранимая процедура в SSMS, которая выглядит примерно так:

SELECT
    1 AS [Transaction Type 1]
    ,SOMEFIELD AS [Some Field]
    ,ANOTHERFIELD AS [Another Field]
    ,...

    ,2 AS [Transaction Type 2]
    ,SOMEOTHERFIELD AS [Some Other Field]
    ,YETANOTHERFIELD AS [Yet Another Field]
    ,...

    ,4 AS [Transaction Type 4]
    ,MOREFIELDS AS [More FieldS]
    ,EVENMOREFIELDS AS [Even More Fields]
FROM SomeTable
JOINS
WHERE
ORDER BY

Клиент требует, чтобы для каждой записи в выводе каждый раздел Тип транзакции (1,2,4) был на отдельной строке в файле, который SSRS генерирует при запуске отчета. Они обрабатывают данные из выходного файла, который генерирует SSRS, поэтому их не волнует, как отчет выглядит в браузере при запуске отчета, но файл должен выглядеть примерно так:

1|10354|99999-9999|O|SOMENAME|11161947|M|999-99-9999|SOMEADDRESS|SOMEADDRESS|SOMECITY|ST|99999|999-999-9999|CLI|99999999|99999999|O|S|
2|10354|99999-9999|O||||||||MSOMENAME|U61434|1790702207|465|||PODSTTRY|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
4|117245592|SOMECOMPANY|STDSNP|117245592|1|Self
1|10723|99999-9999|O|SOMENAME|08081934|M|999-99-9999|SOMEADDRESS||SOMECITY|ST|99999|999-999-9999|ER |99999999|99999999|O|M|
2|10723|99999-9999|O||||||||SOMENAME||1356982441|3119||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
4|4VH2R42VX92|SOMECOMPANY||4VH2R42VX92|1|Self
1|12318|99999-9999||SOMENAME|07201973|F|999-99-9999|SOMEADDRESS||SOMECITY|ST|99999|999-999-9999|CLI|99999999|99999999|O|M|
2|12318|99999-9999|||||||||SOMENAME||1194703439|1639||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
4|STLW01260703|SOMECOMPANY|36650|STLW01260703|1|Self

Как я уже говорил выше, в выходных файлах каждый раздел типа 1, 2 и 4 находится в отдельной строке. Однако мне пришлось вручную выполнить приведенный выше пример вывода файла для целей этого вопроса, потому что фактический вывод файла выглядит следующим образом:

1|12318|99999-9999||SOMENAME|99999999|F|999-99-9999|SOMEADDRESS||SOMECITY|ST|99999|999-999-9999|CLI|99999999|99999999|O|M|2|12318|99999-9999|||||||||SOMENAME||99999999|1639||G68462||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||4|STLW01260703|SOMECOMPANY|36650|STLW01260703|1|Self
1|12328|99999-9999|O|SOMENAME|99999999|M|999-99-9999|SOMEADDRESS||SOMECITY|ST|99999|999-999-9999|CLI|99999999|99999999|O|S|2|12328|99999-9999|O||||||||SOMENAME||99999999|2447||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||4|CPWW01093606|SOMECOMPANY|20041|CPWW01093606|1|Self
1|12508|99999-9999|O|SOMENAME|99999999|F|999-99-9999|SOMEADDRESS||SOMECITY|ST|99999|999-999-99991|CLI|99999999|99999999|O|W|2|12508|99999-9999|O||||||||SOMENAME||99999999|2707||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||4|1XM0TM6DT02|SOMECOMPANY||1XM0TM6DT02|1|Self
1|13167|99999-9999||SOMENAME|99999999|F|999-99-9999|SOMEADDRESS||SOMECITY|ST|99999|999-999-9999|CLI|99999999|99999999|O|M|2|13167|99999-9999|||||||||SOMENAMEA||99999999|2159||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||4|9TP1NQ5MR03|SOMECOMPANY||9TP1NQ5MR03|1|Self
1|13673|99999-9999|O|SOMENAME|99999999|F|999-99-9999|SOMEADDRESS||SOMECITY|ST|99999|999-999-9999|CLI|99999999|99999999|O|M|2|13673|99999-9999|O||||||||SOMENAME||99999999|2707||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||4|DSTW00629242|SOMECOMPANY|XA061|DSTW00629242|1|Spouse

Каждая запись, генерируемая хранимой процедурой, находится в отдельной строке. Разделы 2 и 4 находятся в той же строке, что и соответствующий им раздел 1 для каждой соответствующей записи.

В VS для бизнеса, где я работаю над RDL, запутанная компоновка выглядит следующим образом:

RDL layout in VS for Business

И когда отчет запускается в SSRS, выходные данные выглядят так:

SSRS report output sample

Вы заметите, что каждый раздел 1, 2 и 4 типа находится в отдельной строке для данной записи, как и предполагалось.

Я просто не могу понять, как получить сохранить его в текстовом файле с разделителями. Честно говоря, мы озадачены и задаемся вопросом, возможно ли это вообще в SSD RDL, за исключением того, что после создания файла создается пакетный файл, который помещает каждый раздел в отдельную строку.

1 Ответ

0 голосов
/ 18 марта 2020

Этого можно добиться, запустив некоторый скрипт, который управляет выходным файлом, сгенерированным процедурой (который выдает результат в одной строке для группы разделов типа транзакции).

попробуйте следующее:

declare @sql varchar(1000)
exec master..xp_cmdshell 'bcp "exec dbname.schemaname.procedurename" queryout "filepath" -T -c -r\n -S servername\instanacename'
set @sql = '%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\powershell.exe -c "[System.IO.File]::ReadAllText(''filepath_which_is_generated_by_procedure'') -replace ''\|([24]\|)'',\"`r`n`$1\"  | Set-Content ''finaloutputfilepath'' 
exec xp_cmdshell @sql

Я использовал PowerShell для выполнения sh этого.

Вывод: Output_Sample

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...