Динамически создавать имя файла в SSRS 2008 - PullRequest
10 голосов
/ 18 января 2011

Меня несколько раз просили динамически изменить имя файла в SSRS 2008. Пример: ReportName_201101.RDL.201101 представляет дату исполнения.Можно ли это сделать в SSRS 2008?

Ответы [ 5 ]

6 голосов
/ 15 марта 2011

Если вы имеете в виду имя файла при экспорте отчета и также извлекаете его из ASP.NET ReportViewer, вы можете установить имя через свойство DisplayName.

ReportViewerControl.ServerReport.DisplayName = "ReportName_201101";

или (если ProcessingMode локально):

ReportViewerControl.LocalReport.DisplayName = "ReportName_201101";

Практически во всех других случаях Элисон права.

2 голосов
/ 04 апреля 2013

Еще один способ - переименовать отчет до его автоматического запуска.Это алмаз на алмазе.Это может работать только для отчетов, которые являются подписками, а не теми, на которые пользователи ссылаются.Создайте таблицу в базе данных ReportServer, которая содержит список всех отчетов, которые вы хотите переименовать до их выполнения.Таблица Report_Rename_Listing RenameID int ItemID uniqueidentifier OriginalReportName nvarchar (350) DateType nvarchar (75) Формат int DatePlusMinus real Создайте хранимую процедуру на том же сервере, который выходит и изменяет все отчеты в приведенной выше таблице.

Create Procedure [dbo].[RenameReports]
AS
SET NOCOUNT OFF ; 
  Update dbo.Catalog 
    Set Name = ISNULL(( Select OriginalReportName + '_' + 
               dbo.func_SetupRenameOfReports(DateType, Format, DatePlusMinus)
      From dbo.DDC_Report_Rename r
      Where r.ItemID = c.ItemID), Name)  
  From dbo.Catalog c
return (0)

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

Create Function [dbo].[func_SetupRenameOfReports]
( @DateType nvarchar(75), @Format int, @PlusMinus real  )
RETURNS nvarchar(75)
AS
BEGIN
  Declare @FirstMonth datetime, @LastMonth datetime
  Declare @OutputFormat nvarchar(75)

  Set @FirstMonth = CONVERT(datetime, Convert(varchar(2), DateAdd(mm, @PlusMinus, GetDate()), 103) + '/1/' + CONVERT(varchar(4), DateAdd(mm, @PlusMinus, GetDate()), 102))
  Set @LastMonth = DATEADD(dd, -1, DateAdd(mm, 1, @FirstMonth))

  Set @OutputFormat = 
    Case When @DateType = 'CurrentDate' Then Convert(varchar(75), DateAdd(dd, @PlusMinus, GetDate()), @Format)
         When @DateType = 'CurrentDayName' Then CONVERT(varchar(75), DateName(dw, DateAdd(dd, @PlusMinus, GetDate())))
         When @DateType = 'CurrentMonthName' Then CONVERT(varchar(75), DateName(mm, DateAdd(mm, @PlusMinus, GetDate())))
         When @DateType = 'CurrentYear' Then CONVERT(varchar(75), DateAdd(yy, @PlusMinus, GetDate()))
         When @DateType = 'CurrentBeginEndMonth' Then CONVERT(varchar(10), @FirstMonth, @Format) + '-' + CONVERT(varchar(10), @LastMonth, @Format)
    End

  If @OutputFormat IS null 
    Begin 
      Set @OutputFormat = ''
    End
 Return @OutputFormat

END

Затем настройте это так, чтобы хранимая процедура автоматически запускалась ежедневноваш сервер.У меня это работает только после полуночи каждый день.

2 голосов
/ 07 июля 2011

Для этого есть элемент MS Connect .У него всего несколько голосов, так что идите туда и проголосуйте ...

1 голос
/ 04 апреля 2013

Вот исправление вышеописанной хранимой процедуры, чтобы она действительно работала.

ALTER PROCEDURE [dbo].[ddc_RenameReports]

AS
SET NOCOUNT OFF ; 

  Update dbo.Catalog 
    Set Name = ISNULL((Select OriginalReportName + '_' + 
               dbo.func_SetupRenameOfReports(DateType, Format, DatePlusMinus)
      From dbo.DDC_Report_Rename r
      Where r.ItemID = c.ItemID And r.Active = 1), Name) 
  From dbo.Catalog c
  Update c
    Set c.Path = ISNULL((Select c2.Path + '/' + OriginalReportName + '_' + 
               dbo.func_SetupRenameOfReports(DateType, Format, DatePlusMinus)
          From dbo.DDC_Report_Rename r2
          Where r2.ItemID = c.ItemID AND r2.Active = 1), c.Path)       
  From dbo.Catalog c
    inner join dbo.Catalog c2 on c2.ItemID = c.ParentID 
return (0)
1 голос
/ 19 января 2011

К сожалению, нет, это невозможно.Это еще одна из тех функций, которые отсутствуют в SSRS, о ​​которых просили разработчики.

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