电脑技术学习

剖析SQL Server 2005中的报告服务架构

dn001
  SQL Server报告服务(SSRS)是一个综合性和可扩展的报告平台,它包括一组集成化的处理组件、可编程接口和工具。在本文中,我们将详细地讨论SQL Server报告服务(SSRS)架构。

  一、 简介

  SSRS是一个综合性的可扩展报告平台,它包括一组集成的处理组件、编程接口和工具。处理组件是SSRS多层架构的基础,并且能够彼此交互以检索数据、处理布局、生成和把一个报告提交到一个目标。SSRS支持两种类型的组件:

  · 处理器-确保SSRS的一致性,并提供一个基础结构供开发人员添加新的功能(扩展)。在当前的SSRS发行版本中,处理器本身是不可扩展的。

  · 扩展-由处理器调用的程序集,执行特定的处理功能,例如数据检索。开发人员能够编写定制扩展。

  图1描述了报告服务架构图;本文后面将更详细地描述这些组件。该图中的箭头显示在SSRS的内部和外部的各组件(外部工具,应用程序,服务和工具)之间的数据流。


图1.SQL Server报告服务架构。

  二、 ReportServer Web和Windows服务

  Report Server被实现为web服务和Windows服务的"共同体"。这些服务共同工作以宿主、处理和提交报告。

  当SSRS Windows服务启动时,它开始加载基本支持程序集(例如一个SQL数据提供者和接口库),但是它不加载扩展。在这个版本中,SSRS Windows服务处理加密和解密,用作调度和提交处理器的一个宿主。调度和提交处理器使用一个PollingInterval配置来监视"事件"(例如定时订阅)的SSRS目录和事件表格。事件指示SSRS"醒来"并开始处理。

  类似于任何.NET web服务,SSRS web服务经由IIS激活("唤醒")并且在ASP.NET工作进程(aspnet_wp.exe)中执行。可编程接口使"唤醒"事件更容易。

  三、 可编程接口

  报告服务可编程接口接收SOAP(经由SSRS web服务)和HTTP请求(经由URL存取)。

  SSRS 2005 web服务提供三种端点:

  · http://localhost/ReportServer/ReportService.asmx的提供是为实现与SSRS2000的向后兼容性。

  · http://<server>/ReportServer/ReportService2005.asmx是SSRS 2005中新的管理端点。

  · http://<server>/ReportServer/ReportExecution2005.asmx是新的执行端点。

  一个端点名描述了相应的使用目的。例如,执行端点的设计是为了提供报告执行(处理)接口,并且相应地提供对函数(例如Render)的存取功能。Render函数把生成的报告以一个指定格式(例如HTML)的流形式返回。

  可编程接口便利了从SSRS目录中实现信息检索和在SSRS组件之间的信息交换。
 
  当请求一个报告时(或者通过交互方式或者通过调度和提交处理器),可编程接口初始化该报告处理器组件并开始处理一个报告。

  四、 Report Processor(报告处理器)

  报告处理器把一个Report Server的所有组件绑定到一起,并且负责在SSRS内部的缓冲。缓冲是指,当一个用户打开该报告时,SSRS能够保持处理过的报告的一个副本并且返回该副本。缓冲能够缩短检索一个报告要求的时间,特别如果该报告很大或经常被存取的情况下。所有的报告缓存存储在SSRS目录(具体地说,是存储在ReportServerTempDB数据库)下,并且能够在SQL Server和Report Server重启时仍然存在。
