MSSQL Reporting Services生成报表


  灵便的报表 性能是大多数业务 利用程序的一个要求,这些报表 性能在集成到 Web 利用程序中之后 用处更加 宽泛 。利用 SQL Server® 2000 Reporting Services 的最新版本,您 可以轻松地 存在来自各种数据源的报表生 顺利能 。在本文中,我将介绍 使用 Visual Studio® 和 Reporting Services 来编写报表,并演示如何将报表集成到 Web 利用程序中 。

  Reporting Services 是基于服务器的报表生成平台,该平台构建在 .NET Framework 上并与 SQL Server 2000 集成在一同, 因此您 可以 使用一个 扩大的基于 Web 服务的 API 将 丰硕的报表生 顺利能集成到 利用程序中 。 只管报表服务器 使用 SQL Server 作为报表的 储存库,但利用 OLE DB、ODBC 或 ADO.NET 提供程序的任何数据源都 可以用来为报表提供数据,这就使得 Reporting Services 成为在各种企业环境中生成报表的极佳工具 。

  Reporting Services 是作为 SQL Server 2000 的一 部分而授权的, 因此假如您有已授权的 SQL Server 的副本,则 可以在同一服务器上运行 Reporting Services 而无需 领取额外的许可证费用 。假如您决定在独立的、尚未经 SQL Server 授权的计算机(例如,Web 服务器)上运行 Reporting Services,您将需求购买额外的 SQL Server 许可证 。

  要开始 使用 Reporting Services,您 可以下载位于 SQL Server 2000 Reporting Services 的 120 天试用版软件,它还包括有关如何 获得该产品的安装媒体的 注明 。在安装该产品时,请确保选中包括示例报表的选项,由于我要将这些报表集成到本文的 Web 利用程序中 。

  Reporting Services 概述

  Reporting Services 报表设计 使用新的 Visual Studio .NET 2003 报表设计器,在安装有 Visual Studio 的同一计算机上安装了 Reporting Services 后,该设计器就 可以 使用 。设计器以新的基于 XML 报表定义语言 (RDL) 输出报表布局和数据 拜访的 注明,而 RDL 文件会公布到报表服务器 。假如您 盼望为消费者提供创作 性能,也 可以 使用第三方的报表设计器 。

  治理员 可以 使用基于 Web 的报表治理器来治理已公布的报表,而且 可以执行一些 使命,例如, 保障某些消费者组报表的安全或更改已部署报表的数据源衔接字符串 。消费者也 可以 使用报表治理器来阅读和查看报表;然而众多公司 偏向于 使用 URL 申请或 Reporting Services Web 服务,将报表查看直接集成到它们现有的内部 Web 站点或 利用程序中 。

MSSQL Reporting Services生成报表

图 1 Reporting Services 体系 构造

