SQL 服务器报告服务

扩展 SSRS:开发自定义制图组件和呈现扩展内容

Manpreet Singh

下载代码示例

SQL 服务器报告服务 (SSRS) 提供了优秀的图表功能,以允许您来表示数据和统计数字,以可视方式在常规和非常规图表的形式和各种报表呈现扩展插件,让你在多种不同的格式如 PDF、 CSV、 XML、 Word 和 Excel 中保存一份报告。 尽管如此,本机的选项可能并不总是满足您的业务需求或呈现报表正是您所希望的方式。 幸运的是,您可以扩展本报告所述的服务,以创建您自己自定义的图表组件和呈现扩展插件使用 SSRS 所提供的各种可扩展性功能。 在本文中,我会给你创建自定义图表组件和各种方式将它集成 SSRS 报告的过程的概述。 此外将介绍 (通过扩展一个本机),您就可以开发自定义报告呈现器来呈现报表,就像你会喜欢。 要尝试自己,下载完整的代码在 archive.msdn.microsoft.com/mag201201SSRS 并将其用作您的起始点。 请注意创建呈现扩展和报告项目的过程不曾改变 SQL Server 2005。 虽然我生成的代码示例使用 SQL Server 2008 R2 环境,非常适用于 SQL Server 2005 和 2008 年以及本文中讨论的概念。 如果您正在开发的 SQL Server 2008 R2 报告服务,您可以构建使用 Microsoft 的自定义组件。以及网框架 4。 SQL Server 2008 报告服务,但是,对于。NET 框架 3.5 是最高版本。NET 框架的支持。

该 Web 站点的用户报告

若要欣赏开发自定义图表组件和呈现扩展插件的过程,请考虑组织希望生成每月的网站使用情况报告,说明的普及的情况,说,不同地区的电子商务 Web 站点。 报告的核心是 Web 站点用户的图表,以图形方式表示的区域,每个用户的地理分布,如中所示的图 1

Web Site Users Chart
图 1 Web 站点用户图表

图表是非常类似于一个条形图,虽然没有本机的图表组件适合条例草案 》,因为您不能用代表人,如中的自定义图像替换图表的条形图图 1

这种情况肯定呼吁创建您自己的自定义图表组件。 使用 GDI + 基类库 (的一部分。NET 框架) 和一点点的数学,很容易绘制图表使用基本形状像圆和矩形和定期的位图图像的形式生成图表。 这种组件,它使用生成的图像的输出。NET 框架图形库,可以结合 SSRS 报告中以多种方式:

  • 使用自定义报表项:SSRS 支持创建自定义报表项目例如,内置的图表组件,可以集成到一份报告。 自定义报表项呈现为图像。 这篇文章,爵士乐了您的数据使用自定义项目在 SQL 服务器报告服务报告 」 (msdn.microsoft.com/magazine/cc188686),演示如何创建自定义报表项。
  • 使用 SQL CLR 函数:您还可以使用 SQL CLR 用户定义函数 GDI + 基于图表组件结合 SSRS。 这就需要加载到 SQL Server 的 system.drawing.dll。 一旦生成图表的核心程序集被加载到 SQL Server,您可以创建基于它的用户定义的函数。 然后可以将图像报告项目配置为呈现从数据库图表图像。
  • 使用 ASP。网络处理程序:您可以使用 ASP。要将图表组件集成 SSRS 报告与 Web 应用程序的净处理程序。 ASP。净处理程序可以将图表组件作为可下载的位图图像,返回与传递给它使用查询字符串的任何参数。 若要整合与 SSRS 输出的处理程序,你需要做的全部是设置为外部的图片框中的图像源和提供的 URL 处理程序作为表达式。

伴随这篇文章的代码示例演示了创建 Web 站点用户图表和它结合使用 SQL CLR 函数的 Web 站点使用情况报告的过程。 WebSiteUsersChartCore 项目包含 WebSiteUsersChart 类,该类将图表中基于每月的使用率数据 dbo.usp_GetUsageData 存储过程返回的 JPEG 图像的形式呈现。 WebSiteUsersReportDB.bak 文件包含与后端所需的表和存储的过程的 WebSiteUsersReportDB 数据库的备份。 SQL CLR 函数 GetUsersChart 负责提供必要的参数来的图表组件和获取图像输出。 数据集的 RegionWiseReport DataSetWebSiteUsageChart 获取图像从 SQL CLR 函数使用以下 SQL 查询中,传递所需的参数:

SELECT dbo.usp_GetUsersChart(500, 300, N'Website Users', @RegionName,
  @DateID % 100, @DateID / 100) AS Chart

最后,ImageChart 图像控件呈现来自数据库的图像。

使用 SQL CLR 函数或 ASP 的主要优势。然后您可以使用同一图表组件以外的 SSRS,说在 Web 应用程序,而不需要任何进一步的发展努力或自定义网络处理程序方法,而不是开发自定义报表项。

呈现扩展的自定义单词

虽然有关本机 Word 呈现扩展插件完美呈现 Web 站点使用情况报告,不支持某些功能例如,表的内容或有肖像和其他中横向方向,某些页面。

从零开始编写自定义呈现扩展插件不是一件简单的任务 ; 您希望它能以各种组合的报告元素,将它们转换为相应的格式和目标格式支持的数据元素。 此外,扩展本机 SSRS 呈现扩展插件不直接支持。 幸运的是,从本机 Word 呈现扩展插件的输出满足大部分报告,我需要,所以真正想要的就是一种方法将一个表的内容添加到它并能够控制在页级别的方向。

为了实现我的目标,我可以编写自定义呈现扩展插件,而获取报告输出呈现由本机 Word 扩展名,然后修改报告输出流,所需的方式向用户最终输出使用 Word 自动化。

CustomWord 项目中的类 CustomWordRenderer­RenderingExtension,在源代码中的突出显示的重要步骤,参与实现所需的效果。 有关本机 Word 呈现扩展插件的输出与标准头模板包含一个标题页面和目录,合并,并且还可以包含项目如版权的注意,免责声明,等等。 文档结构图标签,通过本机的扩展名呈现为表条目,有适当的标题样式,使其显示在目录中的应用。 最后,更新的内容表和合并的文档传输给用户。

本报告所述的所有服务扩展必须都实现 IRenderingExtension 和 IExtension 的接口。 这些接口要求您提供下列方法和属性的实现:

IExtension 接口的成员:

  • LocalizedName 属性
  • SetConfiguration 函数

IRenderingExtension 接口的成员:

  • GetRenderingResource 函数
  • 呈现功能
  • RenderStream 函数

所有这些成员,Render 方法是最重要的并包含自定义 Word 渲染器核心实现。 因为我已经拿到带格式的报告,我不必解析报告的各项内容,并因此 render 方法将不包含任何代码来直接处理报表数据输出从本机 Word 的呈现扩展插件,或设置元素的格式。 我要做的就是报告得到有关本机 Word 呈现扩展插件,用 Microsoft Word (使用 Word 自动化) 将其打开,进行必要的修改和流到用户修改的文档。

为过程开发自定义呈现扩展插件的详细信息,在看到这篇文章,"显示您数据你的方式与自定义呈现器为报告服务" msdn.microsoft.com/magazine/cc163840

重要的一点,注意到你在决定作出之前使用此处讨论的概念是 Microsoft 不支持微软办公软件的服务器端自动化。 如果你认为发展基于我讨论的方法自定义呈现扩展插件,第一次在看看这篇文章,"考虑为服务器端自动化的办公室," support.microsoft.com/kb/257757

如果您不想使用 Office 自动化,还有另一种有趣的方法,你可以考虑 — 呈现报表作为 XML 文件使用本机 XML 呈现扩展插件和应用自定义 XSLT 样式表生成 WordML 文档。 这种方法的缺点是你会存储在两个地方的格式的报告:在 XSLT 样式表和其他报告 RDL 文件中的一个。

使用示例代码

这篇文章的源代码包含以下项目:

  • WebSiteUsersChartCore 项目
  • TestHarness 项目
  • CustomWordRenderingExtension 项目
  • WebSiteUsersReport RDL 文件
  • RegionWiseReport RDL 文件
  • WebSiteUsersReportDB 数据库备份文件
  • 报表页眉模板文件