报告处理器执行下列操作:

  · 执行-检索一个报告定义,并且通过数据处理扩展把它与检索的数据相结合。该操作生成一个中间格式。

  · 生成-使用生成扩展把中间格式生成为一个请求的输出格式。

  · 模型处理-这类似Report Builder生成的报告的执行操作,其中包含一个语义模型(或一个简单的模型,它用作一个报告的一个数据源)和一个语义查询。语义查询是指针对一个模型的一个查询;就象一个SQL查询一样,它生成一个报告的数据集。

  下面是报告处理器响应用户请求的方式:

  · 新的交互式报告请求-中间格式被生成并被传递以便生成扩展;用户接收生成的报告。

  · 请求生成缓存或快照-中间格式被生成并被存储在数据库中。

  · 请求缓冲的报告或快照-中间格式被从缓存(或快照)中检索并被传递以便生成扩展;用户接收生成的报告。
  五、 命令行工具

  在安装报告服务期间,自动地安装三个管理助理工具:

  · rs.exe-宿主脚本操作。例如,开发人员能够创建VB.NET脚本以发布一个组报告。

  · rsconfig.exe-用于修改到Report Server数据库的加密的连接信息。

  · rskeymgmt.exe-备份/恢复加密数据的对称密钥,该数据为一个Report Server所用;或如果该密钥被丢失的话,删除加密的数据。
注意 SSRS 2005已经放弃了rsactivate.exe工具,这个工具在以前的版本中用于在web场所下激活新的SSRS实例。在SSRS 2005中,激活是使用报告服务配置工具实现的。

  六、 报告服务扩展
  
  一个扩展是一个.NET程序集,为报告处理器所调用以执行某种处理功能。存在若干类型的扩展:数据处理,提交,生成,安全(认证和授权),SemanticQuery,ModelGeneration和EventProcessing,等等。

  对于一个被Report Server使用的扩展来说,必须把它安装到(假定是默认的SSRS配置)"C:Program FilesMicrosoft SQL ServerMSSQL.3Reporting ServicesReportServerbin"目录下,并且在"C:Program FilesMicrosoft SQL ServerMSSQL.3Reporting ServicesReportServerrsreportserver.config"下进行配置。

  一个扩展文件名的最后一部分通常暗示了该扩展的功能。例如,HTML生成扩展的文件名是"Microsoft.ReportingServices.HtmlRendering.dll"。

  定制扩展允许开发人员添加在SSRS中不能用的补充功能。例如,一个公司能够实现一个把报告提交到一个电话或一个传真的扩展。

  注意 该版本的SSRS不允许定制SemanticQuery,ModelGeneration或EventProcessing扩展。

  七、 数据处理扩展

  数据处理扩展负责从报告数据源检索数据。详细说来,这些任务包括打开到一个数据源的连接,分析查询并返回字段名,传递参数,以及检索和遍历数据集等。表格1概括了包括在SSRS中以及可以用之配置的数据处理扩展。

  表格1.能够使用SSRS进行配置的数据处理扩展

扩展 描述/注意事项
SQL Server 连接到并且从SQL Server数据库引擎(从7.0到2005版本)中检索数据。
OLE DB 连接到并且从OLE DB兼容的数据源中检索数据。
Microsoft SQL Server Analysis 连接到并且从SQL Server分析服务2000和2005中检索数据。对于分析服务2005来说,这个扩展支持Multidimensional Expressions(MDX)和Data Mining Expressions(DMX)。对于分析服务2000来说,这个扩展仅支持非参数化MDX。
Oracle 连接到并且从一个Oracle数据库中检索数据;这时,要求在一台安装有Reporting Server的计算机上安装Oracle客户端8i Release 3(8.1.7)。
ODBC 连接到并且从ODBC兼容的数据源中检索数据。
XML 从能够通过URL存取的任何XMLweb源(例如一个web服务器)中检索XML数据。

  所有的扩展(它们都(除了XML)使用SSRS进行安装)都利用了相应的.NET数据提供者。Microsoft.ReportingServices.DataExtensions库提供包装类,这些类负责提供到.NET数据提供者的SSRS数据处理扩展接口。

  开发人员可以创建其它定制数据处理扩展。

  八、 提交扩展

  提交扩展负责把报告提交到特定的设备或格式。在RS中的扩展包括电子邮件和文件共享提交。当用户(或管理员)创建一个订阅时,选择提交方法及相应的扩展。

  表格2概括了这些(包括在SSRS中的和使用SSRS进行配置的)提交扩展。

  表格2.SSRS包括的提交扩展