可以将报表参数化,这样消费者 可以在查看报表时从 取舍列表中进行 取舍;它们还 可以导出为多种 格局,例如,Microsoft®Excel、PDF 和 XML 。 只管实时报表提供最新的数据,也 可以将报表缓存一段 工夫以 普及性能并削减数据源上的负载 。关于商务智能 利用程序,报表 可以 拜访 Analysis Services OLAP 多维数据集,而且 Reporting Services 甚至 可以导入现有的 Microsoft Access 报表, 只管由于这两种技术间存在差别,它并不能 支撑全部的 Access 性能 。有关 Reporting Services 体系 构造的 详尽状况,请参见图 1 。

  设计第一个报表

   只管我介绍的重点在于将报表集成到 利用程序中而不是创作报表,但 相熟 Reporting Services 的最好 步骤便是马上着手 缔造一个新的报表 名目 。为此,请 打开 Visual Studio 并 使用 Report Project Wizard 缔造一个新的 名目,该向导位于 Business Intelligence Projects 部分 。为您的 名目指定一个名称,单击“OK”, 而后将显示报表向导对话框 。在您 取舍数据源的这一步骤中,单击“Edit”按钮,以便指定衔接到您数据库服务器上的 AdventureWorks2000,单击“OK”, 而后选中使其成为共享数据源的选项 。

  单击“Next”进入到“Design the Query”步骤,指定 容易的 SQL 语句(例如,“SELECT * FROM Product”), 而后单击“Next” 。Reporting Services 支撑显示一组固定列的 标准表 格局 (Tabular) 报表,也 支撑 使用带有动态列的 穿插表 款式视图的矩阵式 (Matrix) 报表, 因此为该报表 取舍 Tabular, 而后单击“Next” 。

  将某些列(例如,ProductID 和 Name)拖到 Details 部分并单击“Next” 。 取舍默许的 Bold 款式,单击“Next”, 而后指定您的报表服务器的 虚构目录的 URL,例如,http://MyServer/ReportServer 。现在,单击“Next” 。最终一步,您 可 认为您的第一个报表指定名称,例如,Products Report; 而后单击“Finish” 。

  该向导将会 缔造该 名目,同时还 缔造一个 可以由多个报表共享 AdventureWorks2000 数据源,以及一个在设计器中 打开的有关 Products 数据的报表(请参见图 2) 。默许状况下,显示使您 可以 批改报表设计的 Layout 选项卡 。

MSSQL Reporting Services生成报表

图 2 Visual Studio 报表设计器

  Data 选项卡用于指定报表的 查问,包括设置参数以便在执行报表时 揭示消费者提供值 。单击“Preview”选项卡来测试报表显示给消费者的 模式 。

现在,您 可以将附加的报表增加到该 名目,或者通过增加附加列、将数据分组、增加汇总、甚至是增加 可以显示来自 其余 查问的数据的附加表来 批改 Products 报表 。与众多报表设计器不同,Reporting Services 使用带外设计,这使得它 可以轻松地 缔造将各种源的数据集中在同一个位置的报表 。
  您方才 缔造的报表 名目由目前驻留在您的开发计算机上的一组文件构成 。为了将这些报表公布给消费者,您需求将该 名目部署到报表服务器 。

  部署和测试

  在部署报表 名目之前,需求指定将 名目部署到哪一个服务器 。假如您最初 使用该向导 缔造了报表 名目,那么您可能已经指定了 指标服务器 。

  要 审查该设置或指定一个新服务器,请 取舍“Project | Properties”来显示 Project Properties 对话框 。进行该设置使您 可以指定项 目标文件夹名和 Reporting Services Web 服务的 URL 。在菜单上 取舍“Build | Deploy Solution”将构建报表 名目, 而后将其部署到服务器 。

  在部署报表 名目后,您就 可以进行测试了 。已部署到服务器的每个报表都 存在唯一的路径,该路径 可以用于在阅读器中显示报表 。例如,要显示您 缔造的第一个报表,请 打开阅读器并导航到 http://MyServer/ReportServer?/Report+Project1/Products+Report 。这会以 HTML 格局出现报表并在页面的顶端显示一个工具栏,以便使您 可以对报表进行翻页、更改缩放比例,甚至以各种 其余 格局(例如,PDF)查看报表 。

  您还 可以通过导航到服务器上的以下 URL,来阅读已部署到服务器的全部报表项 目标列表:http://MyServer/ReportServer 。报表服务器提供使您 可以查看已部署的报表类型和查看报表的最小的消费者界面 。

  报表治理器是一个更加 友爱、 性能更 丰硕的工具, 可以通过 容易地导航到当地服务器上的以下 URL 来 拜访该工具:http://MyServer/Reports 。

  将报表增加到 Web 利用程序

  既然您晓得如何设计、部署和测试报表,就让我们将这些报表集成到 利用程序中吧!众多 Web 利用程序都包括针对每个消费者的自定义主页,通常称为“仪表板” 。这个页面通常提供针对消费者量身定做的摘要式信息并作为跳转点来 拜访 利用程序的 其余 性能 。

  我将 使用 Reporting Services 附带的示例报表构建一个仪表板来演示报表集成,如图 3 所示 。假如您在安装过程中安装了示例报表,您 可以 打开该报表 名目(安装到 Reporting ServicesSamplesReports)并将其部署到测试服务器 。您 可以 使用报表治理器工具通过阅读到 SampleReports 文件夹来测试示例报表 。

