[译]SSRS 报表版本控制

问题

如今商务智能应用广泛,对我们的商业愈加重要. 对新报表和的各种需求不断攀升. 自 SQL Server 2008 R2的 Reporting Services (SSRS) 开始,微软视图为减轻IT团队的工作量,推出了报表工具 Report Builder 3.0.  在此之前建立复杂的报表必须用BIDS (就是 Visual Studio ,2012以后叫SSDT).现在报表都可以用 BIDS或者Report Builder建立. 因为可以使用两个工具创建修改的关系. 报表的版本控制愈加困难.

当报表只用BIDS创建的时候,版本控制非常简单. 你随便用哪个工具都可以搞定 .比如 TFS, SVN, 或者Git.  但是用Report Builder 就比较复杂了, 这个玩意没集成任何版本控制系统. 此外Report Builder可以在服务端直接设计和保存 ,这个就使得版本控制更困难了.   Report Builder也可以存在本地.不过使用 共享数据集和数据源就有麻烦了.

为什么要进行版本控制

版本控制系统( version control system (VCS)) 有很多好处. 最大的好处就是可以还原先前版本. 一个好的版本控制系统也可以让你容易的查看版本的不同变化,meta-data等. 现在我们要同时用Report Builder和BIDS, 因此我们的版本控制不太容易了.

我找了很多资料,但是没有搞定. 我看到一个解决方案是把 RDLs 导出到SVN . 我看到一个解决方案是,把 RDL文件放到SVN,然后把开发服务器上报表的每个变动记录提交到VCS.不过解决方案和我的现有环境不匹配, 我们有些是用BIDS有些却是用 Report Builder, 有些在本地文件系统,有些则是在报表服务器.

我的SSRS版本控制系统

因为没找到适合的解决方案.我打算自己建立一个用来回复先前的版本.

这是一个非常简单的系统 . 我就实现了服务器上报表的变更记录 . 我在报表服务器数据库中添加了一个表格,用来记录报表的版本.(参见下面代码) . 然后我在 数据库上添加了  insert/update 触发器 .

版本记录表代码:

USE ReportServer
go
CREATE TABLE [dbo].[VersionStore](
      [VersionItemId] [bigint] IDENTITY(1,1) NOT NULL,
      [ItemId] [uniqueidentifier] NOT NULL,
      [Name] [nvarchar](425) NOT NULL,
      [ModifiedDate] [datetime] NOT NULL,
      [ModifiedBy] nvarchar(50),
      [InsertedDate] [datetime] NOT NULL,
      [Def] [xml] NULL,
 CONSTRAINT [PK_VersionStore] PRIMARY KEY CLUSTERED
(
      [VersionItemId] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

触发器代码:

USE ReportServer
go
ALTER TRIGGER StoreVersion ON dbo.Catalog
   FOR INSERT, UPDATE
AS
BEGIN
      INSERT INTO ReportServer.dbo.VersionStore
         ( ItemId
         ,Name
         ,ModifiedDate
         ,ModifiedBy
         ,InsertedDate
         ,Def
         )
         SELECT ItemId
              ,[Name]
              ,ModifiedDate
              ,u.UserName ModifiedBy
              ,GETDATE() InsertedDate
              ,CONVERT(XML, CONVERT(VARCHAR(MAX), CONVERT(VARBINARY(MAX), CONTENT))) Def
            FROM Catalog C
               INNER JOIN Users U
               ON u.UserID = c.ModifiedByID
            WHERE Content IS NOT NULL AND Type != 3
               AND ItemID IN (
               SELECT c.ItemID
                  FROM Catalog C
                     LEFT OUTER JOIN ( SELECT v1.ItemID
                                            ,MAX(v1.modifiedDate) modifiedDate
                                          FROM VersionStore V1
                                          GROUP BY ItemID
                                     ) V
                     ON C.ItemID = v.ItemID
                  WHERE Content IS NOT NULL
                     AND ( v.itemID IS NULL
                           OR v.modifiedDate != c.ModifiedDate
                         ) )
END

最后,我建立了一个SSRS报表来显示,每个报表的版本变化同时包含他们RDL/RDS的完整XML .  如果需要恢复早期版本,用户只要复制之前版本的XML文档,然后贴在文件里面上传到服务器即可. 当然也可以用来对比等操作.

因为XML展示起来比较大,所以默认情况下隐藏,需要的时候展开即可.

资源:

本文代码

原文地址:http://www.sqlservercentral.com/articles/Reporting+Services+(SSRS)/94119/

时间: 2024-08-30 06:30:19

[译]SSRS 报表版本控制的相关文章

[译]SSRS 编写带参数的MDX报表

编写MDX报表长久以来对于报表人员来说都比较痛苦. 当然如果你用查询设计器(Query Designer) 直接拖拉数据集那就很方便,但是你们有没有想过查询设计器是怎么创建MDX的.或者创建的参数是如何工作的? 我听到很多用Analysis Services 作为数据源的(包括我)报表人员说写参数太难了,所以他们用查询设计器做报表. 我想关键的问题是查询设计器做的MDX看起来要比实际上更复杂.如果你知道一些MDX基础,你应该能直接写MDX而不是用查询分析器 ,你就是喜欢用查询分析器也没关系.本文

SSRS 报表 如何加参数

SSRS 报表 如何加参数 连接上以后出现一个问题 就是给报表加上参数以后报表不断刷新,跟上次那个报表刷新是同样的问题.那么下面我们来解决一下. 1. 这是给报表添加默认参数进入页面后就不断的刷新刷新. ReportParameter para = new ReportParameter("ReportParameter1", "1");//参数 ReportViewer1.ServerReport.ReportServerCredentials = new MyR

SSRS 报表 递归列表

SSRS 报表 递归列表 1.需要数据集合中两个必备字段 ID PID 1.添加数据集合,在图上标记的地方点击右键添加数据集合,根据需求自己编写 2.点击插入选项卡 中的 矩阵  有两种方式 一种是 矩阵向导或者 插入矩阵 .这里我们选择插入矩阵 3.把部门名称拖动到列表第一行, 4.点击窗体下面的行组,如果没有组请参考图片一,如果有请忽略,选择小三角,点击组属性. 5.点开组属性之后需要更变的项有 1.常规-分组方式-ID 2.可见性-在报表最初运行时-隐藏-.勾选可以通过此报表项切换显示改为

SSRS 报表 如何匿名查看

SSRS 报表 如何匿名查看 昨晚一直研究怎么能匿名访问报表然后给客户看呢? 研究了好几种办法 我试过的分为三种,其中推荐我认为相对可控一点. 1.修改SSRS配置文件来禁止他验证登陆用户权限 操作过的文章:SSRS匿名登录 可以完全匿名访问,因为我们系统是涉及到客户要自己做报表的,所以这里屏蔽了权限问题,那么这种办法对我来说是不可行的.2.修改IIS配置 操作过的文章:匿名访问的一个间接方法 这种办法和第三种类似但是这个是直接操作IIS的如果集成到系统中也不是很科学. 我用的是通过程序伪装登陆

SSRS报表订阅

SSRS报表订阅参考链接: https://technet.microsoft.com/zh-CN/library/ms159762.aspx http://www.cnblogs.com/biwork/p/3258728.html ?订阅方式 ?文件共享传递 ?电子邮件传递 (前提:在RS配置管理器中设置电子邮件) 版本支持 ?标准订阅 手动配置多个订阅,设置共享路径(\\server\path),可设置文件名等 手动配置多个订阅,不可更改文件名 Enterprise?/Business In

SSRS报表基本结构与设置

SSRS报表基本结构与设置 整个报表设计雨区基础的结构可以分为"页眉(Page Header)"."页脚(Page Footer)"."主体(Body)"以及"数据"等四个主要的区域,如下图所示.设计画面中默认只显示主体以及数据区域,如果需要开启页眉或是页脚,则必须在主体外侧空白处右击,开启页眉页脚区域,便可显示与设计. 页眉与页脚主要是用来放置整份报表共同的说明性信息,例如:页码.制表日期.审核单位等.需要注意的是,由于页首

[AX2012 R3]在SSRS报表中使用QR二维码

AX2012是自带生成QR二维码的类,可以很方便的用在SSRS报表中,下面演示如何在RDP的报表中使用二维码,首先从定义临时表开始: 字段URL是要用于二维码的字符串,QrCode是container类型,保存最终生成的二维码图形二进制数据. DP类: class TestQrCodeDp extends SRSReportDataProviderBase { TestQrCodeTmp qrCodeTmp; } [ SRSReportDataSetAttribute(tableStr(Test

SSRS报表导出工具

? 使用背景 我们平时经常使用微软的SSRS为客户制作各种各样的报表,有很多时候客户都需要订阅功能,能够让报表以邮件的形式发送给客户的报表使用者. 也许我们知道微软的Reporting Service能够对报表完成订阅功能,并且能够将报表发送出去,但现实中往往需要更为灵活的发送邮件的方式和时间进行发送. 为此我们希望能够有一个小工具能够将SSRS报表以指定的格式进行导出,然后能够借助SSIS的各种强大组件将报表以附件的形式发送给用户. 导出工具 为此,开发了以下报表的导出小工具,供各位BI同事能

用C#访问SSRS自动导出SSRS报表

一.              新建一个winform应用程序WindowsFormsApplication1 二.              添加web引用 . 报表服务:http://dbpdhkcax05:80/webservice/ReportService2005.asmx 报表执行服务:http://dbpdhkcax05:80/webservice/ReportExecution2005.asmx 右击“引用”-> 添加服务引用->输入URL地址点“前往”载入服务后点“高级”-服