扩展 目的
邮件提交 把一个生成的报告提交到一个邮件收件箱。允许设置提交选项-控制输出格式以及是否该报告被提交为一个链接或作为一个附件。
文件共享提交 把一个生成的报告提交到一个共享文件夹。允许设置提交选项-控制一个目的地文件夹路径,一个输出格式以及是否该报告能够覆盖一个更旧版本或被添加为一个新的版本。


  开发人员可以创建其它定制提交扩展。

  九、 生成扩展

  Report Server生成扩展负责把一个报告的设计和数据转换成一种设备特定的格式。RS中包括的扩展包括HTML(3.2和4.0),Microsoft Excel,Text/CSV,XML,图像(BMP,EMF,GIF,JPEG,PNG,TIFF,WMF),以及PDF生成。

  注意 不象 SSRS 2000,它把Excel文件生成为一个含有特定Excel元标记的MHTML文件,SSRS 2005把报告生成为Excel的本机二进制格式。

  因为最后的生成阶段仅是与数据处理松耦合的,它能够使用户为同一个报告选择不同的生成选项而不需要重新查询数据源。

  另外,开发人员还能够创建其它定制生成扩展。

  十、 安全扩展
  
  本文经常使用术语"安全扩展",好象它是一个概念。事实上,存在两种相互联系的扩展:

  · 认证扩展,负责建立用户标识

  · 授权扩展,负责检查是否一个标识能够存取一个特定SSRS资源

  SSRS包括一个基于Windows认证的安全扩展。在建立一个用户标识后,一个授权过程决定是否配置一个Windows用户(或包含一个用户的一个Windows组)以存取一个报告服务器上的一个特别资源。

  开发人员能够创建其它定制安全扩展。一个SSRS实例仅能使用一个安全扩展。也就是说,或者使用Windows或者使用一个定制扩展,同一时刻只能使用一个。

  十一、 Report Server数据库

  SSRS目录下包括两个数据库:Report Server数据库(默认名是ReportServer)和ReportServer临时数据库(默认名是ReportServerTempDB)。Report Server数据库是一个SQL Server数据库,它能够存储SSRS配置部分,报告定义,报告元数据,报告历史,缓存政策,快照,资源,安全设置,加密的数据,调度和提交数据,以及扩展信息。

  注意 尽管用户能够直接存取在SSRS目录下的数据库并且能够直接修改SSRS使用的对象;但在实践中,不推荐(或不支持)这样做,因为在SSRS目录下的内在数据和结构不能被保证与不同版本的SSRS、服务包或补丁相兼容。

  请把Report Server数据库当作产品数据库之一来对待。尽管许多开发人员都习惯把RDL存储在一个单独的仓库中,并因此导致经常恢复RDL;但是,损失快照数据能够带来消极的业务影响。例如,用户可能使用快照的报告"相对静止"数据的能力来作一些业务决定。
SSRS使用的另一个数据库是Report Server临时数据库。这个数据库负责存储中间处理产品,例如缓冲的报告、会话和执行数据等。
注意 为了把临时快照存储在文件系统而不是数据库中,管理员应该完成下列步骤。

  首先,修改RSReportServer.config,并把WebServiceUseFileShareStorage和WindowsServiceUseFileShareStorage设置为True。
