在SSRS 2008中动态创建文件名

时间:2011-01-18 14:46:13

标签: reporting-services ssrs-2008

我曾多次被要求在SSRS 2008中动态更改文件名。示例:ReportName_201101.RDL。 201101代表执行日期。这可以在SSRS 2008中完成吗?

5 个答案:

答案 0 :(得分:6)

如果您在导出报表时指的是文件名,并且恰好是从ASP.NET ReportView中提取它,则可以通过DisplayName属性设置名称。

ReportViewerControl.ServerReport.DisplayName = "ReportName_201101";

或(如果ProcessingMode是本地的):

ReportViewerControl.LocalReport.DisplayName = "ReportName_201101";

对于几乎所有其他案件,艾莉森是对的。

答案 1 :(得分:2)

有一个MS Connect item开放。它只有几张票,所以请到那里投票吧......

答案 2 :(得分:2)

另一项解决方法是在报告自动运行之前重命名该报告。这是粗糙的钻石。这可能仅适用于订阅的报表,而不适用于用户链接回的报表。 在ReportServer数据库上创建一个表,其中包含要在执行之前重命名的所有报表的列表。 表Report_Rename_Listing     RenameID int     ItemID uniqueidentifier     OriginalReportName nvarchar(350)     DateType nvarchar(75)     格式化int     DatePlusMinus真实 在同一台服务器上创建存储过程,并更改上表中的所有报告。

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

然后进行设置以使存储过程每天在您的服务器上自动运行。我每天午夜后才开始运行。

答案 3 :(得分:1)

不幸的是,不,这是不可能的。这是开发人员一直要求的SSRS中缺少的另一个功能。

答案 4 :(得分:1)

这是对上述存储过程的更正,以使其实际工作。

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)