Создать скрипт для создания отчетов по каждой записи в SSRS - PullRequest
1 голос
/ 13 июля 2020

В SSRS вы можете использовать параметры для экспорта отчета в определенный формат c. Например, я могу добавить к URL-адресу rs:format=PDF, чтобы получить отчет для экспорта в файл pdf. При этом экспортируется отчет в формате PDF с именем отчета и заголовком фактического отчета. Я понимаю, что в SSRS нет способа присвоить отчету конкретное c имя при его загрузке.

Однако у нас есть 10 тыс. Записей, которые пользователь хочет автоматически экспортировать, например, экспорт в pdf. Я не хочу, чтобы там было go и создавалось 10 тыс. Различных подписок, управляемых данными, и присваивалась параметру значение идентификатора записи. Мне пришлось бы сделать это 10k раз!

Есть ли более простой способ сделать это, чтобы я мог экспортировать все свои записи в определенный формат c с именем отчета, ID записи ?? Например, мы используем идентификатор автоматического нумерации для каждой записи, поэтому один PDF-файл может называться 12.pdf, а следующий - 13.pdf, et c. Но это нужно запускать по запросу и в любое время.

Есть ли кто-нибудь, кто знает, могу ли я сделать это через t sql или spro c?

Ответы [ 2 ]

2 голосов
/ 14 июля 2020

Итак, вы упомянули, что у вас нет корпоративной версии, и кажется, что только корпоративная версия имеет подписки на основе данных.

Есть другой способ. Вы можете выполнить SSRS через WebClient в C#.

Сначала захватите параметры динамически через SQL:

class parameterRow {
    public string fileName;
    public string active;
}

... 

var parameterRows = new List<parameterRow>();

var sql = @"

    select      fileName = 'activeRecords.pdf', 
                active = 'Active' 
    
    union all
    select      fileName = 'inactiveRecords.pdf', 
                active = 'Inactive'
    
";

using (var con = new SqlConnection("server=someServer;database=someDB;trusted_connection=yes"))
using (var cmd = new SqlCommand(sql, con)) {
    
    con.Open();
    
    using (var rdr = cmd.ExecuteReader()) 
        while (rdr.Read()) 
            parameterRows.Add(new parameterRow {
                fileName = rdr[0].ToString(),
                active = rdr[1].ToString()
            });
            
}
    

Затем l oop динамически созданные параметры, загрузка и архивирование на каждой итерации путем интеграции имени параметра в URL-адрес и имени файла в имя записи zip-архива:

using (var client = new WebClient()) 
using (var fileStream = new FileStream(@"c:\...\ssrs.zip", FileMode.Create, FileAccess.Write)) 
using (var zipArchive = new ZipArchive(fileStream, ZipArchiveMode.Create, false)) {

    foreach(var paramRow in parameterRows) {
    
        var url = Uri.EscapeUriString(
            @"http://ssrs.YourSite.org/ReportServer/Pages/ReportViewer.aspx?" + 
            @"/Basic Student Lists/Student List" + 
            $@"&Active={paramRow.active}" + 
            @"&SortOrder=Student Name" + 
            @"&rs:Command=Render&rs:Format=pdf"
        ); 

        client.UseDefaultCredentials = true;            
        var data = client.DownloadData(url);
        var zipEntry = zipArchive.CreateEntry(paramRow.fileName);

        using (var entryMs = new MemoryStream(data))
        using (var zipEntryStream = zipEntry.Open()) 
            entryMs.CopyTo(zipEntryStream);
        
    }
    
}       
        

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

2 голосов
/ 13 июля 2020

Щелкните правой кнопкой мыши отчет SSRS и следуйте по этому пути:

Управление> Подписки> Новая подписка> Подписка на основе данных

Прочтите здесь для получения дополнительной информации об этом. Но короче говоря, вы настраиваете параметр, как вы описали, а затем заполняете его через ячейку sql.

Пошагово:

  1. В панели «подписки» , нажмите «новая подписка»
  2. В переключателе «Тип подписки» убедитесь, что вы выбрали «подписка на основе данных», а не «стандартная подписка».
  3. В поле «Назначение» в раскрывающемся списке выберите «windows файловый ресурс».
  4. В разделе «набор данных» нажмите «изменить набор данных». Установите sh соединение, напишите запрос sql. В вашем случае запрос 10000 строк sql, который выводит другой «заголовок» или столбец с аналогичным именем для каждого отдельного отчета. Вы также можете вывести поле «fileName».
  5. Подтвердите при необходимости и нажмите «Применить», чтобы вернуться к предыдущему экрану.
  6. В разделе «Параметры доставки» выберите «получить» значение из набора данных »в разделе« Источник значения »для имени файла и сослаться на столбец имени файла, созданный на шаге 4.
  7. Запишите путь вручную, выберите формат визуализации вручную и заполните любые другие параметры по мере необходимости.
  8. В параметрах отчета выберите «получить значение из набора данных» для параметра заголовка, который у вас есть в отчете ssrs. Затем укажите ссылку на поле «заголовок», которое вы создали на шаге 4.
  9. При необходимости заполните другие ячейки.
  10. Нажмите «Создать подписку».

Вот визуальный тур с реализацией другого собственного отчета:

data-driven sub initial

data-driven sub query

субфинал на основе данных

...