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
Was it helpful?

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.

GitHub Gist

Licensed under: CC-BY-SA with attribution
Not affiliated with dba.stackexchange
scroll top