然后,把FileShareStorageLocation设置为一个全称路径;默认路径是"C:Program FilesMicrosoft SQL ServerMSSQL.3Reporting ServicesRSTempFiles"。

  不同于SQL Server的tempdb,当在ReportServerTempDB中的数据存储时限超过SQL Server时,Report Server将会重启。而且,Report Server能够周期性地清除ReportServerTempDB中的到期的和孤立的数据。

  在任何时间,所有的ReportServerTempDB中的数据都能够被以最小(或毫无)影响删除掉。例如,这种用户可能体验到的最小的影响是带来一种暂时的性能减弱(由于损失了缓存数据,而且失去了一个执行状态)。执行状态被存储在表SessionData中。执行状态结果的损失可能导致一个错误:"Execution 'j4j3vfblcanzv3qzcqhvml55' cannot be found (rsExecutionNotFound)"。为了解决执行状态损失问题,用户需要重新打开一个报告。

  提示 SSRS不能恢复数据库中删除的ReportServerTempDB或表。为了快速地从数据库中对象的错误删除中进行恢复,应该保留一个脚本或一个空ReportServerTempDB的备份。

  在一个向外扩展的发布中,SSRS目录是被跨该发布中所有的报告服务器共享的。

  十二、 调度和提交处理器

  调度和提交处理器宿主在SSRS Windows服务中,负责进行事件监视。当该调度和提交处理器收到一个事件时,它与报告处理器协作共同生成一个报告。在生成一个报告后,调度和提交处理器使用提交扩展来提交该报告。

  调度和提交处理器利用SQL Server Agent作为一个调度引擎。这个调度是基于拥有该调度的Report Server的本地时间。当一个管理员创建一个新的调度时,SSRS创建一个SQL Server Agent作业以运行于请求的调度。然后,SSRS在ReportServer数据库的Schedule表中增加一个新行。该行的ScheduleId字段是该作业的标识符。主管能够调度订阅、报告历史和快照执行。

  当调度时间已到,SQL Server Agent通过执行该调度作业生成一个事件。然后,这个作业在ReportServer数据库的事件表格中插入一个行。这个行担当一个调度和提交处理器的事件。

  调度和提交处理器每隔PollingInterval秒检查事件表并初始化适当的动作以响应一个事件。

  注意 这个PollingInterval是在rsreportserver.config配置文件中指定的,默认情况下,被设置为10秒。

  当SSRS Windows服务没有运行(调度和提交处理器没有处理事件)或SQL Server Agent没有运行(这个代理没有生成事件)时,调度和提交处理将会"中断"。

  注意 当SSRS Windows服务并没有运行而SQL Server Agent已运行时,SQL Server Agent的作业历史将显示:该被调度的请求("插入事件")成功运行。该作业仍然会成功,尽管被调度的操作能完成,因为调度和提交处理器并没有运行来处理该事件。

  十三、 Report Builder(SQL Server 2005中新增)

  在以前的SSRS版本中最常用的一个特征是开发终端报告的能力。微软在SSRS 2005中实现了这一功能。

  Report Builder是一个ClickOnce,特定的终端用户报告创作和出版工具,它提供拖放且容易使用的报告设计功能。

  注意 你可以通过搜索http://www.microsoft.com和阅读http://msdn.microsoft.com/msdnmag/issues/04/05/clickonce/default.aspx查找更多的有关ClickOnce应用程序的信息。
作为一个典型的ClickOnce应用程序,Report Builder是从一个浏览器中发布的,并在一个客户端计算机上执行。在安装期间,Report Builder不要求管理员权限,它运行于一个.NET代码存取安全的封装中。

  为了发布Report Builder,点击报告管理器的工具栏上的"Report Builder"按钮。作为选择,你可以使用"http://<server>/ReportServer/ReportBuilder/ReportBuilder.application"URL来启动Report Builder。Report Builder被发布 到"C:Documents and Settings<UserName>Local settingsApps2.0<obfuscated directory>"路径下。

  在你可以使用Report Builder之前:

  · 你必须拥有适当的权限,并且成为该报告消费者角色或一个定制角色的一个成员。

  · 必须至少出版一个报告模型。

  · 一个互联网浏览器必须允许你下载文件。

  使用Report Builder开发的报告能够报告设计器所解释。

  十四、 报告模型设计器(Report Model Designer,SQL Server 2005中新增)

  报告模型设计器负责生成Report Builder需要的报告模型。一个模型抽象了内在数据的复杂性;例如,一个模型允许把表名和表中的列名映射成一个终端用户能够容易理解的业务术语。

  报告模型设计器宿主在Business Intelligence Development Studio(BIDS)或Visual Studio中,由开发人员所使用。实际上,BIDS是一个仅有Business Intelligence工程而没有任何语言工程的Visual Studio外壳。这种Business Intelligence工程之一是报告模型工程,它能够启动报告模型设计器并允许开发人员创建模型。

  在这个发行版本中,模型和相应的特定报告仅能够使用SQL Server数据源:SQL Server数据库引擎和SQL Server分析服务。然而,开发人员能够借助链接服务器或分析服务统一数据模型来克服这一限制和存取其它数据源。二者都提供了一个薄的抽象层并允许存取任何OLE DB或ODBC兼容的数据源(包括Oracle)。

  十五、 Report Designer(报告设计器)

  Report Designer是一个面向开发者的综合性的报告创作、预览和出版工具,它宿主在Business Intelligence Development Studio 或 Visual Studio中。

  为了组织报告开发过程,Report Designer以选项卡形式提供一个报告的三个视图:数据,布局和预览。

  数据选项卡帮助开发人员定义数据源和设计数据集查询。Report Designer提供三种拖放式图形化查询设计器以帮助进行SQL查询。
