我曾多次被要求在SSRS 2008中动态更改文件名。示例:ReportName_201101.RDL。 201101代表执行日期。这可以在SSRS 2008中完成吗?
答案 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)