WebSiteUsersChartCore 项目演示如何创建从 region-wise 的使用情况统计信息的网站用户图表组件的过程。 TestHarness 项目用于测试并验证所使用的 Windows 窗体应用程序的图表组件生成的图像着色的 WebSiteUsersChartCore 程序集的输出。 CustomWordRenderingExtension 项目包含执行自定义 Word 呈现扩展插件,基于 Word 的自动化方法。 网站­UsersReport 是调用 RegionWiseReport 子报表的呈现 region-wise 内容,每个区域的主报表。 RegionWiseReport 报告还呼吁,使网站用户图表网站用户图表组件。 它因此使用图像通过对 usp_GetUsersChart 的调用 SQL CLR 标量值函数通过控制在适当的参数传递。 WebsiteUsersReportDB.bak 文件包含 WebSiteUsersReportDB 数据库的备份。 报告和图表组件基于此数据库中的数据。 页眉模板文件包含一个标题页和表的内容,在肖像格式。 此文件附加到本机 Word 文档报告,使用 Word 自动化的开头。

若要部署示例代码,生成包含 WebSiteUsersChartCore 和自定义的 WebSiteUsersChart 解决方案­WordRenderingExtension 项目。 将 CustomWordRenderingExtension.dll 程序集复制到报表服务器的 bin 目录中。 在报表服务器的 rssrvpolicy.config 文件以授予完全信任,有关自定义呈现扩展插件中进行以下条目:

<CodeGroup
class="UnionCodeGroup" version="1"
PermissionSetName="FullTrust"
Name="CUSTOM WORD"
Description="This code group grants Custom Word Renderer code full trust.">
  <IMembershipCondition
    class="UrlMembershipCondition"
    version="1"
    Url="C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting
        Services\ReportServer\bin\CustomWordRenderingExtension.dll" />
</CodeGroup>

接下来,在报表服务器中注册的呈现扩展插件为其文件中进行以下条目:

<Extension Name="Custom WORD" Type=
  "CustomWordRenderingExtension.CustomWordRenderer,
  CustomWordRenderingExtension">
  <Configuration>
    <DeviceInfo>
    <SourceHeaderFileName>C:\WorkingDirectory\
      Header.doc</SourceHeaderFileName>
    <SourceBodyFileName>C:\WorkingDirectory\Body.doc</SourceBodyFileName>
    <MergedFileName>C:\WorkingDirectory\MergedOutput.doc</MergedFileName>
    </DeviceInfo>
  </Configuration>
</Extension>

C: 驱动器上创建一个工作目录驱动器的呈现扩展插件和 Header.doc 复制到它。 如果您要使用一个不同的目录,别忘了也 ; 为其文件中进行相应的更改 这些配置条目是由自定义 Word 渲染器拾起。 当然,您必须具有 Microsoft Word 的呈现扩展插件的安装工作。

下一步,部署报表服务器上的 WebSiteUsersReport 和 RegionWiseReport 的报告。 运行 WebSiteUsersReport 报告。 单击导出菜单和检查下拉的内容 — 您应该会看到列表中的"自定义单词"呈现扩展插件。 去吧,做出口。 如果你最终得到一个空白文档,请检查事件日志中的错误。

接近尾声了

每当本机图表组件不符合条例草案 》,您应该考虑实施自定义组件。 您可以通过利用 GDI + 发展技能开发复杂的图表。 请记住您可以编写自定义呈现器而无需编写一切从零开始,通过修改的本机的输出。

总是有可能去完全自定义和生成报告生成新的应用程序,而是往往很容易达到相同的效果 SSRS 使用自定义代码,在合适的地方插入几件。 所以走一步,建立自己的图表组件和报表呈现程序而不用担心。

Manpreet Singh 是一名顾问与 Microsoft 服务全球化,他在哪里部分的商业智能和集成工程组。他主要在设计和开发工作。基于微软商业智能堆栈以网络为中心的商业智能解决方案。

多亏了以下技术专家审查这篇文章: Yaswant Vishwakarma