Reporting Services – 报表服务介绍
前言
SQL Reporting Services 是微软在商业智能方面的其中一套,提供报表的生成、展示和发送。
我认为在国内,SQL Reporting Services 被忽视。我不是微软的销售团队,亦非卖软件的,我只是觉得大家购买了软件但没有使用,这个现状很奇怪。稍为说一下我对这情况的理解、引起这情况的原因:
- 软件成本为零成本是零的东西,根据经济学中的稀有原则,无限免费提供的,人们不会争相持有。没有成本的软件,你也不会怕安装后到底是否用尽它的所有功能而烦恼,反正不合适就换,不够就加另一套,全免费的。在现在的中国,这个免费,我是指盗版软件。 想反驳说盗版不是完全免费、时间也是成本、多个软件会占有系统资源云云的,我先说一下。正因为如此,大家更要了解 Reporting Services 能做到什么,因为它是含在所有目前版本的 Microsoft SQL Server 内,而且启动它用多了没多少资源,相比 Crystal Report 服务器来说,以系统资源来评价的话,SQL Reporting Services 是绝对便宜。
- 教育政策影响在学校里学的、在坊间卖的书所说的、以至在各网路论坛所谈到的,写报表,还是水晶报表 Crystal Report 为主流。我认为这与教育政策的厘定有关,上课所教的是 Crystal Report 你毕业就只懂用它来写,结合上面第一点,你当然下载一套「绿色版」的 Crystal Report 服务器。但如果上课时候,教的时候说明这个技术其中一种,教的是通用的商业智能 Business Intelligent (BI) 软件架构,用多种软件作为示例,情况我相信不会是现在这样。
- 微软的政策影响Crystal Report 早在 Report Services 未面世前已出现,就连 Visual Studio 内都有 Crystal Report 的开发环境。虽说这是向现实低头,但 SQL Report Services 的开发,在 Visual Studio 2008 版内依然没有集成,依然是独立的一个 Business Intelligent Studio 来完成报表开发。这一点我觉得莫名其妙。 对国内市场,因为上面第一点,我更觉得微软是已经放弃了我们了。
编写此文,目的是希望大家了解 SQL Reporting Services 能做到什么,怎样集成。另外,一篇短文不可能教懂你如何用 SQL Reporting Services,我只谈功能和集成。来看此博文的各位,我亦尊重大家的专业知识和智慧,谈的内容尽可能深入一点。
同类的报表产品
以下列出现在主要的报表产品(以英文字母顺序):
| 商业收费产品 | 免费产品 |
| Actuate (基于 BIRT) | Agata Report – 开源 |
| Business Objects (SAP 买下了) | Eclipse BIRT- 开源 |
| Congnos (IBM 买下了) | JasperReport- 开源 |
| Crystal Reports | FreeReporting |
| DevExpress Reporting (xtraReport, 基于 .NET) | GNU_Enterprisef- 开源 |
| DevForce (.NET, 有 Silverlight 版本, 支持 Silverlight 3) | Pentaho- 开源 |
| I-net Crystal-Clear (Java) | |
| Information Builder, WebFocus | |
| Izenda | |
| JReport | |
| LogiInfo (FreeReporting 的收费版) | |
| MicroStrategy | |
| m-Power (Java, 老牌子) | |
| Oracle BI Publisher (我很想试的一套, J2EE) | |
| Proclarity (被 MS 买了) | |
| QuSheet (HTML 而已, 基本上不用考虑) | |
| SQL Server Reporting Service (本文主角, MS SQL 2005 版本起含有的服务) | |
| Style Intelligence (Inetsoft 英网软件技术, Java, 好像是中外合资的) | |
| Telerik Reporting | |
| Windward Reports (Java/.NET) |
在开源那里其实还有很多的,有兴趣的请自己上 Sourceforge、Codeplex 那些网站搜索一下。
如果上面你只听过一两款的,我建议你赶快恶补一下,这个世界大得很。而且,商业智能对任何大小的公司都有用,所以认识一下这些产品也是必须的。
SQL Reporting Services 提供的功能
一般常用的 BI 报表功能,SQL Reporting Service 都有,SQL Reporting Services 报表功能含以下:
- drill-down 下钻
- drill-through 钻取
- Parent-Child report structure 母、子报表架构
- Web report rendering 整个报表服务,是个 Web Application,主要以 Web 作为交付媒介,因此,可融合到各种门户软件中,与 SharePoint 集成更是此产品的设置项之一
- Scheduled report delivery 定时自动以电邮发送报表;与 SharePoint 集成的话,可以选择发送电邮或新增档案至文档库
- Various email delivery options 电邮交付格式可以是嵌在电邮文本、或者作为附件
- Permission Control 所有报表都有权限管理;与 SharePoint 集成的话,报表格式档存在报表库,权限管理与 SharePoint 一般的文档库相同
- Flexible service structure 灵活的服务架构,下章节介绍
- Support Various data sources 内建支持多种数据来源,不单是 MS SQL Server
- Support Various output format 支持多种报表导出格式,对 Excel 的导出,比 Crystal Report 更优胜,毕竟两套都是微软的
- Web-based report design interface 除了使用专用的 BI Studio 来设计报表,还可以以 web 界面设计
SQL Reporting Services 对于其他同类产品的动态报表等等那些 「eye candy」的确不及,没有 Flash,没有 Silverlight。如果对于这些设计外表要求特别高的话,就要选用其他报表服务软件了。我认为那些是次要的,特别对于首次接触 BI 的公司来说,对 IT 能力较弱的公司,简单部署和低价格可能才是他们主要考虑。
支持的数据源
- Microsoft SQL Server
- OLE DB
- Microsoft SQL Server Analysis Services
- Oracle
- ODBC
- XML
- Report Server Model
- SAP Netweaver BI
- Hyperion Essbase
由于支持的数据源含 ODBC,就是说基本上有 ODBC 驱动的都能连上,包括一张 Excel 表。虽然,ODBC 诸多限制…。
支持的导出格式
- Excel
- XML
- CSV
- mHTML
- TIFF
架构
上面有提到,SQL Reporting Services 是个 web application,架构当然是基于 Web。
注意它是附带在 SQL Server 的服务之一,报表缓存、系统设置等等是存在 SQL Server 的独立专用数据库内。
整个报表定义,架构拆分成这样的:
数据库 – 数据源 – 数据集 – 查询 – 报表格式
物理档案来看,分开 RDS 和 RDL 两个档案。RDS 存放数据源,含服务器地址、数据库、登入信息等。RDL 存放数据集、查询、和报表格式定义。
从以上可以看到,数据库服务器和报表格式,是分开的。当然你嵌入在报表格式内亦可,我不建议这样做。数据集和报表格式也是拆开的,一张报表可以含多个数据集和查询。
报表可用控件
可能大家看完这里会有点失望,可用控件不多。
- 文字文本
- 线
- 资料表 (即资料重复区域)
- 矩阵 (资料 Matrix 型重复区域)
- 清单 (矩形区摆放资料,以此矩形重复)
- 图片
- 子报表
- 图表
对于静态报表来说,应该也够了。我还没碰到我需要但没有的控件。注意,要 mouse hover 然后报表立刻响应,而变更某些显示的,Sorry 了,做不到,SQL Reporting Services 不是个编程的环境,没有听取鼠标事件的方法。
图表类型
针对 SQL Reporting Services 2005 版,图表类型如下:
- Vertical Bar Chart
- General Bar Chart
- Stacked Bar Chart
- % Stacked Bar Chart
- Horizontal Bar Char
- General Bar Chart
- Stacked Bar Chart
- % Stacked Bar Chart
- Line Chart
- General Line Chart 折线图
- Smooth Line Chart 曲线图
- Pie Chart
- General Pie Chart 普通饼图
- Exploded Pie Chart 分裂饼图
- XY scatter
- Point 点分散图
- Line 线分散图
- Curve 曲线分散图
- Bubble Chart 泡泡图
- Area Chart
- General Area Chart 一般
- Stacked Area Chart
- % Stacked Area Chart
- Doughnut Chart
- General Doughnut 一般环形图
- Exploded Doughnut 分裂环形图
- Stock Chart
- High-Low-Close 股票图 – 最高-最低-收盘
- Open-High-Low-Close 股票图 – 开盘-最高-最低-收盘
- Candlestick 股票图 – 阴阳烛
全部都可以调为立体、图例框显示、位置、XY轴等等。可以在图表中设置筛选资料。颜色不能自定义,用 Office 2003 的那套图表色板。
微软收购了 Dundas Chart,在图表上,在 SQL Reporting Service 2008 版中有很大的改进。在没发布 2008 版前,我试用过 Dundas Chart 套件在 SharePoint 上,效果非常好,图表类型也多了点。但 SQL Server 2008 和它的报表服务我没用过,不发表意见了。
如何集成
前面说了 SQL Reporting Services 是个 Web Application,集成当然也跟 Web 息息相关。五大方面:
| URL 格式含处理参数 | 运用其他应用程序,组成 URL,引用浏览器用 URL 打开 |
| Win Form 应用程序 | Report Viewer 控件 |
| 嵌入网页内 | IFrame |
| SharePoint | Report Viewer Web 部件,可以用另一个 Web 部件发送报表参数 |
| Web Service | SOAP API |
除了第一个 URL 方法,和第四个 web service,其他的都跟内置的 Web 展示报表出来的效果极度相似,不多说了。
URL,我也不想重复微软的介绍了,想知道可以设置什么,自己看这里:
http://msdn.microsoft.com/en-us/library/ms152835(SQL.90).aspx
示例:
运用 URL 参数打开
http://server/reportserver?/ABC_Dept/abc_report.rdl&rs:command=render
http://server/reportserver?/ABC_Dept/abc_report.rdl&rs:command=render&rs:toolbar=false&
rc:parameter=hidden
http://server/reportserver?/ABC_Dept/abc_report.rdl&rs:command=render&rs:toolbar=false&
rc:parameters=false&DocNumber=123
Win Form 示范
示例环境:VS 2008 英文版;.NET Framework 3.5;C#;SQL Server 2005;SQL Reporting Service;报表存于服务器上;本机登入域使用登入名和密码认证 SQL Reporting Services,要改的自己 impersonate。
实际上,.NET Framework 2.0 以上已有 reportviewer 这控件。看不见这控件请自己加引用,命名空间为 Microsoft.Reporting.WinForms 。
这示范是用 textbox 让用户输入一个报表参数,点击按钮之后在 reportviewer 控件显示- 开个新的项目,拖放几个控件,包括 reportviewer ,如右图
- 在 reportviewer 控件属性 – 杂项中,填上服务器完整 URL、在报表路径中填写完整的 URL 路径、Process Mode 改为 Remote
- 删除默认的表格 On Load 句柄,加上点击按钮的句柄,下面有示范代码。本实例只有一个参数,叫做 IPE_SO_NUM
- 完成
private void button1_Click(object sender, EventArgs e)
{
Microsoft.Reporting.WinForms.ReportParameter[] p =
new Microsoft.Reporting.WinForms.ReportParameter[1];
p[0] = new Microsoft.Reporting.WinForms.ReportParameter(@"IPE_SO_NUM",
this.textBox1.Text.ToString());
this.reportViewer1.ServerReport.SetParameters(p);
this.reportViewer1.Refresh();
}
注:Set.Parameters 方法,只接受 ReportParameter 的 Array,即使只有一个。
IFrame 示例
<iframe src="server/reportserver?abc_report.rdl&rs:command=render" name="out"></iframe>
相信这个不用多说了。
SharePoint 集成
可以加入超链接直接指向报表定义档,SharePoint 会自动以 SharePoin t 的方式 render 报表(Web Rendering 其实外观改了,内容功能是一样的);或者使用 Report Viewer 网页部件,此网页部件是把 SQL Reporting Services 配置为集成 SharePoint 后才会出现。
对于配置为集成,注意集成后 reportserver 此报表服务将会被 SharePoint 所代替,原来的管理器和存报表的位置将不再可用,集成前报表服务已在用的记得要把报表备份。另外,集成 SharePoint 后,默认是无法再用 URL 打开报表,URL 参数亦不再可用,要继续用的需要在 IIS 配置打开新端口。
Web Service
Web Service 要写示例的话有点长,我另开一文来说明。
总结
目前国内主流的报表,是 Crystal Report (CR)。CR 最有名的是,承诺过有的功能,不是有 bugs 就是一直没加上,就连最基本的 SQL 语句,它的处理也不一定可靠,比如: “SELECT COUNT(*) FROM SOMETABLE WHERE 1=0″ ,虽然这个例子有点偏激,但处理错误是事实,我们总不能一句句的去试一下有没有问题。
SQL Reporting Services 作为后起之秀,功能要求不太 fantasy 的话,作为一个 SQL Server 附带免费的东西,先把它用好然后再投资进去用更美观、多变、灵活的报表服务,我认为是个不错的策略。
甚至是,有老外作为单机版来用,连接公司数据库实时生成报表来用,这个方式不是对所有人有效,但我也是这样操作的,报表在我本机上的。
老生常谈,数据不是没有,只是太多。要好好归集、分析、运用,源用老八股的 Excel、pivot、Access,远不足以应付,手工错误多。希望本文能令你了解到 SQL Reporting Services 能做到什么地步,从而选址合适你的产品。
对 BI 或 Data Visualization 有兴趣的,可以与我联系。我正在策划公司这方面的发展。