MicrosoftReportingServicesinAction:用自定义代码扩展Microsoft2000ReportingServic…
2008-04-28 12:51
369 查看
用自定义代码扩展MicrosoftSQLServer2000ReportingServices
Microsoft在2004年初发布了MicrosoftSQLServer2000ReportingServices(ReportingServices),以便为开发人员提供一个完整的报表平台,无论目标平台或开发语言是什么,它都可以轻松地与所有类型的应用程序集成。ReportingServices最显著的功能之一是它的可扩展特性,这是包括我在内的许多开发人员所欣赏的。您可以扩展或替换ReportingServices的几乎任何方面,包括数据、传递、性以及报表呈现功能。例如,扩展您的报表功能的一个方法是将它们与您或其他人编写的自定义代码集成在一起。在本文中,我将为您展示如何利用ReportingServices独特的可扩展体系结构来增强您的报表功能。首先,我将说明嵌入式和自定义代码选项是如何工作的。其次,我将为您展示您可以如何利用自定义代码来编写带有销售预测功能的高级报表。
我将假定您已经具有关于ReportingServices的基础知识,并且知道如何用表达式编写报表。如果您还不熟悉ReportingServices,请访问其官方站点。本文中讨论的代码示例和示例报表均包含在文章源代码中。示例报表将AdventureWorks2000用作其数据源,该数据库可以从ReportingServices安装程序中安装。
返回页首
编写嵌入式代码
顾名思义,嵌入式代码保存在报表定义(RDL)文件中;它的作用范围在报表层。您只能在Microsoft.NET中编写嵌入式代码。一旦代码准备好,您就可以使用全局定义的Code成员在报表表达式中调用它。例如,如果您编写了一个名为GetValue的嵌入式代码函数,就可以使用下列语法从您的表达式中调用它:=Code.GetValue()除了共享方法外,您的嵌入式代码可以包含任何与VisualBasic.NET兼容的代码。实际上,如果您将嵌入式代码视为项目中的私有类,就差不多了。您可以声明类级别的成员和常数、私有或公共方法等。
您可以编写嵌入式代码来创建可重用的实用函数,它们可以从报表的几个表达式中调用。例如,请考虑图1中所示的TerritorySalesCrosstab报表。
[b]图1.您可以使用嵌入式代码来实现作用范围在报表层的有用实用函数。[/b] 当数据缺失时(给定的行列组合中没有报表数据),该报表会使用一个名为GetValue的嵌入式函数来显示“N/A”。此外,GetValue还将缺失数据与NULL值区分开来。当基础值为NULL时,嵌入式代码会将其转换为零。
使用代码编辑器
要编写自定义嵌入式代码,您可以使用报表器代码编辑器—您可以在ReportProperties对话框的Code选项卡上找到它,如图2所示。
[b]图2.使用用于编写嵌入式代码的代码编辑器。编辑器中所示的GetValue函数可确定某个值是缺失还是NULL。[/b] 诚然,上述函数可以很容易地由一个基于Iif的表达式替换。但是,将逻辑封装在嵌入式函数中有两点优势。首先,它将表达式的逻辑集中在一个地方,而不是在报表中的每个字段都使用Iif函数。其次,它使报表具有更好的可维护性,这是因为如果您决定对函数进行逻辑更改,将不必跟踪并更改报表中的每个Iif函数。
报表设计器将嵌入式代码保存在报表定义文件的<Code>元素下。执行此操作时,报表设计器将对文本进行URL编码。如果您出于某些原因决定直接更改Code元素,就需要注意这一点。
处理缺失值
一旦GetValue函数可以区分报表中的NULL和缺失数据,我们就能以下列表达式作为交叉表报表的txtSales和txtNoOrders数据字段的基础:分别为
=Iif(CountRows()=0,"N/A",Code.GetValue(Sum(Fields!Sales.Value)))和
=Iif(CountRows()=0,"N/A",Code.GetValue(Sum(Fields!NoOrders.Value)))。
CountRows函数是ReportingServices所提供的几个原生函数之一,它可以返回指定范围内的行数。如果没有指定范围,它将默认为最里面的范围,这在我们的示例中解析为在数据单元格中定义值的静态组。两个表达式都会先使用1
相关文章推荐
- Microsoft Reporting Services in Action:用自定义代码扩展 Microsoft SQL Server 2000 Reporting Services
- Microsoft Reporting Services in Action:用自定义代码扩展 Microsoft SQL Server 2000 Reporting Services
- Microsoft Reporting Services in Action:用自定义代码扩展 Microsoft SQL Server 2000 Reporting Services
- 用自定义代码扩展 Microsoft SQL Server Reporting Services (RDL设计器,RDL,扩展代码)
- Microsoft Reporting Services in Action
- spring in action书中5.3节中代码错误
- 自定义ViewGroup之扩展FloatingActionButton
- [ios]纯代码实现UITableViewCell的自定义扩展
- Microsoft SQL Reporting Services – Running a Report from the Command Line
- How To Write In Sharepoint Log File 怎么对自定义的MOSS代码写日志
- Microsoft Windows SharePoint Services 与代码访问安全
- ADF代码调用组件事件(ADF trigger ActionEvent in backbean)
- Troubleshooting Timeout errors in Reporting Services
- 使用jquery提交form表单并自定义action的实现代码
- 《Spring Boot in Action》【3. 自定义配置】
- 用LinQ扩展方法,泛型扩展方法,实现自定义验证字符是否空、对象是否为null,及泛型约束使用,Action的使用
- Can’t Activate Reporting Services Service in SharePoint
- Compelling Analytics: SQL Server Reporting Services in Dynamics AX 2009
- Plug-in 自定义扩展点
- [翻译]如何使用webservice作为数据源去生成Microsoft Reporting Services 2005的报表 (转)