[译]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/
[译]SSRS 报表版本控制的更多相关文章
- Dynamics AX 2012 R2 SSRS报表在VS2010中预览没有数据
今天,Reinhard 在VS中制作SSRS报表,预览的时候发现显示不出数据. 仔细检查了数据处理环节和临时表里的数据,都发现没有问题. 用同事的账号登陆同样的开发环境,发现他的账号可以在VS中预览到 ...
- [AX2012 R3]在SSRS报表中使用QR二维码
AX2012是自带生成QR二维码的类,可以很方便的用在SSRS报表中,下面演示如何在RDP的报表中使用二维码,首先从定义临时表开始: 字段URL是要用于二维码的字符串,QrCode是container ...
- SSRS报表服务随笔(rdl报表服务)-创建一个简单的报表
这段时间一直在敲rdl报表,在国内的不这么留在,在国外的话,还是挺流行的,国内的话,这方面的资料很少很少,也踏过不少坑 先从SSRS了解起,SSRS全称 SQL Server Reporting Se ...
- [AX2012]在SSRS报表中获取从Menuitem传入的记录
在较早版本的AX中我们运行一个报表时会用到类RunBaseReport,从它扩展一个子类,再由它运行报表,一个典型的Axapta3中的例子: class ReportProdInfo extends ...
- SSRS 报表 如何加参数
SSRS 报表 如何加参数 连接上以后出现一个问题 就是给报表加上参数以后报表不断刷新,跟上次那个报表刷新是同样的问题.那么下面我们来解决一下. 1. 这是给报表添加默认参数进入页面后就不断的刷新刷新 ...
- SSRS 报表 递归列表
SSRS 报表 递归列表 .需要数据集合中两个必备字段 ID PID 1.添加数据集合,在图上标记的地方点击右键添加数据集合,根据需求自己编写 2.点击插入选项卡 中的 矩阵 有两种方式 一种是 矩 ...
- SSRS 报表 如何匿名查看
SSRS 报表 如何匿名查看 昨晚一直研究怎么能匿名访问报表然后给客户看呢? 研究了好几种办法 我试过的分为三种,其中推荐我认为相对可控一点. .修改SSRS配置文件来禁止他验证登陆用户权限 操作过的 ...
- SSRS报表-级联筛选参数刷新后不能默认全选 -问题解决方案
好久没有写博客了,最近更新完善修复了SSRS报表的一些问题,和大家分享. 问题描述: 报表中,区域->专区->省份->地级市 此四个筛选参数是联动的,在DataSet中前一父级参数作 ...
- SSRS 报表开发过程中,除数为0的处理
这里仅供记录,方法并非原创 在SSRS报表开发过程中,我们经常会遇到除数为0的计算 一般来说,我们都是通过IIF来进行处理,比如: =IIF(B=0,0,A/B) 但实际效果,则是,如果B=0的时候, ...
随机推荐
- which 查看可执行文件的位置
我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索: which 查看可执行文件的位置. whereis 查看文件的位置. ...
- Web存储(Web Storage)介绍
Web存储即在客户端存储数据. 在没有Web Storage之前,是通过cookie来在客户端存储数据的.但是由于 浏览器能存cookie数比较少.如IE8,Firefox,opera每个域可以保存的 ...
- Azure 网站和通配符域
本文章由Azure 网站团队软件开发工程师Michael Candido 撰写 一些 Web 应用程序需要使用多个子域,在某些情况下还需要动态添加新的子域.例如,一个多租户 Web 应用程序可使 ...
- 1分钟搞定超慢SQL
前几天,一个用户的研发人员找到我了,说他们有个SQL语句非常慢,我说多慢?他们说:半个小时也没出结果.于是问他们要了SQL语句和执行计划,SQL语句就不能再这里贴出来了,下面是调整前的执行计划(略去某 ...
- POJ 3169 Layout (图论-差分约束)
Layout Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6574 Accepted: 3177 Descriptio ...
- Windows下Oracle服务介绍
如图,截取的是11gR2下RAC其中一个节点的Oracle服务列表. oracle在处理一般事务时并不需要全部启动其后台的所有服务由于oracle服务所占用系统资源比较大,一般情况下,对于单实例的OR ...
- Android消息机制之Handler
Android为什么要提供Handler Android建议我们不要在UI线程中执行耗时操作,因为这很容易导致ANR异常(在Android源码中我们可以看到,UI如果对用户的操作超过5秒无响应,就会报 ...
- java中如何计算两个时间段的月份差
直接计算,先取得两个日期的年份和月份,月份差=(第二年份-第一年份)*12 + 第二月份-第一月份
- Java 网络编程(一) 网络基础知识
链接地址:http://www.cnblogs.com/mengdd/archive/2013/03/09/2951826.html 网络基础知识 网络编程的目的:直接或间接地通过网络协议与其他计算机 ...
- C/C++中字符串的输入问题
standard C I/O 头文件:#include <stdio.h> . getchar() 原型:int getchar(void); 功能:从标准输入获取并返回下一个字符,并释放 ...