Why does SSRS not update a report's description?
-
03-10-2020 - |
Question
I created a SSRS 2016 solution and deploy my reports. Each report has a "DESCRIPTION" property, that gets visible in the report's properties in report manager. There in the report manager, this property can be modified as well.
Unfortunately this description property will NOT BE changed after it was changed in visual studio and re-deployment of the report.
I checked the report server database to exclude any caching issues. There the value of the description column also stays untouched by/after re-deployment:
USE ReportServer;
select [Description], * from dbo.[Catalog] where Path like '/myReports/Demo';
Since this property is part of the report, I expect it to get modified by deployment. Is there anything we can config or do I miss anything? Why does this not work?
Environment:
ReportServer: SQL-Server 2016 Developer Edition
Microsoft Visual Studio Enterprise 2015
Version 14.0.25424.00 Update 3
Microsoft .NET Framework
Version 4.6.01055
SQL Server Data Tools 14.0.60812.0
Microsoft SQL Server Data Tools
SQL Server Reporting Services 13.0.1700.68
Designer für Microsoft SQL Server Reporting Services
Version 13.0.1700.68
Solution
This is a "known" issue/feature according to Microsoft. Descriptions, parameter defaults, subscriptions, etc. all fall under report "meta data" and are maintained separately on the Report Manager server. The only way to get these to change on the Report Manager is to either manipulate them manually or delete the report and upload anew. The links below deal specifically with this issue in regards to report parameters, but the same is true for descriptions.
Here is an excerpt from a Technet Article regarding parameters
Parameter properties that you set in Report Manager for a published report are generally preserved if you republish the report definition from Report Designer. If the report definition is republished as the same report, and parameter names and data types remain the same, your property settings are retained. If you add or delete parameters in the report definition, or change the data type or name of an existing parameter, you may need to change the parameter properties in the published report.
This is a related Connect issue
Parameter defaults do not get updated when re-deploying existing reports. These either have to be updated manually or the reports deleted and re-deployed. The latter regenerates all report ID's (GUID's) and makes traking usage from the ExecutionLog more difficult.
This is explained here (link) as being by design however I can't envisage parameter defaults and prompts being maintaned by an administrator.
An override mechanism similar to OverwriteDataSources should be added to Reporting Services projects to allow deploymnent from Visual Studio.
OTHER TIPS
After Steve's Answer I traced SQL Servers activity to find out more:
First the initial deployment with "myInitialDescription":
exec CreateObject
@ItemID='CC754C47-4E02-42A1-9F71-9ABF84FBE30A',@Name=N'TestReport',@Path=N'/myReports/Folder1/TestReport',@ParentID='36CE605B-F030-4A0E-BC3C-C51C8C423427',@Type=2,@Content=0x3.....743E,@Intermediate='AAAAAAAA-3967-457B-B23D-780D34489A30',@Property=N'<Properties>
<Language>de-DE</Language>
<HasUserProfileQueryDependencies>False</HasUserProfileQueryDependencies>
<HasUserProfileReportDependencies>False</HasUserProfileReportDependencies>
<PageHeight>297.000007629395</PageHeight>
<PageWidth>210</PageWidth>
<TopMargin>20</TopMargin>
<BottomMargin>20</BottomMargin>
<LeftMargin>20</LeftMargin>
<RightMargin>20</RightMargin>
</Properties>',@Parameter=N'<Parameters>
<UserProfileState>0</UserProfileState>
<ParametersLayout>
<ParametersGridLayoutDefinition>
<NumberOfColumns>4</NumberOfColumns>
<NumberOfRows>2</NumberOfRows>
</ParametersGridLayoutDefinition>
</ParametersLayout>
</Parameters>',@Description=N'myInitialDescription',@Hidden=0,@CreatedBySid=0x010500000000000515000000235F636BB4B7CD22828BA62802120000,@CreatedByName=N'domain\me',@AuthType=1,@CreationDate='2016-09-14 16:31:00.960',@ModificationDate='2016-09-14 16:31:00.960',@SubType=default
Then the Update process:
exec GetAllProperties @Path=N'/myReports/Folder1/TestReport',@AuthType=1
Returned:
Description = myInitialDescription
After that:
exec SetAllProperties @Path=N'/myReports/Folder1/TestReport',@Property=N'<Properties>
<Language>de-DE</Language>
<HasUserProfileQueryDependencies>False</HasUserProfileQueryDependencies>
<HasUserProfileReportDependencies>False</HasUserProfileReportDependencies>
<PageHeight>297.000007629395</PageHeight>
<PageWidth>210</PageWidth>
<TopMargin>20</TopMargin>
<BottomMargin>20</BottomMargin>
<LeftMargin>20</LeftMargin>
<RightMargin>20</RightMargin>
</Properties>',@Description=N'myInitialDescription',@Hidden=0,@ModifiedBySid=0x010500000000000515000000235F636BB4B7CD22828CC62802120000,@ModifiedByName=N'domain\me',@AuthType=1,@ModifiedDate='2016-09-14 16:38:36.550'
Excerpt of the SetAllProperties Procedure:
UPDATE Catalog
SET Property = @Property, Description = @Description, Hidden = @Hidden, ModifiedByID = @ModifiedByID, ModifiedDate = @ModifiedDate
WHERE Path = @Path
So right here we can see that the old DESCRIPTION is taken out of the previous version into memory and then gets passed to update itself with the old value instead of the new!
I wrote a TSQL script that will update the description based on the current version of the report.