布局选项卡帮助开发人员设计一个报告的图形化描述并且把图形化描述与数据关联起来。Report Designer提供一个拖放布局设计者和使用报告控件工具箱。布局设计很类似于Visual Studio为Windows和web应用程序提供的一个用户接口设计:你可以把报告控件拖放到一个报告中,然后根据需要安排它们,设置属性并且关联经数据选项卡设计的数据集。

  预览选项卡提供一个报告预览,以便开发人员能够据需要测试和调整报告。

  Report Designer还提供报告向导,它指导开发人员通过一系列步骤创建一个报告。然而,这个向导仅提供有限个数的布局方式供选择;不过报告开发者能够在向导结束后使用布局选项卡据需要修改该布局。

  最后,Report Designer允许开发人员把报告构建和发布到SSRS。

  注意 使用Report Designer开发的报告不能被Report Builder解释或编辑。
  十六、 Report Manager(报告管理器)

  Report Manager是一个基于web的报告存取和管理工具,用于存取一个Report Server的单个实例。用户能够使用报告管理器执行的一些操作,包括观察、查找和订阅报告、管理安全(报告存取和角色)、创建文件夹和在文件夹间移动报告、管理数据源、设置报告参数,等等。用户能够使用报告管理器执行的动作依赖于该用户的安全权限。调用报导管理器的默认URL是"http://<server>/reports"。包含Report Manager的二进制程序,页面及其它内容的默认位置是"C:Program FilesMicrosoft SQL ServerMSSQL.3Reporting ServicesReportManager"。

  尽管Report Manager提供有限的定制,但是既没有设计也没有提供足够的文档以支持定制。这使得其它公司可以使用若干定制选项,这可以结合:

  · 接受有限的Report Manager定制能力,例如修正它使用的式样表(默认地,位于"C:Program FilesMicrosoft SQL ServerMSSQL.3Reporting ServicesReportManagerStyles")并调整报告管理器通过站点设置(http://<server>/Reports/Pages/Settings.aspx)显示的名字。

  · 通过使用ReportingServicesWebUserInterface程序集中的类和利用它的未公开的功能理解报告管理器内在运行机制。

  · 编写定制管理页面来代替报告管理器中的一个或多个管理页面。

  · 编写一个显示一个公司信息的定制外观,并最终把用户引向报告管理器页面。

  · 编写一个定制报告管理应用程序来替换Report Manager。

  十七、 SQL Server Management Studio(SQL Server 2005中新增)

  SQL Server Management Studio提供一个基于Windows表单的集成环境来管理各种SQL Server组件。从SSRS角度来看,当用于管理单个SSRS实例时,该Management Studio功能类似于Report Manager。

  使用SQL Server Management Studio的优点包括针对SSRS web开发与发布的稳固的内容视图,轻微的改进性能,能够脚本化和"重新播放"管理任务,还有一个更具良好粒度的基于角色的安全设置。

  十八、 报告服务配置工具(SQL Server 2005中新增)

  该报告服务配置工具是一个Windows表单应用程序,它用于启动和停止Report Server Windows服务和重新设置报告服务器。例如,管理员能够改变Report Server的数据库和SQL Server名字,改变SSRS的Windows服务标识,并且改变用于存取Report Server 和报告管理器的虚拟目录。管理员应该能够启动报告服务配置工具,这可以通过使用"SQL Server 2005-> Configuration Tools->Reporting Services Configuration"菜单项或从SQL Server Configuration Manager中使用"SQL Server Reporting Services Properties"对话框中的"Configure"按钮来实现。

  十九、 RSPrint客户端控件(SQL Server 2005中新增)

  该RSPrint客户端ActiveX控件提供在客户端报告管理器中报告的打印功能。该控件提供一个打印对话框以便用户初始化一个打印工作,预览一个报告,指定要打印的页面,以及改变面边距。开发人员能够在代码中以编程方式存取这个控件以支持他们的应用程序中的报告打印功能。

  二十、 性能监视对象

  "SSRS Windows and Web Service"包括提供性能计数器(提供关于报告处理和资源使用情况的信息)的性能对象。这些对象分别称为RS Windows服务和RS Web服务。

  注意 在SSRS 2000中,web服务性能对象称为报告服务,而Windows服务性能对象称为提交处理器。

  为了获取更为完整的图形化参考和搜集更多的信息,管理员还应该能够监视SQL Server,ASP.NET,处理器,内存和物理或逻辑磁盘计数器。

  二十一、 总结

  在本文中,我们较细致地讨论了SQL Server报告服务(SSRS)架构及各种组件。最后,表格3提供了有关SSRS组件的一个摘要。

  表格3.报告服务组件小结

组件 简短描述
可编程接口 提供通过SOAP和HTTP请求存取SSRS的功能。
报告处理器 便利了从数据检索到数据生成的一组报告生成操作。报告处理器调用其它组件,例如调用数据扩展以有助于报告生成。
数据处理扩展 从一个数据源检索报告的数据。开发人员能够开发其它定制数据处理扩展。
命令行工具 三个工具,用于管理任务脚本化,在报告服务安装期间被自动地安装。
生成扩展 把报告的中间格式(报告布局和数据的结合)转换成一种设备特定的格式,例如HTML。开发人员能够创建新的生成扩展。
Report Server数据库 存储报告定义,报告元数据,报告历史,缓冲的报告,快照,资源,安全设置,加密的数据,调度和提交数据,等等。
Report Server临时数据库 存储中间处理产品,缓存和数据。
Scheduling and Delivery Processor 监视事件(例如基于时间的订阅),与报告处理器协作以生成一个报告,和提交扩展协作以把调度报告提交到一个在订阅中指定的位置。
提交扩展 把报告提交到特定的设备,例如邮件或一个文件系统。开发人员能够创建新的提交扩展。
Report Manager 提供基于web的报告存取和管理能力。调用Report Manager的默认URL是"http://<server>/reports"。
Report Model Designer 为在Report Builder中的使用生成报告模型。
Report Builder 提供拖放和易于使用的报告设计功能。Report Builder是一个运行于一个客户端计算机上的特定的终端用户报告创作和出版工具。
Report Designer 允许开发人员开发复杂的报告。Report Designer是一个综合性的报告创作和出版工具,它宿主于Business Intelligence Development Studio或Visual Studio中。
安全扩展 支持用户和组的认证和授权。开发人员能够(不包括SQL Server Express edition)创建新的安全扩展。
SQL Server Management Studio 提供基于Windows表单的集成环境来管理SQL Server组件(包括SSRS)。从报告管理的角度来看,Management Studio的功能类似于Report Manager,但是还提供其它能力。
Reporting Services Configuration Tool 管理启动与停止Report Server Windows服务和重新设置报告服务器。这是一个Windows表单应用程序。
WMI提供者 提供一个组WMI接口来管理对报告服务器的设置,并且有助于在网络中发现SSRS实例。
性能监视对象 提供SSRS Windows和web服务性能的一个视图。