首页 > 代码库 > [翻译]初识SQL Server 2005 Reporting Services Part 1
[翻译]初识SQL Server 2005 Reporting Services Part 1
构建和部署基本报表
如果曾经存在一项工作使得“真正的”开发者给他的上司泡蘑菇,那就是构建报表。毕竟那并不是真正的开发,更像是制作美化的格式。而且你所使用的构建报表的工具试图提供一个抽象层,这个经常妨碍你对报表的真正掌控。我以前经常听到这些争论。如果这听上去像你曾经在一个水制冷器旁边的对话,那么我请你仔细关注一下SQL Server 2005 Reporting Services(SSRS)。
SSRS 2005 SQL Reporting Services的最新版本,而且是所有SQL Server 2005版本中的组件。利用SSRS 2005 你可以快速轻易地从多数据源创建报表。完成的报表可以直接展现在报表服务的网站上,web应用程序或windows应用程序上。报表可以以多种方式进行输出,包括逗号分隔的文本,XML,便携文档格式(pdf)和Excel。
这篇文章是四部分之中的第一部分。这些文章将对SQL Server 2005 Reporting Services进行深入涉及:
l Part 1 主要是对SSRS的基本概要介绍。主要展现了如何构建报表,简单报表,还有会领你熟悉基本的报表设计环境。
l Part 2 将会讲述客户函数,聚合函数,子报表,矩阵控件,钻去报表和排序的使用。
l Part 3 将深入讲述Charting 控件。
l Part 4 进一步挖掘报表定义语言(RDL)和新的报表构建工具。
安装和配置报表服务
经过多次讨论,我们决定在这样一篇关注怎样利用SSRS构建基本报表的文章里,完全安装和配置细节显然不应包括在内,尤其是网上已经有很多关于这方面的资源。呶,
http://msdn2.microsoft.com/en-us/library/ms143736.aspx
还有,
http://www.awprofessional.com/articles/article.asp?p=357694&seqNum=1&rl=1
值得回顾一下的是在拥有报表服务的机器上的安装SSL的细节。
——编辑的安装笔记——
为了测试这篇文章中的报表,我经历了一个在单计算机的Windows XP上的安装过程(就是说我可怜的小笔记本上安装了SQL Server 2005 Reporting Services还有别的一些东西)。鉴于当时我安装SQL Server 2005的时候没有安装SSRS(我那时候没有IIS),我首先得安装IIS 5.1,然后安装报表服务(从SS 2005的安装盘中)。然后我直接跳到了报表服务配置管理工具(所有程序—>SQL Server 2005—>配置工具)。左边的面板一组需要配置的条目:
直到数据库安装这一步所有的一切都很顺利。因为我安装SQL Server的时候没有同时安装SSRS,ReportServer和ReportServerTempDB没有被默认创建好。这两个数据库存储着所有报表定义和报表服务器的配置信息。在用服务证书连接到SQL Server上的时候,看上去这两个数据库已经创建好了,但是我收到一个错误提示说我没有权限去执行请求的任务,一个红叉叉出现在数据库安装小图标的旁边。这使我的进程受阻了一段时间,最终我貌似通过跳到数据库安装部分儿解决了这个问题,停止了报表服务器,打开SSMS 删除了ReportServer和ReportServerTempDB这两个数据库然后又启动了报表服务器,再试一次!我发誓尽管第一次没有成功,但第二次却成功了(当时我正在通过电话向Steve抱怨)。不过我仍然第一次有问题,但第二次却没有了。
我可不是只碰到了这点问题。安装SSRS的时候在IIS的默认网站上创建了两个新的虚拟目录。默认情况下,它们分别被命名为Reports和ReportServer。ReportServer站点拥有一个运行和管理报表的web服务。Reports站点允许你从通过浏览器上传报表还有在web上运行报表。当我尝试导航到http://localhost/ReportServer我收到了下面的错误“Failed to access IIS metabase”。幸运的是,错误页面上的信息非常有用(对于更改来说)而且通过这个信息,再经过Google查询,通过在WINDOWS"Microsoft.NET"Framework"v2.0.50727执行aspnet_regiis让我连接到了ASPNET用户帐户。
Aspnet_regiis –ga ASPNET
这确实管用了,我又开始了后面的步骤。当我建议说要安装SSRS的时候,我受够了。这让我的长期忍受痛苦的团队尤其紧张。2000版本的SSRS貌似在Red Gate 团队里名声很不好,运行的糟糕,而且完全蹩脚。然而,撇开以上SSRS 2005的怪癖不谈,这个流程还是慢顺利的,而且也没有出现其他的运行麻烦。呃,至今为止。
——编辑的安装笔记结束——
一旦完成了安装和配置过程,第一件事就是下载关于这篇文章的源码文件(可以看到右边有下载的超链接)。源码文件包含了一个Visual Studio项目示例和创建ReportDemo数据库的SQL脚本。这一系列的文章都需要这个数据库,所以我们得创建这个数据库,可以通过执行ReportingDemoDatabaseScript.sql这个脚本,或直接还原ReportingDemo.bak文件。
如果你的SQL Server是数据库验证,那么还得创建一个能连接到ReportDemo数据库的用户(为了这些例子,我创建了DBO架构下的DemoUser帐户)。
使用报表向导
有两种方式来创建SSRS报表。可以人工创建,也可以用向导快速完成。第一个报表呢,我们就充分利用向导的优势。在Visual Studio 2005中新建一个商业智能项目。选择项目->添加新项。选择报表向导将文件命名为“FirstReportWZ.rdl”。单击添加。在欢迎窗体上单击下一步,到达“选择数据源”界面:
选择“新建数据源”选项,然后给数据源命名,选择“Microsoft SQL Server”作为类型。
笔记:
大多数情况下,使用“共享数据源”更好一些。但是为了这个示例,我们新建了一个数据源,以后我们会创建一个共享数据源。
单击“编辑”按钮弹出“连接属性”对话框。
输入或选择一个服务器名称。默认登陆到服务器的是“使用Windows身份验证”。如果你在“使用SQL Server 身份验证”,输入用户名和密码。选择我们现在使用的数据库-ReportingDemo,在单击“确定”之前确认“测试连接”成功。
下一步就到了“设计查询”,可以通过点击“查询生成器”按钮用查询生成器设计查询。但这里我们只在“查询字符串”文本框中输入“Select * From Customer”,然后单击“下一步”。在“选择报表类型”(“表格格式”或“矩阵”)中选择你喜欢的类型。
然后我们就到了“设计表”阶段:
在“可用字段”中选择“State”单击“组”按钮。这样就能按照“State”对结果进行分组。在“选择报表布局”窗体选择“递阶”选项和“启用明细”。在接下来的步骤中“选择表样式”(选择你喜欢的,我选择的是“海洋”),单击下一步。
这样我们就到了最终步骤,完成向导:
这是你的报表的摘要信息,在这里你可以重命名或预览报表。
单击“完成”按钮结束向导。
这样你就可以在“报表设计器”中查看到报表:
共有三个选项卡:“数据”,“布局”和“预览”。现在你在“布局”选项卡中。单击“预览”查看报表。因为报表没有任何参数,所以一单击马上就会运行。
使用“State”旁边的“+“或”-”可以展开或者收起报表的分组。
人工手动添加报表
上一部分内容由于太过于简单化而没有给你展现怎样从一个零代码零属性的环境中制作和运行报表。显然,大多数情况下,这样的报表难以满足开发的需求。但千万不要小看它,因为它可是更复杂报表的开端。只要用报表向导制作了报表,你就可以自由的对它进行修改。
在这一部分,我们将从草图开始创建一个更加现实的报表,还包括如何创建和使用共享数据源,存储过程,还有怎样定义报表的格式,设置报表属性,使用报表参数。
创建共享数据源
在创建报表之前,我们首先构建一个共享数据源。报表服务器上的所有报表一般都是用共享数据源。虽然说每个报表都可以有自己的连接信息,但是使用共享数据源更为好一些,它会为你节省很多时间,省去不少麻烦。因为这样做,你只需要设置一次连接信息。例如,你的公司现在有开发,测试,和生产等各种环境。如果你的每个报表有各自的连接信息,那么每次发布报表的时候都要进行修改,但是使用共享数据源,设置一次连接信息,然后就可以将它适用于各个环境,它们会自动使用那个连接。
右击项目->添加新建项->数据源,在“常规”选项卡,将数据源命名为“ReportsDB”。设置“类型”为Microsoft SQL Server。单击右边的“编辑”按钮,像以前一样进入Reporting Demo的连接信息,单击“确定”就完成了共享数据源的创建。
添加新报表
右击项目->添加新建项,选择报表,命名为“FirstReportMan.rdl”。添加新的报表,显示报表设计器的“数据”选项卡。在这个时候,让我们仔细看一下报表设计器工具。在报表设计器顶部有三个选项卡“数据”“布局”“预览”。“数据”选项卡是用来为你的报表设计数据源的。“布局”选项卡是你设计报表表头,表尾和数据展示的物理设计器。通过“预览”选项卡,你不需要将报表发布到报表服务器便可以在Visual Studio 2005中运行报表。如果报表有参数,那么在报表运行之前它会让你进行参数填充操作。
我们要做的第一件事就是为报表输入数据。在“数据”选项卡顶部的下拉列表框里选择“新建数据源”。
这样就打开了“数据集”窗体:
将数据集命名为“ReportData”,在下拉列表里选择ReportsDB数据源,在“命令类型”里选择“StoredProcedure”,在“查询字符串”里输入spr_CustomerSelectAll,单击“确定”退出对话框。
笔记:
spr_CustomerSelectAll是一个非常简单的,无参数的存储过程。这个存储过程从Customer表中选择了所有字段信息。源代码在文件中,对应的是ReportingDemoDatabaseScript.sql脚本。
可以通过单击报表设计器顶部的大的红色感叹号来测试数据集。它将执行查询显示结果。如果想为你的报表添加多数据源可以重复这个几个步骤。
设置报表显示
接下来,单击“布局”选项卡,在这儿你才能真正的设计报表的布局。开始先从工具箱中拖拽一个“表”控件到报表的“主体”部分,默认情况下,这个表的上中下分别为“表头”“详细信息”“表尾”。你可以通过右击列进行“添加列”操作。
单击Visual Studio 开发环境左侧的“数据集”选项卡,可以看到ReportData数据集。展开并分别将“FirstName”“LastName”“CustomerStatus”拖拽到报表主体的表控件中:
当你将“FirstName”拖拽近报表中,SSRS会对这个列的名字进行猜测,取名为“First Name”。单击“预览”选项卡可以对报表进行预览。
添加格式
好了,我们现在得到了一个很普通的简单报表。让我们美化一下。添加“DateOfBirth”列,你可以通过拖拽方式扩大或者减小列的尺寸:
如果你要取出表尾行,那么先单击表格的任意一列,会看到表格被灰色的框包围。右击行前面的图标,选择“表格表尾”可以去掉它。
接下来是表格表头。为了是表头有同样的样式,通过拖动全选,打开属性窗口对背景,字体等等进行设置。
然而,当你想要设置文本的对齐方式或文字大小的时候,应该使用顶部的主菜单,而不是属性窗口。再一次的,可以通过“预览”选项卡预览报表。
添加报表标题
表格已经有了表头,但是报表也能有自己的页眉和页脚。报表的页眉和页脚在报表的每一页都会显示。选择报表设计器的“布局”选项卡,单击菜单中“报表”->“页眉”,页眉便显现在报表主体的上部。从工具箱中拖拽一个文本框进去,直接在里面单击,输入“My First Report”,不是说在属性窗口,而是直接在控件中。
选中文本框,通过顶部的菜单对文本的样式和大小进行设置。
格式化
每个字段都可以进行格式化。现在先对付那个丑丑的“Date of Birth”字段。显然里面的时间信息是多余的,所以让我们对日期进行合理的设置。右击这个字段,选择属性,然后选择“格式”选项卡。
单击“格式代码”中第二个按钮(就是有‘…’标记的),打开“选择格式”窗体,使用“标准”选项。选择左边列表中的“日期”,然后从右边的列表中选择你想要的格式。单击“确定”退出对话框。
单击“文本框属性”中的确定按钮,退出对话框。
设置报表属性
为了访问报表的属性信息,你还得在报表设计器的“布局”选项卡中。当你选择表格的时候,主菜单上会多出“报表”这个菜单。用这个菜单,你可以设置报表页眉页脚(就像我们前边说的那样),“报表参数”“嵌入图像”“报表属性”。
与其它比起来,设置报表的打印信息并不那么直观。在“布局”选项卡中,贯穿报表顶部的是一把标尺。这把标尺是以英寸为单位的。一张标准的纸是8.5 x11英寸。SSRS中默认内容区域的边界都有1英寸的夜边空白。所以8.5英寸减去左右两边的2英寸就剩下6.5英寸是显示报表内容的。而且,任何比这6.5英寸多出的内容都会在打印的时候进入到下一页。它可不会自动的进行自适应。
为了得到一个自适应的报表,得合理设置报表属性。选择“布局”选项卡,然后选择“报表属性 ”,选择“布局”选项卡,在这里合理设置“页宽”和“页高”。
当然这个选项卡中还有一些别的设置信息。默认情况下,页边距是一样的。牢记的是,当你的报表内容宽度加上两边的页边距要是大于打印机的宽度,打印的时候就会出现溢出现象。
使用参数
有两种方法为报表添加参数。第一种是在数据源查询中使用,第二种是利用“报表参数”对话框进行设置。我们两种都来看一下。
查询参数
首先,我们通过数据源查询来建立参数。导航到“数据”选项卡,然后单击数据集下拉列表框旁边的“…”按钮,这样就打开了“数据集”对话框,这里你可以编辑数据集的查询。将查询字符串由“spr_CustomerSelectAll”改为“spr_CustomerSelectByState”。
笔记:
spr_ CustomerSelectByState接收一个“StateCD”的参数,这样就能通过“State”对Customer表进行筛选。这个存储过程源代码在文件中,对应的是ReportingDemoDatabaseScript.sql脚本。
单击确定并运行查询。这时会弹出一个“定义查询参数”对话框要你输入相应的参数StateCD(the State Code)。输入“CA”单击确定。查询就会返回所有居住在加利福尼亚的客户信息。
转到“预览”选项卡。报表并没有运行,只是多出来一个区域让你输入参数StateCD的值还有一个“查看报表”按钮。输入“CA”并单击这个按钮,报表就会运行,得到的是通过State进行过滤了的信息。
为了编辑或者添加新的参数,转到报表设计器的布局选项卡,然后从报表菜单打开报表参数对话框。首先,让我们把那个StateCode的弹出窗口显得更加友好一些。在参数列表中选择StateCD,在属性框中把“提示”改成State。在“可用值”的第一行和第二行分别输入“California CA”和“Louisana LA”。
这样State Value提示框就会变成一个下拉列表选择框。你可以为报表创建别的数据集,而且把这些数据集中的值作为下拉列表框的标准。
报表参数
现在让我们添加一个不是用在查询中的报表参数。单击“报表参数”对话框中的“添加”按钮,命名为ReportTitle。数据类型是String。设置“提示”为“Report Title”,单击“确定”推出报表参数对话框。
从工具箱中拖拽一个文本框控件到页眉区域。右击选择“表达式”。在“编辑表达式”里选择“参数”,双击ReportTitle。现在文本框你传递过来的报表参数Report Title。
转到预览选项卡进行预览。
发布报表
到目前,你已经可以在Visual Studio中运行报表了,但是实际上我们得把它发布到报表服务器。最省事的方法是利用Visual Studio进行报表发布。
首先右击“解决方案管理器”上的项目,选择“属性”。
把“TargetServerURL”设置成你的报表服务器的URL。利用“TargetReportFolder”属性建立报表。如果文件夹不存在,发布的时候会自动建立。另外值得注意的关键属性是“OverwriteDataSource”。如果这个属性值为True,当你发布的时候会拷贝所有的数据源,若设置为False,只会拷贝新增的,但不会覆盖现有的。在处理开发,测试和生产服务器的时候这很重要。你可以对每个报表发布一套数据源对象,指向合适的数据库,而不用去担心各个环境对应的数据库。
选择“生成”菜单中的“部署解决方案”。这样就会把报表放到报表服务器上指定的文件夹。当然也可以对每个报表进行单独部署,方法是右击选择部署。
当报表已经部署了以后,就可以通过http://<servername>/<reportservername>对其进行访问了。在首页可以发现你刚刚发布到的文件夹,里面存放着报表。选择报表并运行。在页面顶部你可以输入报表参数。这里你也可以打印或导出报表。
总结
这就是建立一个简单报表你所需要知道的东西。在以后的文章中我们会添加一些高级的选项,比如钻去,排序,和自定义函数。敬请期待。
[翻译]初识SQL Server 2005 Reporting Services Part 1