Как экспортировать матрицу SSRS в CSV без потери структуры?

Рассмотрим следующий источник данных:

declare @Test table (EmpId int, ProdId int, Sold int)
insert @Test (EmpId, ProdId, Sold) values (1, 1, 1)
insert @Test (EmpId, ProdId, Sold) values (1, 2, 2)
insert @Test (EmpId, ProdId, Sold) values (1, 3, 3)
insert @Test (EmpId, ProdId, Sold) values (1, 4, 4)
insert @Test (EmpId, ProdId, Sold) values (2, 1, 5)
insert @Test (EmpId, ProdId, Sold) values (2, 2, 6)
insert @Test (EmpId, ProdId, Sold) values (2, 3, 7)
insert @Test (EmpId, ProdId, Sold) values (2, 4, 8)
select * from @Test

Я создаю отчет Sql Server Reporting Services (SSRS) 2008 R2, который содержит одну матрицу, настроенную следующим образом:

|         | [ProdId]    |
| [EmpId] | [Sum(Sold)] |

Что в режиме предварительного просмотра отображает следующее (как и ожидалось):

|   | 1 | 2 | 3 | 4 |
| 1 | 1 | 2 | 3 | 4 |
| 2 | 5 | 6 | 7 | 8 |

Но когда я экспортирую его в CSV, я получаю следующее:

| EmpId | ProdId | Sold |
| 1     | 1      | 1    |
| 1     | 2      | 2    |
| 1     | 3      | 3    |
| 1     | 4      | 4    |
| 2     | 1      | 5    |
| 2     | 2      | 6    |
| 2     | 3      | 7    |
| 2     | 4      | 8    |

Другими словами, когда я экспортирую в CSV, я теряю матричный макет, и каждая строка данных отображается в одну строку CSV. Обратите внимание, что отчет работает должным образом, если я экспортирую в Excel, поэтому эта проблема пока ограничивается CSV. Я попытался реструктурировать матрицу как таблицу в таблице, но это тоже не решило ее. Какие-либо предложения?


person Mike    schedule 09.05.2011    source источник


Ответы (3)


Это часть большого изменения в рендеринге отчетов между SSRS 2005 и SSRS 2008.

Единственные решения, которые я нашел:

  1. Экспорт в Excel, а затем сохранение документа Excel в формате CSV. Это выравнивает формат Excel и требует настройки группирования таким образом, чтобы каждая строка повторяла значения родительских групп. Однако есть проблемы с экспортом в Excel для начала, например, если последовательные строки содержат одни и те же данные, средство визуализации иногда пропускает данные, что можно остановить, установив для параметра DataElementOutput значение True для затронутых столбцов вместо ' Авто », который позволяет рендереру угадывать, какие поля вы считаете важными.

  2. Создайте отчет в виде плоской таблицы. Это в значительной степени лишает смысла создание матрицы для начала и является проблемой, но вы можете определить столбцы заранее и сделать это динамически либо в запрос или использование множества выражений в значении текстового поля и установка динамической видимости столбцов. Но для реализации этого потенциально может потребоваться создание десятков или сотен столбцов для обработки потенциального появления определенного значения.

  3. Не обновляйте до 2008 года. Если матричная отчетность и форматирование экспорта критически важны для бизнеса, на самом деле нет хорошего способа воссоздать функциональность в 2008 году, придерживаясь SSRS 2005 года, это единственный надежный способ -пожарный способ получить старый рендеринг.

Ресурсы:

person kscott    schedule 06.07.2011

Вот обходной путь:

  • Переключите источник вывода CSV на дополнительный табликс, который показывает все данные как есть.
  • Отключите исходный таблик от вывода в CSV (Табликс> Свойства> DataElementOutput> NoOutput).
  • Скройте лишний табликс, чтобы он не отображался. (Табликс> Щелкните правой кнопкой мыши> Свойства табликса> Видимость> Скрыть).

Таким образом, у вас есть полный контроль над отображением на экране и выводом CSV.

person Gus Lopez    schedule 03.10.2018

Это работает иногда в SSRS 2016:

  1. Выберите недостающие столбцы
  2. Открыть Свойства
  3. Изменить только данные - ›DataElementOutput as Output
  4. Это зависит от того, где работает эта операция. Например, когда я сделал это на Tablix, это не сработало, но сработало, когда я сделал это с колонкой. Вы можете попробовать создать таблицу, чтобы проверить, работает ли это лучше после этого. К сожалению, вы не можете создавать таблицы на нижних колонтитулах, где это было бы особенно полезно.
person Timo Riikonen    schedule 01.10.2020