- 浏览: 86202 次
- 性别:
- 来自: 北京
最新评论
-
datawarehouse:
很不错的方法
sql实现报表加小计、合计 -
tanywei:
好 ... 学习了,谢谢
BIRT报表(报表设计器)<转载> -
java032:
注: 文章是贴别人的,我重复重复再重复的试,还是不通,郁闷。有 ...
Adodb.recordset分页 -
java032:
恩,是这样的。
web应用中使用birt -
xieay:
如果你已经装过myeclipse ,直接把links包拷过来即 ...
web应用中使用birt
SQL Server Reporting Services(简称SSRS),是一个功能强大的报表服务。在MSDN的相关文档以及 Google的结果中,可以找到它的一般性描述。在当前SQL Server 2008还在酝酿,2000基本过时的情况下,我们理所当然地讨论其2005版本。
可惜的是,对这项功能的应用,目前似乎仍不广泛,以至于想找一本非常全面而又充满技巧性的教程都如此困难。但好消息是,这是微软开发的产品!秉承微软产品一贯的易上手、帮助翔实的优良传统,对SSRS的探索还是相当值得大书特书的~~~
起
这一部分主要说说关于SSRS的安装、部署和配置问题。
SSRS的安装
Reporting Services作为SQL Server的一个组件,自然是要伴随SQL Server一起安装了。目前SQL Server 的诸多版本,只有Enterprise和Development版本有着对SSRS的完全支持,Standard版本提供了大部分支持,具有高级功能的 Express版只支持一些最基本的功能(不含设计器)。因此,在企业部署的时候应该选用Enterprise版,作为开发者应选择 Development版。
在安装SQL Server的过程中选中Reporting Services的相关组件,或者更改一个SQL Server的安装以添加SSRS都是可行的。
注意上面说的是服务器端的安装。SQL Server 2005 Development Edition的组件分为服务器和工作站两个部分。在安装完服务器端的相关组件后,还需要在进行开发的机器(可以就在服务器上,也可以是另外的工作站)安 装工作站组件。其中的Business Intelligence Development Studio必须安装,这是一个Visual Studio 2005的扩展,如果机器已经安装过VS2005,那它就会直接将BI的开发模板集成进 VS中,如果没有装过,那它则会自动替你安装一个VS2005外壳(没有C#、VWD等组件)。
SSRS在服务器端的配置
服务器端配置SSRS有两种方法,一是通过SQL Server Management Studio,登录到Server进行操作;二是通过web访问服务器的Report Manage页面,比如http://IP/Reports。两种方法在功能上略有差别,具体操作过程可以查看相关文档。
承
这一部分来讨论一下SSRS的一些基本功能,即报表的建立、发布和引用。
创建报表
设计环境
报表设计环境就是那个Business Intelligence Development Studio,以下简称BI。如果项目是在VS2005下进行的,那么就非常方便了,因为可以在一个Solution里像添加普通Project一样来添 加BI的工程。事实上我们也是这么做的。
报表创建的基本步骤
在正式开始利用BI开发SSRS之前,强烈建议大家把随机附带的Book Online里的相关教程全部手动完成一遍。
总的来说,一个报表的设计可以归纳为下面的步骤:
- 创建报表工程
- 建立数据源(Data Source,rds文件),这是报表与数据库进行通信的桥梁;
- 创建数据集,也就是报表的数据来源,报表从数据集获取数据,并不直接访问数据库;
- 进行页面布局(layout)
- 预览结果(preview),并根据结果进行进一步修改,直到完全满足要求
在我另一篇日志里有一个简单的例子 ,来源于SQL Book Online,可以作为一个参考。
报表的发布
设计完报表之后,就要将其发布到Reporting Services服务中,以供调用。我们可以把这个发布称作deploy。
经过实际应用,发现可以有下面三种方法来进行报表的发布
在BI中编译发布
我们设计报表是在BI中进行的,可以利用它来一次性将整个报表工程deploy到服务器上。大致步骤如下:
- 菜单执行Project->Properties,将Configuration改为Production,即编辑Production模式的参数;
- 在右边分别填入相应的属性值,一般来说TargetDataSourceFolder的内容Data Sources不变,如果数据源有更新,那么就必须将上面的OverwriteDataSources设为True;
- 设置TargetReportFolder。这个值是在Report Server中的一个虚拟目录,该工程的所有rdl文件都将存放在这个目录下;
- 设置TargetServerUrl。这里就是Reporting Services所在的URL地址,比如本地部署可以用http://localhost/ReportServer。注意后面的那个路径是默认的安装路 径,在IIS中打开默认站点后可以看到它,是一个虚拟目录;
- 都填写完毕之后,在编译环境中切换编译模式为Deploy,再Start Debugging,这时BI就会自动向Report Server部署这一系列的报表。
完了之后会显示http://localhost/ReportServer这个页面,在这个页面中显示的就是该报表服务器上所有的 ReportFolder,而报表则会按照deploy时的设置,分别保存在这些folder内。进入Folder之后,点击报表即可查看,系统已经为我 们生成了一个带有ReportViewer的aspx页面。
通过Web下的Report Manager
下面这两种方法均是用来管理报表服务器,发布报表只是它们的一部分功能。
使用Report Manager的大致步骤如下:
- 打开Report Manager的页面,一般为http://ServerUrl/Reports;
- 进入Data Sources文件夹,上传数据源的rds文件;
- 回到根文件夹,建立一个ReportFolder,名称即TargetReportFolder中的值;
- 进入该文件夹,把rdl文件逐一上传,它会自动给报表起名,一般接受默认值。
这样就OK了,之后也可以在ReportServer页面下查看内容。
通过SQL Server Management Studio
在SQL Server的配置中,这个工具无疑是最强大的。在登录SSMS的时候,选择Server Type为Reporting Services,然后指定Server的名称,以及登录方式。登录成功后,在Home目录下就是我们在Report Manager中看到的内容,后面的操作大同小异,就不浪费文字了。
利用ReportViewer控件引用报表
建立、发布报表的最终目的还是为了在程序中引用它们,在此我们选择的是最简单的方法——使用ReportViewer控件。
WinForm环境下的ReportViewer
WinForm下的ReportViewer控件,位于Microsoft.Reporting.WinForms命名空间下,在VS2005中默认会出现在ToolBar中,直接将其拖放进窗体即可对其操作。
一般来说,所有报表都必须设置的参数有以下几个:
- ProcessingMode:这个属性用来设置ReportViewer的数据来源是本地还是远程,在这里我们设为Remote;
- ServerReport.ReportServerUrl:就是我们前面看到的TargetServerUrl,即报表服务器的URL地址。注意这个地址包含了“ReportServer”,比如http://ServerUrl/ReportServer这样;
- ServerReport.ReportPath:是ReportFolder和ReportName的组合,比如“/Test/Report1.rdl”,注意注意千万注意,最开始的那个“/”一定不能省略!
对于实际应用,采用代码来控制ReportViewer要比设计时设置属性更加常用,下面就是一个简短的例子,概括了这样一个过程:
List < ReportParameter > parameters = new List < ReportParameter > ();
parameters.Add( new ReportParameter( " params " ,textQueryString.Text));
this .reportViewer1.ServerReport.SetParameters(parameters);
this .reportViewer1.ShowParameterPrompts = false ;
this .reportViewer1.RefreshReport();
在上面的过程中,先是设置 ReportPath(ReportServerUrl在本示例中已经指定,实际上应该通过App.config的设置字符串来设置)。然后创建报表参数 列表(这个params的名称是在设计报表的时候设置的报表参数,在SQL语句中通过@params进行引用),进而调用ServerReport的 SetParameters方法,将参数传递给报表。紧接着,将报表的ShowParameterPrompts属性设为false,即不在 ReportViewer的头部显示参数输入提示。最后执行RefreshReport()方法,刷新报表页面。
ASP.NET环境下的ReportViewer
微软的统一性工作无疑是相当出色的,Web下的ReportViewer在使用起来与WinForm下完全相同,唯一不同的就是控件位于 Microsoft.Reporting.WebForms下,而诸如ReportParameter等类也改为此命名空间之下。在代码控制报表方面,不 需要进行改动即可移植。
Visual WebGUI下的ReportViewer
在项目中,我们是采用VWG来作为程序的框架的。Gizmox开发团队也为ReportViewer设计了相应版本,控件位于 Gizmox.WebGUI.Reporting命名空间下,但要注意,它的属性诸如ReportParameter、ProcessingMode等仍 然是位于Microsoft.Reporting.WebForms下的,这一点不要搞错。
直接通过ReportServer访问报表
还记得前面提到过的http://ServerUrl/ReportServer吗?SSRS已经为我们准备了一个用来查看报表的方法,即通过 URL访问,比如要查看在localhost/ReportServer服务器中,位于Test下的Report1报表,可以直接在浏览器中输入 http://localhost/ReportServer?Test/Report1,SSRS会自动调用一个系统内置的页面来显示它。在这个带参数 的URL后面,我们可以通过附加URL参数的方法来对报表进行控制。比如上面的那个例子,在ASP.NET中可以使用Response.Write()向 页面写入下面的代码来弹出窗口显示报表:
"<script language=\"JavaScript\">
window.open('http://localhost/ReportServer?Test/Report1¶ms=" +
textQueryString.Text + "&rc:Parameters=false&rs:Command=Render';
</script>"
其中URL参数的构造方法请参阅MSDN相关文档。
转
上面说的都是常规应用,但实际上一个报表从提出需求到最后部署,绝大部分都不是会了那个示例就能做的,中间会遇到各种各样的问题。在这一部分中,我以问答的形式,将开发过程中遇到的问题以及解决方法分门类地列举出来,并且不断更新。
部署与调试
- Q:我在ASP.NET下使用ReportViewer载入报表,为什么会出现{用户“NT AUTHORITY\NETWORK SERVICE”授予的权限不足,无法执行此操作。 (rsAccessDenied)}的错误?
A:这是由于IIS下ReportServer虚拟目录的访问权限没有设置正确。解决问题的方法有三种:
- 在服务器端访问http://localhost/Reports,进入Report Manager,然后点击“属性”标签页下的“新建角色分配”,在“组或用户名”中填入“NT AUTHORITY\NETWORK SERVICE”(没有两边的引号),在下面勾选Browser,确定。这是给该账户赋以浏览报表的权限,我强烈推荐这种方法;
- 在IIS中,修改默认站点下ReportServer虚拟目录的属性,在Directory Security选项卡中,点击Authentication and access control中的Edit,开启匿名访问,将匿名访问帐户设为管理员账号,本地登录的就设为Administrator,域账号登录的就设为具有管理员 权限的域账号。这样可以使访问ReportServer的连接以管理员权限浏览报表。这也是网上流传最广的方法,但存在严重安全隐患,开发调试的时候没问 题,真正部署的时候不建议使用;
- 专门为Reporting Services建立一个匿名帐户,比如IUSR_ReportView,然后在Report Manager里分配Browser角色,还有等等后续步骤。这是最麻烦的,步骤之多我都懒得在这里写全,同样在网上流传很广,但我觉得只有实在闲着没事 干的人才会用。。。
- Q:我在Visual Studio里开发VWG,以debug方式运行,然后在ReportViewer导出PDF时就报Session Expired错误,这是怎么回事?
A:其实我也不知道为什么。。。解决的方法是不用debug方式,直接在浏览器访问站点,就OK了。至于其原因,呼唤高人来解释~~~
报表数据相关
- Q:我现在不仅仅想向报表传递传统的SQL参数,比如@ID、@Count,而是想整条WHERE子句以至整个SQL语句的任何地方都可以用参数的形式来控制,可以吗?
A:当然可以,这都不行那SSRS也太圡了。。在这里需要用到报表语句。用过Excel吧,单元格的值如果用“=”开头,那后面就可以跟表达式,报表语句也一样。一个最简单的例子,比如像我现在想用参数传递一整条WHERE子句,就这么做:
- 菜单中Report->Report Parameters,Add一个新参数,假定Name叫做WhereString,类型String,别的不动
- 在Data页中修改需要接受参数的DataSet,假设原来SQL语句的内容为“select * from table1 where age between 10 and 15 and id>40”
- 修改为 ="select * from table1 where " + Parameters!WhereString.Value
- 好,切换到Preview中,看结果吧。
注意这里的where后面有个空格,尤其是在构造SQL语句的时候,一定要特别注意空格的使用。
- Q:我在那个Parameters提示框中什么都没填,直接点击View Report,出错了耶。。。
A:-_-|| 当然会出错,SQL语句中的where后面没有条件,语法不正确啊。。像这种情况,你得在表达式语句里做一个判断,看是否传入的参数为空。上面那个例子,就可以改为:
="select * from table1" + IIF(Parameters!WhereString.Value<>"", " where " + Parameters!WhereString.Value, "")
这里的IIF是报表语句的一种,属于Program Flow语句。至于更博大精深的用法,参阅文档~~
- Q:这太神奇了,那你能告诉我,如果我想在一个页面里加入“第X页/共Y页”这种,又该怎么做呢?
A:这还是要用到报表语句。进入Layout视图,在任意一个文本框右键点击然后选Expression,就是前面有个“fx”图标的那 个,就能看到表达式编辑器。在左下的那个框 中列出的就是报表语句的类别,看到Globals了吗?点击一下,右边就会有一些关于报表本身的常量,那个PageNumber和TotalPages就 是这里要用的。前面用到的Parameters和 IIF在这里也都能找到。灵活应用这些元素可以极大丰富报表的表现力。
哦,忘了说一点,PageNumber和TotalPages这两个量都只能在页眉或者页脚处才可使用,所以在用它们之前需要在Layout视图中,菜单Report->Page Header(或Page Footer),开启 页眉或页脚,然后在里面引用。
报表Layout相关
- Q:为什么我的报表打印出来之后水平方向跨页啦?我在设计页面中明明没有越界啊!
A:cft...你的眼睛欺骗了你。设计界面的那个页面边界其实跟你的纸张页面完全没有关系,SSRS也没有提供整页居中的功能,所以你必须一点点地微调你的页面布局。
首先我建议在菜单Report->Report Properties->Layout选项卡中,将左右Margin都改为0。然后回到设计界面,通过手动指定控件的Locate属性的方法,来确 定左侧边界的大小。比如现在的纸张是A4大小(21cm*29.7cm),我的正文表格总宽度设置为17.75cm,剩下的3.25cm是左右页边距总 和,按理说应该各分配1.625cm,但考虑到表格里的表格线也是有宽度的(我设的是1pt),因此将左页边距设为1.6cm,也就是把控件摆放在距离设 计页面左侧1.6cm的位置,再说的明白点就是把靠左的各控件的Locate属性中的Left元素的值设为1.6cm(好多定语啊。。我不是故意 的。。)。
进行预览的时候建议用ReportViewer的导出功能导出为pdf查看,也可以打印到pdf、xps,要是你再土豪一点,直接打印到纸上看是最好。这个微调是个痛苦的过程。
原文链接(http://www.cnblogs.com/guothree2003/articles/1215256.html)
发表评论
-
数据库服务器更名
2013-02-27 13:37 803select * from Sys.SysServers ... -
MS Sql Server 数据库或表修复(DBCC CHECKDB)
2013-01-04 11:42 943MS Sql Server 数据库或表 ... -
sql实现报表加小计、合计
2012-09-14 11:18 8115ORACLE 用 SQL 实现统计报表中 ... -
自动清理 MS SQL Server Table Collation 问题 转载
2012-04-10 22:17 1035Cannot resolve the collation ... -
存储过程的拼接写法 -- 转载
2012-03-30 15:53 1182USE [a] GO /****** Object: S ... -
存储过程的拼接写法 -- 转载
2012-03-30 15:53 0USE [a] GO /****** Object: S ... -
nt authority
2012-02-17 16:50 1579nt authority system networkserv ... -
为 SQL Server 启用 AWE 内存 转
2011-11-02 12:32 1060为 SQL Server 启用 AWE 内存 ... -
SQL Server 2005 在多核CPU下安装 转
2011-11-02 09:06 2385前提: 在安装SQL 2005标准版(不多于四个CPU ... -
常见SQL语句-创建表 添加主键 添加列 - 转载
2011-09-28 10:01 1955新建表: create table [表名] ( [ ... -
转:该伙伴事务管理器已经禁止了它对远程/网络事务的支持
2011-09-26 14:36 1996主要的问题还是MSDTC的设置,找了一篇如下的文章,很帮助: ... -
附加数据库,未驻留在只读数据库或文件组中。必须将此文件解压缩
2011-09-01 15:06 1766错误信息: 执行 Transact-SQL 语句或批处 ... -
Asp.Net应用程序里如何使用报表服务(实例基于SQL Server 2005 Report Service)
2011-07-04 22:47 1312在WinForm或者Web App应用中,如何来引用已有的 ... -
SQLServer2005 Reporting Service报表制作和使用过程 基础性总结
2011-07-04 22:44 2046因为最近项目开发要用 ... -
SQL Server 2005 Reporting Service
2011-07-04 22:42 1299原文地址(http://kb.cnblog ... -
sql server 2005中的报表服务架构_数据库技巧
2011-07-04 22:37 1764原文地址(http://www.w ... -
SELECT INTO 和 INSERT INTO SELECT 两种表复制语句
2011-07-04 07:14 732Insert是T-sql中常用语句,Insert INTO t ...
相关推荐
微软SQL Server 2016制作报表工具,提供了一组内部部署工具和服务,可用于建立、部署及管理行动与分页报表。SSRS 解决方案会以弹性方式提供正确的信息给需要的用户。 用户可以透过下列方式取用报表:网页浏览器、...
Reporting Service是一个非常好用的制作报表的sql server 数据库平台,本例子是通过sql server 2012,使用Reporting Service 2012制作报表。
标题“sql2005reportingservice”指向的是SQL Server 2005中的Reporting Services,这是一个强大的报表生成工具,允许开发人员和管理员创建、管理和分发多种类型的报表。SQL Server Reporting Services(SSRS)是...
Microsoft SQL Server Reporting Services - Installation and Configuration Guide for SharePoint Integration Mode
目前测试reportservice2014可用,用于sqlserver免登陆直接进入报表界面(非原创)
首先,我们需要打开Reporting Services的报表设计工具,例如使用SQL Server Data Tools (SSDT)。在这个环境中,我们可以创建新的报表项目,选择“空白报表”模板开始。 1. **添加数据源**:在报表设计界面的左侧,...
SQLServer Reporting Service开发步骤
SQL Server Integration Service (SSIS) 是一种用于数据集成、转换和加载的企业级工具,它在SQL Server 2005及后续版本中扮演着重要角色。SSIS 是Microsoft为构建Business Intelligence (BI) 应用提供的一部分,与...
SQL Server 2012 Reporting Services Blueprints is intended to be just that, a series of Blueprints – things that work straight out of the box and that mirror what a real job requires real report ...
1. **SQL Server 2005 Reporting Service**: Reporting Services 提供了一个集中式的平台,允许用户创建、发布和管理报表。报表可以通过多种格式(如 HTML、PDF、Excel)进行查看和导出,支持数据源的多样化,包括...
SQL Server 2005 視屏學習資料
【标题】: 使用VS.NET与SQL Server Reporting Services开发 【描述】: 在现代软件开发中,Visual Studio .NET(简称VS.NET)与SQL Server Reporting Services(SSRS)是两个非常重要的工具。VS.NET是一个集成开发...
在20060223pm--SQL2005 ReportingService特性与应用.pdf文件中,预计详细阐述了各个特性的应用场景和具体操作步骤,包括可能的案例分析和最佳实践建议。对于初学者和经验丰富的IT专业人士来说,这是一个宝贵的资源,...
Reporting Services 2008是微软SQL Server 2008的一个重要组件,主要用于生成、管理和分发报表。在这个场景中,"匿名访问"是指允许任何没有特定身份验证凭据的用户可以查看报表服务,无需登录。这在需要对公众开放...
一分钱一分货,请下载...从SQL Server 2008 BOL中文MSDN帮助文档中抓出来的SQL Server 2008 Reporting Service参考,最官方的参考。使用单文件CHM的方式,不用安装庞大的MSDN,不要上网找在线版的,使用就是简单方便。
cn_sql_server_2017_developer_x64_dvd_11296175.iso SHA1 6BBF019EDAE11A7307EBBE30260FB991CE025681 文件大小 1.65GB 发布时间 2017-10-02 ed2k://|file|cn_sql_server_2017_developer_x64_dvd_11296175.iso|...