MSSQL Reporting Services生成报表

图 3 仪表板 Web 利用程序

  为消费者提供从 利用程序 拜访报表的权限的最 容易 步骤便是 使用超级链接 。如您已经看到的那样,每个报表都 存在唯一的、用于在阅读器中显示报表的路径 。关于仪表板 利用程序,报表应该在 径自的窗口中 打开, 因此我将为该超级链接指定一个 指标 。到目前为止,这是十分 容易的,然而关于 存在参数报表的报表(例如,Employee Sales Summary 报表)来说,状况又如何呢?要真正地将报表集成到 利用程序中,您通常需求为参数指定某些值,以便消费者不会被 时常 揭示 。

  Reporting Services 使这项 使命十分 容易:报表参数的值 可以指定为 URL 的一 部分 。例如,Employee Sales Summary 报表 存在 ReportYear、ReportMonth 和 EmpID 参数, 因此显示编号为 24 的员工在 11 月份的销售额的超级链接 可以是:

<a href="http://MyServer/ReportServer?/SampleReports/Employee Sales
  Summary&ReportMonth=11&EmpID=24" target="_blank">November Sales Summary
</a>

  不 存在在 URL 中指定的值的参数将 使用在报表设计器中设置的默许值, 因此 方才 展示的示例销售汇总报表 使用的 ReportYear 值是 2003 。Reporting Services 还有一组用于操纵报表显示 模式的内置参数 。这些参数通过外加前缀“rs:”来区别您自己的报表参数 。

  其中最有用的一个参数便是 rs:Format 参数,它用于指定出现报表的 格局 。这使您 可以包括不需求显示在 HTML 中的报表,还 可以 使用诸如 PDF 甚至是 XML 的 格局 。 其余常用参数是 rs:Command, 批示出要 利用到您所指定的路径的操作 。例如,rs:Command=Render 将出现一个报表,而 rs:Command=ListChildren 将列出文件夹中全部项 。

  假如您没有指定命令,Reporting Services 将查看您指定的路径并计算出要采取的适当操作,例如,出现报表 。图 4 显示了 rs:parameters 的列表 。

  另一组内置参数操纵各种输出 格局的行为并 使用 rc:prefix 。每个报表 格局都 存在其自己特定的一组参数 。例如,要以没有 题目行的逗号分隔值 (CSV) 格局出现报表,您应该 使用 rc:NoHeader 参数:

<a href="http://MyServer/ReportServer?/SampleReports/Company Sales
  &rs:Command=Render&rs:Format=CSV&rc:NoHeader=true">Company Sales
</a>

