Как динамически создать отчет SSRS? - PullRequest
1 голос
/ 20 октября 2010

Я пытаюсь создать отчет в SSRS.Отчет вызывает хранимую процедуру для своих данных.Я хочу отобразить данные в таблице.Но дело в том, что результат от хранимой процедуры время от времени различается, потому что у каждого клиента есть свой «шаблон».Это означает, что результат для клиента A может быть:

AccountNumber | CustomerID 1234567890 09876543211579086421 1234565465
...................... ....................

и для клиента B может быть:

CustomerName | Адрес Заказчик Б Teststreet 1Тестирование клиентов Teststreet 2...................... ....................

Есть 50 различных столбцов на выбор.Порядок столбцов также можно редактировать.Моя хранимая процедура позаботится об этом.Единственное, что я хочу - это поместить набор результатов хранимой процедуры 1: 1 в мой отчет (заголовок + тело).Ребята, вы знаете, как это сделать?

Если это невозможно, есть ли решение C # для этого?Т.е. создание объекта отчета в C #, настройка параметров и т. Д.

Спасибо

Ответы [ 3 ]

4 голосов
/ 20 октября 2010

Вы можете создать отчет SSRS динамически на основе набора данных, возвращаемых хранимой процедурой. Формат отчета (RDL) документирован, и это формат XML. Таким образом, вы можете использовать пространство имен System.XML для генерации RDL. Альтернативный (и не поддерживаемый) способ - ссылаться на сборку объектной модели RDL (Microsoft.ReportingServices.RdlObjectModel) - вы можете найти сборку на компьютере сервера SSRS 2008 и скопировать ее на локальный компьютер. Он предлагает объектную модель для чтения / генерации RDL.

Я принял подход, при котором RDL генерируется (в виде XML) динамически на основе таблицы данных, а затем публикует RDL на сервере SSRS с использованием API веб-служб.

1 голос
/ 28 октября 2010

Одним из решений может быть изменение вашего SP, чтобы возвращаемые данные выглядели примерно так:

ColNameA       DataA       ColNameB    DataB
AccountNumber, 1234567890, CustomerID, 948477586
AccountNumber, 5466584426, CustomerID, 458852244

Затем в SSRS перетащите таблицу.Создайте группу на ColNameA.В этой строке группы поместите поле ColNameA в первый столбец, поместите ColNameB во второй столбец.

В строке сведений поместите DataA в первый столбец и DataB во второй столбец, и он должен выглядеть следующим образомthis:

alt text

Пример запроса, который я использовал:

select 'AccountNumber' as ColNameA, 1234567890 as DataA, 'CustomerID' as ColNameB, 0987654321 as DataB UNION 
select 'AccountNumber' as ColNameA, 5546488393 as DataA, 'CustomerID' as ColNameB, 4747599393 as DataB

Получение имен столбцов (AccountNumber, CustomerID или CustomerName, CustomerAddress) будетключ.Вы можете получить их через:

select * from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = 'my_table_name'
0 голосов
/ 04 июля 2019

Вы можете использовать Rdlobjectmodel, предоставленный дизайнером отчетов, для создания и изменения отчета.

Вы можете ссылаться на Microsoft.ReportingServices.Designer.Controls в вашем проекте, но это включает в себя также все зависимости, которые состоят из 20+ сборок, или вы можете скопировать следующий набор DLL в отдельную папку в вашем проектекорневой уровень и используйте его для ссылки на библиотеки DLL

 Microsoft.ReportingServices.QueryDesigners
 Microsoft.ReportingServices.Designer.Controls
 Microsoft.ReportingServices.RdlObjectModel
 Microsoft.ReportingServices.ReportDesign.Common
 Microsoft.ReportingServices.RichText
 Microsoft.ReportingServices.RPLObjectModel


  private Report LoadReportTemplate()
  {
        const string docPath = "template.rdl";//path for your template report
        using (var fs = new FileStream(docPath, FileMode.Open))
        {
            var report = Report.Load(fs);
            return report;
        }
  }

Перейдите по ссылке для Документация

...