[翻译]初识SQL Server 2005 Reporting Services Part 4
原文:[翻译]初识SQL Server 2005 Reporting Services Part 4
这一篇是关于SQL Server 2005 Reporting Services四篇文章中最后一篇:
Part 1,提供了创建基本报表的指南
Part 2,介绍了创建动态报表用到的SSRS核心特性和功能
Part 3,完全介绍了嵌入到SSRS中的图表控件
这里,在Part 4,我们把精力放在报表定义语言(RDL)上。RDL的定义在MSDN2给的很好,所以我在引用一下:
"A report definition contains data retrieval and layout information for a report. Report Definition Language (RDL) is an XML representation of this report definition."
我们将查看一个典型RDL文件的组成部分,讨论下怎样使用RDL知识优化和自定义报表。然后我们会了解一下报表设计器工具,这是随着SSRS而来的一个全新的即席报表工具。作为一个报表开发者,你可以创建一个终端用户可以使用的你提供的报表定义工具。怎么?有点迷惑?一会儿你就会了解。
为了试验我的例子,你得安装好了SQL2005,SSRS,VS2005. 如果对这个有疑问,可以转回Part 1去查看。然后请下载相关源代码文件。
现在在VS2005新建一个BI SSRS项目。选择工程-添加已有项,添加上共享数据源(ReportDB.rds)和报表定义文件,FirstReportMan.rdl.
报表定义语言
报表定义语言是一种为了定义报表基于XML的架构。而且从VS2005报表设计器生成的SSRS2005报表本质上就是XML。每个报表都有表头,表尾和主题。架构定义了:
l 报表布局-RDL文件中的主题部分定义了列在报表中的所有对象,包括字段,图片和表格。
l 各个数据集,数据集对应的数据源一集数据连接信息(当不适用数据源时)。
l 数据集中的字段信息。
l 报表中使用的所有参数。
您可以在这里看到对RDL的整体描述:
http://www.microsoft.com/sql/technologies/reporting/rdlspec.mspx
剖析一个典型的RDL文件
熟悉RDL文件最简单的方法就是深入分析一个典型的RDL文件。
让我们看一下下载的项目中的那个FirstReportMan.rdl文件,打开Visual Studio,打开这个文件。在解决方案资源管理器上右击FirstReportMan.rdl,选择查看代码选项,这样就会以XML的形式打开这个报表文件。整个XML内容在文件之中,但这里我们只看一下主要的部分。
文档元素
我们首先来看一下文档元素:
<?xml version="1.0" encoding="utf-8"?>
<Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/
2005/01/reportdefinition"
xmlns:rd="http://schemas.microsoft.com/SQLServer/
reporting/reportdesigner">
文档元素被称作是报表——这很正常。它引用了两个XML命名空间:
- http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition
- http://schemas.microsoft.com/SQLServer/reporting/reportdesigner
数据源
在RDL文件中,紧接着命名空间引用的就是数据源。在这个元素中,你可以为你的报表定义单个或多个数据源。
<DataSources>
<DataSource Name="ReportsDB">
<DataSourceReference>ReportsDB</DataSourceReference>
<rd:DataSourceID>b75a1ec2-03ed-4562-921e-28ca4150b215</rd:DataSourceID>
</DataSource>
</DataSources>
可以看出,数据源标记引用了我们的共享数据源ReportDB。而且还为数据源提供了一个GUID。如果没有使用共享数据源,结果应该是这个样子:
<DataSource Name="ReportingDemo">
<rd:DataSourceID>f34d206b-ca72-4ca6-9d5c-4151cd7eadc3</rd:DataSourceID>
<ConnectionProperties>
<DataProvider>SQL</DataProvider>
<ConnectString>Data Source=SKYNET05"SKYNETSQL2005;Initial z
Catalog=ReportingDemo</ConnectString>
</ConnectionProperties>
</DataSource>
边距
奇怪的是,紧接着数据源定义的是报表边距。不过请记住这是XML,所以标记的顺序无关,甚至不同报表拥有着不同的标记顺序。你还可能看到别的标记,比如说GUID散落在报表各个角落。
<BottomMargin>1in</BottomMargin>
<RightMargin>1in</RightMargin>
<rd:ReportID>b3751a5a-3ac4-4b97-bdc2-cea456baad26</rd:ReportID>
<LeftMargin>1in</LeftMargin>
<Width>5.625in</Width>
<InteractiveHeight>11in</InteractiveHeight>
<Language>en-US</Language>
<TopMargin>1in</TopMargin>
报表参数
报表参数是下一个重要的部分。每一个报表参数都有名字,数据类型和标签。标签用来作为用户输入的提示。每个参数还有一个ValidValue部分。ValidValue部分可以作为下拉列表框里的内容。
<ReportParameters>
<ReportParameter Name="ReportTitle">
<DataType>String</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>Report Title</Prompt>
<ValidValues>
<ParameterValues>
<ParameterValue>
<Value>My First Report</Value>
<Label>Title1</Label>
</ParameterValue>
<ParameterValue>
<Value>Customer Report</Value>
<Label>Title2</Label>
</ParameterValue>
</ParameterValues>
</ValidValues>
</ReportParameter>
<ReportParameter Name="ReportingUserID">
<DataType>String</DataType>
<Prompt>ReportingUserID</Prompt>
</ReportParameter>
</ReportParameters>
在这个RDL文件里有两个参数,ReportTitle和ReportUserID。ReportTitle参数是一个string类型的,它有两个有效值,MyFirstReport和CustomReport。对应着两个标签,Title1和Title2. 如果用户选择了Title1,那么报表将显示MyFirstReport. ReportUserID也是一个string类型的参数,只不过没有定义有效值。
主体
接下来是报表的主体部分。主要有两个标记,Height和ReportItems。
<Body>
<ReportItems>
…
</ReportItems>
<Height>0.875in</Height>
</Body>
高度属性定义了报表主体的高度。而这里真正重要的是ReportItems元素。RDL文件中所有报表对象都在这里。仔细观察就会发现在ReportItems元素下面有一个表格定义和两个文本框定义。每个都定义了大小和位置。在表格里有这些定义:
首先看一下表格:MyFirstTable。在表格定义的细节部分,我们定义了各个部分,如果有排序或者分组,那么就定义在<grouping>和<sorting>里面。这里我们只展示一下FirstName:
<Table Name="MyFirstTable">
<DataSetName>ReportData</DataSetName>
<Top>0.375in</Top>
<ZIndex>2</ZIndex>
<Details>
<TableRows>
<TableRow>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="FirstName_1">
<rd:DefaultName>FirstName_1</rd:DefaultName>
<ZIndex>4</ZIndex>
<Style>
<PaddingLeft>2pt</PaddingLeft>
<PaddingBottom>2pt</PaddingBottom>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
</Style>
<CanGrow>true</CanGrow>
<Value>=Fields!FirstName.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
现在来看一下表格的表头部分,我们在这里定一个表头的各个字段,对应于表格各个列:
<TableCell>
<ReportItems>
<Textbox Name="FirstName">
<rd:DefaultName>FirstName</rd:DefaultName>
<ZIndex>9</ZIndex>
<Style>
<PaddingLeft>2pt</PaddingLeft>
<PaddingBottom>2pt</PaddingBottom>
<FontWeight>700</FontWeight>
<BackgroundColor>LightSeaGreen</BackgroundColor>
<Color>WhiteSmoke</Color>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
</Style>
<CanGrow>true</CanGrow>
<Value>First Name</Value>
</Textbox>
</ReportItems>
</TableCell>
最后我们定义了TableColumn元素,包含了各个列信息:
<TableColumn>
<Width>1.25in</Width>
</TableColumn>
PageHeader
看完主题部分之后,我们来到了PageHeader部分,就像主题部分一样,这里面也有ReportItems元素,同样展示了各个元素。这里也有关于是不是在报表首页和末页显示表头信息的元素。
<PageHeader>
<ReportItems>
<Textbox Name="ReportTitle">
<rd:DefaultName>ReportTitle</rd:DefaultName>
<Width>3.25in</Width>
<Style>
<PaddingLeft>2pt</PaddingLeft>
<PaddingBottom>2pt</PaddingBottom>
<FontWeight>700</FontWeight>
<FontSize>16pt</FontSize>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
</Style>
<CanGrow>true</CanGrow>
<Value>=Parameters!ReportTitle.Value</Value>
</ReportItems>
<Height>0.375in</Height>
<PrintOnLastPage>true</PrintOnLastPage>
<PrintOnFirstPage>true</PrintOnFirstPage>
</PageHeader>
In our page header, we just have a single texbox, called ReportTtitle
数据集
数据集是下一个部分,每个数据集元素对应于报表中的数据集。每一个数据集又一个带有命令类型的查询定义,直接连接到数据源。下面就是字段,每个字段都有字段名称和类型,所以我们的数据集有如下定义:
<DataSet Name="ReportData">
<Query>
<CommandType>StoredProcedure</CommandType>
<CommandText>spr_CustomerSelectAll</CommandText>
<DataSourceName>ReportsDB</DataSourceName>
</Query>
<Fields>
<Field Name="CustomerID">
<rd:TypeName>System.Int32</rd:TypeName>
<DataField>CustomerID</DataField>
</Field>
最后是代码元素。这一部分就是我们嵌入报表的自定义功能的代码。
<Code>Public Function GetColor(ByVal status as String) as String
IF status = "100" Then
Return "White"
End IF
IF status = "101" Then
Return "Yellow"
End IF
IF status = "102" Then
Return "Tomato"
End IF
End Function
</Code>
书写自己的RDL文件
现在我们明白了在前段报表设计器发挥作用是后台做了什么事。理解了这些我们就可以在需要的时候写自己的RDL报表了。我发现在2005中写的代码要比2000少多了。然而,懂得RDL能在别的方面发挥大的作用。你可以不非得用Visual Studio来进行设计,你可以用自己的报表设计工具了。
使用Report Builder
Report Builder是SSRS的一个轻量级的补充,开发人员可以利用这个开发一个基于web的一键式部署工具。这个工具允许用户通过事先定义好的字段和功能函数来定义自己的报表。用户可以使用拖拽的方法创建自定义报表。在不用给予用户太多数据库操作的权限的情况下,这是个不错的选择。
定义报表
在这个练习中我们将建造一个报表定义。首先创建一个报表模型项目。然后可以看到其中有三个文件夹:
1. 数据源
2. 数据源视图
3. 报表模型
添加数据源
跟RS中其他地方一样,可以通过数据源向导构建。
添加数据源视图
数据源视图允许开发人员在构建报表的时候使用哪些数据表。也可以进行关联设置,这样报表就会知道该怎么进行连接操作。表格关联可以使用外键或者名称匹配架构。如果使用名称匹配架构,表格连接操作就会使用相同名称的字段或者主键。
添加报表模型
报表模型使用了数据源视图以及其包含的部分,所以用户可以利用这些元素来创建报表。报表模型也可以选择单个的字段信息。
使用Report Builder创建报表
我们可以在windows应用上打开ReportBuilder,然后通过拖拽操作就可以创建报表。用户可以决定要显示的字段信息和报表格式。
在建立报表之前得先安装好。Netframework2.0.
可以看到有个按钮式ReportBuilder,单击,第一次加载可能比较慢,然后选择模型,就可以进行报表构建工作了。
结论
希望这一系列会对SSRS方面有所帮助。
[翻译]初识SQL Server 2005 Reporting Services Part 4的更多相关文章
- [翻译]初识SQL Server 2005 Reporting Services Part 3
原文:[翻译]初识SQL Server 2005 Reporting Services Part 3 这是关于SSRS文章中四部分的第三部分.Part 1提供了一个创建基本报表的递阶教程.Part 2 ...
- [翻译]初识SQL Server 2005 Reporting Services Part 2
原文:[翻译]初识SQL Server 2005 Reporting Services Part 2 在Part 1文章中我们对SQL Server Reporting Services 2005(S ...
- [翻译]初识SQL Server 2005 Reporting Services Part 1
原文:[翻译]初识SQL Server 2005 Reporting Services Part 1 构建和部署基本报表 如果曾经存在一项工作使得“真正的”开发者给他的上司泡蘑菇,那就是构建报表.毕竟 ...
- Display Database Image using MS SQL Server 2008 Reporting Services
原文 Display Database Image using MS SQL Server 2008 Reporting Services With the new release of MS SQL ...
- [转]SQL Server 2005 Integration Services (SSIS) (3) - Business Intelligence Development Studio
本文转自:http://blog.csdn.net/me_online/article/details/1546281 三,SQL Server Integration Services 开发环境– ...
- SQL SERVER 2008 Reporting Services 的一些小问题集合
实验环境:服务器 Windows Server 2008 R2 Standard 64bit 数据库 SQL SERVER 2008 R2 Standard ...
- 实现SQL Server 2008 Reporting Services匿名访问报表有两种方法
一.通过修改SQL Server 2008的配置文件,去掉Windows的验证. 1.首先我们找到SQL安装目录下的两个Web.config配置文件,默认安装目录分别是(C:\Program File ...
- SQL Server 2005 Integration Services (SSIS)数据源之MySQL
一安装MySQL数据库的ODBC驱动 下载MySQL Connector ODBC 3.51.rar 单击setup按默认安装即可! 如下图所示,在ODBC数据源管理器中看到“MySQL ODBC 3 ...
- 安装 SQL Server 2005 的硬件和软件要求(官方全面)
SQL Server 2005 安装要求 本主题介绍了安装 SQL Server 205 的硬件和软件要求,以及查看安装文档的说明. 硬件和软件要求(32 位和 64 位) 访问 SQL Server ...
随机推荐
- WebHooks
WebHooks ASP.NET 5 Beta 7 版本 在 VS2015 发布的同时,微软也发布了 ASP.NET 5 的路线图(详见ASP.NET 5 Schedule and Roadmap ...
- VS2008让自己掌控的定义编译项目后,自己主动添加到工具箱
在VS2008中,假设在项目里写了一个用户控件.编译后这个控件是不会自己主动出现到工具箱的.按例如以下设置就能够解决问题 工具=>选项=>Windows窗口设计器=>常规=>A ...
- JQuery之初探
软考过后又进入了紧张的B/S学习阶段,因为自己的进度比較慢,所以更要加进学习.如今就来总结下JQuery的一些基础知识: JQuery定义 jQuery是一套跨浏览器的JavaScript库,简化HT ...
- Hadoop它——跑start-all.sh时间namenode不启动
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46353211 近期遇到了一个问题,运行start-all.sh的时候发现JPS一下 ...
- [Network]Introduction and Basic concepts
[该系列是检讨计算机网络知识.因为现在你想申请出国.因此,在写这篇博客系列的大多数英语.虽然英语,但大多数就是我自己的感受和理解,供大家学习和讨论起来] 1 Network Edge The devi ...
- 全排列 ( next_permutation)
SLT: C++的STL有一个函数可以方便地生成全排列,这就是next_permutation 在C++ Reference中查看了一下next_permutation的函数声明: #include ...
- 无废话WCF入门教程二[WCF应用的通信过程]
一.概述 WCF能够建立一个跨平台的安全.可信赖.事务性的解决方案,是一个WebService,.Net Remoting,Enterprise Service,WSE,MSMQ的并集,有一副很经典的 ...
- div中显示某个网页
原文:div中显示某个网页 1.<iframe>方法 2.ajax方法 ajax+流实现无框架限制块刷新: 主框架index页面: js: $(function(){ $("#d ...
- 【Java编码准则】の #12不要使用不安全或者强度弱的加密算法
安全性要求高的应用程序必须避免使用不安全的或者强度弱的加密算法,现代计算机的计算能力使得攻击者通过暴力破解能够攻破强度弱的算法.比如,数据加密标准算法DES是极度不安全的,使用类似EFF(Electr ...
- 进程切换switch_to宏第三个参数分析
进程切换一般都涉及三个进程,如进程a切换成进程b,b开始执行,但是当a恢复执行的时候往往是通过一个进程c,而不是进程b. 注意switch_to的调用: switch_to(prev,next,pre ...