HTML 格局 存在十分多的 rc:parameters,在将报表集成到 Web 利用程序中时为您提供众多的灵便性 。假如 利用程序将报表参数 取舍传递到报表,那么您可能要通过将 rc:Parameters 设置为 false 来幸免 揭示消费者,甚至 可以通过将 rc:Toolbar 设置为 false 来关闭整个工具栏 。有关常用 HTML rc:parameters 的列表的 详尽信息,请参见图 5 。

  假如您的 Web 利用程序 使用框架来显示报表( 比方说,在左侧窗格中显示报表列表,在右侧窗格中显示报表内容),您将需求 使用 rc:LinkTarget 参数来指定内容框架的名称 。不然,当消费者点击报表中的任意嵌入链接时,阅读器就会 使用整个窗口来再一次显示报表,而不是保留导航窗格和内容窗格的框架 。

  您 可以 使用我介绍过的 URL 参数来增加“ 快捷启动”区域,该区域包括 运消费者 可以 打开常用报表的超级链接的列表(请参见图 3) 。每个超级链接将其 指标设置为 _blank 以在独立的阅读器窗口中 打开报表,并 使用诸如 rs:Format=EXCEL 这样的参数来操纵报表在阅读器中的显示 模式 。

  将报表嵌入到 Web 利用程序中

  假如在消费者查看报表时,不再 使用弹出新的阅读器窗口,您可能 盼望实际地将报表嵌入到自己的 Web 页中 。最 容易的 步骤便是在 Web 页上 使用 IFRAME,并 使用我介绍过的基于 URL 的 雷同技术来设置 SRC 属性 。假如您 使用这种技术,切记要将 rc:LinkTarget 参数设置为 IFRAME 的名称,以幸免当消费者单击报表的链接时在框架外弹出任意一个框架 。

  假如您以往设计过 ASP.NET 的服务器控件,您可能会认为 IFRAME 技术并不十分 圆满,由于它要求 Web 开发人员 了解 Reporting Services 的 URL 参数语法 威力构建适当的 SRC 字符串 。构建一个封装有全部参数并使开发人员 可以 容易地设置诸如 ReportPath 和 Zoom 之类的参数的服务器控件难道不是一个更好的想法吗?

  Reporting Services 十分容易地附带了名为 ReportViewer 的示例(安装到 Reporting ServicesSamplesApplicationsReportViewer 目录),它 可以实现这个想法 。该控件封装了 IFRAME 和 URL 拜访参数逻辑,并提供了一个更 容易的用于将报表嵌入到 利用程序中的 步骤 。要 使用该控件,请 打开并构建 ReportViewer 解决 方案, 而后通过阅读到 ReportViewer 解决 方案的 bin 目录中的 ReportViewer.dll,切换到您的 Web 利用程序并将该控件增加到工具箱中 。

  您 可以 使用该控件将嵌入报表增加到仪表板 利用程序中 。将控件增加到 Web 页,设置高度和宽度属性并增加以下代码以便在页面中显示一个报表:

Private Sub Page_Load(ByVal sender As System.Object, ByVal _ e As System.EventArgs) Handles MyBase.Load
  If Not IsPostBack Then
    ReportViewer1.ServerUrl = "http://MyServer/ReportServer"
    ReportViewer1.ReportPath = "/SampleReports/Sales Order" & _
      "Detail&SalesOrderNumber=so8153"
    ReportViewer1.Toolbar = ReportViewer.multiState.False
    ReportViewer1.Zoom = "75"
  End If
End Sub

   保障报表的安全

  Reporting Services 安全性 使用 相熟的基于角色的模型 。消费者和组 可以 调配给诸如 System Administrator 或 Browser 之类的角色,特定角色的全部成员都将同意执行为该角色定义的操作 。

  报表治理器用于执行与安全性 有关的 使命,例如, 调配消费者角色或 批改项(例如,报表)的权限等 。默许状况下,Administrators Windows 组同时是全部文件夹的 System Administrator 和 Content Manager 的成员 。为了 扩大报表 拜访到 其余消费者,消费者帐户或组必须增加到诸如 Browser 的角色中 。这通常是在文件夹级设置的,同时也 可以针对 径自的报表进行重写 。

  除了 掩护对报表的 拜访外,治理员还必须决定如何将报表衔接到源数据库 。 可以配置数据源 使用集成的安全性,以便 可以 使用目前的消费者帐户进行数据库衔接 。此外,还 可以定义 Windows? 或 SQL Server 消费者名和密码,并将其安全地存储在报表服务器数据库中 。这种 步骤要求报表运行在无消费者交互(例如,订阅所 波及的交互)的状况下 。

   使用 Reporting Services Web 服务

  到目前为止,我向来 使用的 URL 拜访 步骤提供了一种 快捷便捷的 模式来查看报表并指定参数,然而它不能提供对全部可用的报表治理 性能的 拜访 。Reporting Services 还附带了一个 存在 丰硕 性能的 API,为您提供通过 Web 服务对高级 性能的 拜访 。例如,该 Web 服务包括用于治理报表的数据源信息的 步骤或者枚举某个文件夹中全部项的 步骤 。

  我将 使用 Web 服务将报表的动态列表增加到仪表板 利用程序中 。为此,您将需求 使用 Add Web Reference 将一个 Web 服务 引用增加到 利用程序中 。指定到 Web 服务的路径,如下所示:

  http://MyServer/ReportServer/ReportService.asmx

  在增加 引用后,您 可以 缔造 ReportingService 代理类的一个实例,并调用该服务上的一个 步骤,就像我在此处 实现的一样:

Private Sub LoadSampleReports()
  Dim rs As New ReportingService
  rs.Credentials = System.Net.CredentialCache.DefaultCredentials
  Dim item As CatalogItem
  For Each item In rs.ListChildren("/SampleReports", False)
    If item.Type = ItemTypeEnum.Report Then
      DropDownList1.Items.Add(New ListItem(item.Name, item.Path))
    End If
  Next
End Sub

  假如您正在一个 Intranet 环境中部署 利用程序,您要通过将 增加到 利用程序的 web.config 文件中来启用 模仿 。您还要将客户端登录 把柄传递到该服务,如前面的示例所示 。

  ListChildren 步骤返回 CatalogItem 对象的数组,该数组 示意消费者有权查看的项,包括报表、文件夹和数据源 。Path 属性提供了到项的唯一路径,例如,/SampleReports/Sales Order Detail,Type 属性使您 可以区别报表和 其余类型的项 。

  既然我已经将报表名称加载到了下拉列表中,我必须决定如何在仪表板 利用程序内显示报表 。我决定 扩大我早期编写的 ReportViewer 代码而且 惟独消费者 取舍某个报表并点击“Go”按钮就更改 ReportPath 属性 。您还 可以 使用 IFRAME 并将 SRC 设置为适当的 URL(并为报表的名称外加前缀“http://MyServer/ReportServer?”) 。

  除了报表治理 性能外,Web 服务提供的 其余主要 性能便是报表出现 。大多数 利用程序(包括报表治理器 利用程序)都 使用 Web 服务 性能来列出报表或更改设置,并 使用我介绍过的 URL 步骤来显示报表 。然而,假如您想要 彻底操纵报表内容在 利用程序中 解决的 模式, 可以 使用 ReportingService 类的 Render 步骤 。该 步骤返回一个 可以在以后 保留到输出文件的字节数组;取决于 申请的 格局,输出文件 可以是图形文件或 Excel 电子表格 。假如您要以 HTML 格局出现报表,可能会更加复杂一些,由于您将需求 使用 RenderStream 步骤来分别出现图像或 其余资源 。

   只管本文的 探讨重点在于 Web 利用程序,您也 可以 使用 雷同的技术将报表生 顺利能增加到基于 Windows 的 利用程序中 。最 容易的 步骤仍是 使用 URL 拜访,或者从 利用程序启动消费者的阅读器,或者包括 Microsoft WebBrowser ActiveX? 控件并 使用 Navigate 步骤来加载适当的 URL 。当您想要更好地操纵某些操作(例如,在图片框中显示 后果或将文件直接 保留到磁盘的操作)时,Web 服务的 Render 信息工作者通常必须 解决两 品种型的报表:当他们需求收集信息时他们想要 获得的类型以及每周都出现在他们桌面上或他们电子邮件中的类型 。至此,我已重点 阐述了消费者猎取他们自己的报表的过程,但 Reporting Services 还包括一种十分 壮大的称为订阅的 性能,它使您 可以将报表“推”给客户 。

订阅报表

  Reporting Services 订阅 性能让消费者依照 方案 接纳报表 。报表通常会通过电子邮件发送到消费者,但 Reporting Services 同时还让您将报表生成到一个文件共享甚至 可以编写自己的提交 扩大 。这使您 可以轻松地 实现 散发 使命,例如,向每个销售代表以电子邮件 模式发送每周销售统计报表,或者设置每月财政报表在每个月的最终一天运行,并将其作为一个 PDF 写出到公司文件共享 。

  在设置订阅前,您需求考量报表将如何衔接到数据库以检索其数据 。 因此,订阅的报表将不会由消费者直接执行,您 无奈为数据源 使用集成的安全性,但在报表运行时必须指定要 使用的消费者名和密码 。假如您试图为 使用集成安全性的报表设置订阅,Reporting Services 将会返回一个 舛误 。

  要更改示例报表的数据源,请 打开“Report Manager | Sample Reports”, 而后单击 AdventureWorks 数据源 。该数据源由全部示例报表共享, 因此对它所做的任何更改将会影响全部报表 。选中“Credentials stored securely in the report server”选项,指定一个 存在 拜访 AdventureWorks 数据库权限的帐户的有效域消费者名和密码,选中“Use as Windows credentials when connecting to the data source option”, 而后单击“Apply”按钮 。请 留神,这种更改 象征着指定的帐户将始终用于衔接该数据库, 无论实际上是哪个消费者运行该报表 。

   因此,您已经 预备好 深刻探究并查看提供对订阅 拜访的 Web 服务 API 。 使用 Web 服务的这一 部分比 使用 List 或 Render 步骤要多一些 挑战,主要缘由在于可用选项的数量 。我将要 使用的 步骤是 CreateSubscription,它也属于 ReportingService 类 。有关该 步骤的参数的 详尽 注明,请参阅 ReportingService 类,但最 根本的是您需求指定要订阅的报表、生成 方案(例如,每周一早晨或每月的最终一个周五)、电子邮件选项(包括电子邮件地址)以及全部报表参数值 。

  我已经将名为 EmailSubscriber 的有用工具类包括在本文的示例代码中,该示例代码摘要了某些复杂的内容 。仪表板 利用程序 使用该类同意消费者指定他们的电子邮件地址并使 Employee Sales Summary 报表通过电子邮件每周一发送给他们 。在产品 利用程序中,您 可以调整每个消费者的报表,例如,当您 缔造订阅时, 可以依据员工的 Windows 消费者帐户检索他们的员工 ID, 而后适当地设置报表参数 。

  假如您不 盼望等到下周一才测试您的订阅,它有助于您了解有关 Reporting Services 如何 解决订阅 方案的更多信息 。当您 缔造一个订阅时,Reporting Services 会 缔造一个依据要求的 方案执行的 SQL Server 代理作业 。您 可以通过 打开 Enterprise Manager,铺开 Management、SQL Server Agent 和 Jobs 文件夹来查看这个作业 。该订阅作业将 存在“Report Server”类别,并以由 Reporting Services 用来跟踪该作业的 GUID 命名 。右键单击该作业并 取舍 Start Job,假如您已正确地设置了您报表的方方面面,您的报表将会发送电子邮件给您 。

接下来该怎么做?

  您 可以用来向 利用程序中增加主要报表生 顺利能的两个 其余 Reporting Services 性能包括 Data Driven Subscriptions 和 Snapshots,前者使您 可以设置消费者的邮件列表并以电子邮件 模式将特定参数化的报表发送给他们,后者是在 方案点的报表视图,同时还 可以提供报表的历史视图 。Reporting Services 是 使用模块化的体系 构造构建的,假如您需求更 壮大的 性能,它 可以使您 使用自己 爱好的、以 .NET 为 指标的语言来增加 性能 壮大的新 扩大 。