问题

如今商务智能应用广泛,对我们的商业愈加重要. 对新报表和的各种需求不断攀升. 自 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 报表版本控制的更多相关文章

  1. Dynamics AX 2012 R2 SSRS报表在VS2010中预览没有数据

    今天,Reinhard 在VS中制作SSRS报表,预览的时候发现显示不出数据. 仔细检查了数据处理环节和临时表里的数据,都发现没有问题. 用同事的账号登陆同样的开发环境,发现他的账号可以在VS中预览到 ...

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

    AX2012是自带生成QR二维码的类,可以很方便的用在SSRS报表中,下面演示如何在RDP的报表中使用二维码,首先从定义临时表开始: 字段URL是要用于二维码的字符串,QrCode是container ...

  3. SSRS报表服务随笔(rdl报表服务)-创建一个简单的报表

    这段时间一直在敲rdl报表,在国内的不这么留在,在国外的话,还是挺流行的,国内的话,这方面的资料很少很少,也踏过不少坑 先从SSRS了解起,SSRS全称 SQL Server Reporting Se ...

  4. [AX2012]在SSRS报表中获取从Menuitem传入的记录

    在较早版本的AX中我们运行一个报表时会用到类RunBaseReport,从它扩展一个子类,再由它运行报表,一个典型的Axapta3中的例子: class ReportProdInfo extends ...

  5. SSRS 报表 如何加参数

    SSRS 报表 如何加参数 连接上以后出现一个问题 就是给报表加上参数以后报表不断刷新,跟上次那个报表刷新是同样的问题.那么下面我们来解决一下. 1. 这是给报表添加默认参数进入页面后就不断的刷新刷新 ...

  6. SSRS 报表 递归列表

    SSRS 报表 递归列表 .需要数据集合中两个必备字段 ID PID 1.添加数据集合,在图上标记的地方点击右键添加数据集合,根据需求自己编写 2.点击插入选项卡 中的 矩阵  有两种方式 一种是 矩 ...

  7. SSRS 报表 如何匿名查看

    SSRS 报表 如何匿名查看 昨晚一直研究怎么能匿名访问报表然后给客户看呢? 研究了好几种办法 我试过的分为三种,其中推荐我认为相对可控一点. .修改SSRS配置文件来禁止他验证登陆用户权限 操作过的 ...

  8. SSRS报表-级联筛选参数刷新后不能默认全选 -问题解决方案

    好久没有写博客了,最近更新完善修复了SSRS报表的一些问题,和大家分享. 问题描述: 报表中,区域->专区->省份->地级市 此四个筛选参数是联动的,在DataSet中前一父级参数作 ...

  9. SSRS 报表开发过程中,除数为0的处理

    这里仅供记录,方法并非原创 在SSRS报表开发过程中,我们经常会遇到除数为0的计算 一般来说,我们都是通过IIF来进行处理,比如: =IIF(B=0,0,A/B) 但实际效果,则是,如果B=0的时候, ...

随机推荐

  1. pyVmomi入门

    简要说明 pyVmomi is the Python SDK for the VMware vSphere API that allows you to manage ESX, ESXi, and v ...

  2. android小知识之多个listview在同一界面只有item高亮

    我的工程里面一个activity有两个有圆角的listview,就是 自定义的 CornerListView继承ListView,  然后  我想圆角的listview A点击之后一个item会高亮  ...

  3. javascript集合求交集

    两集合求交集 思路: 1. 每一次从B数组中取一值,然后在A数组里逐个比较,如果有相等的,则保存.该算法复杂度为 O(MN). M, N 分别为数组 A B 的长度. 2. 因为A B 都排过序,所以 ...

  4. aliyun opts 集锦

    <一,>,aliyun 使用数据盘(aliyun新增数据盘使用,创建vg,aliyun 镜像系统本身未使用lvm-vg-lv) 1.1直接挂载文件系统 较易,不做分析 http://hel ...

  5. hdu 1394 zoj 1484 求旋转序列的逆序数(并归排序)

    题意:给出一序列,你可以循环移动它(就是把后面的一段移动到前面),问可以移动的并产生的最小逆序数. 求逆序可以用并归排序,复杂度为O(nlogn),但是如果每移动一次就求一次的话肯定会超时,网上题解都 ...

  6. linux下emacs安装

    1.下载地址:http://ftp.gnu.org/pub/gnu/emacs/ 下载文件:emacs-24.2.tar.gz 步骤: 一.安装依赖文件:  (先进入root:终端中输入 su -) ...

  7. BootStrap 智能表单系列 首页 (持续更新中...)

    背景:本码农.NET后端工程师,在项目开发中发现写了很多重复的代码, 于是自己整了一套根据配置来生成form表单的插件,针对表单的改动仅需要修改配置的json即可 使用中发现还是蛮实用的,于是开源出来 ...

  8. webservice跨域上传图片

    1.上传文件,在一般处理程序中处理 //1.接收post过来的文件 HttpPostedFile file = context.Request.Files[]; || file.ContentLeng ...

  9. C++运算符重载为成员函数

    #include<iostream> using namespace std; class Complex{ public: Complex(double r=0.0,double i=0 ...

  10. HDU OJ 5441 Travel 2015online E

    题目:click here 题意: 有个很暴躁的人,想坐车旅行n个城市.连接城市共有m条路(双向).他坐在车上很不爽,每次最多忍耐x分钟.但是每站下车他又可以休息(重新计时).总共有q次询问.问途中有 ...