• [译]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文档,然后贴在文件里面上传到服务器即可. 当然也可以用来对比等操作.

    untitled

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

    bbbb

    资源:

    本文代码

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

  • 相关阅读:
    WordPress后台添加侧边栏菜单
    Redis 使用多个数据库及密码配置
    datatable 修改点击列头进行排序顺序
    命令行客户端操作pg数据库常用操作
    pg 创建自增id
    让 PHP COOKIE 立即生效(不用刷新就可以使用)
    js cookie
    使用mysql监视器即命令行下的mysql
    javascript 获取键盘上的按键代码KeyCode
    吞吐量(TPS)、QPS、并发数、响应时间(RT)概念
  • 原文地址:https://www.cnblogs.com/haseo/p/3949351.html
Copyright © 2020-2023  润新知