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 要写示例的话有点长,我另开一文来说明。
WEB形式下事例说明:
//后台带码
//带参数报表显示
protected void Page_Load(object sender, EventArgs e)
{
ReportParameter paraDateStar = new ReportParameter("DateStar","2010-10-1");
ReportParameter paraDateEnd = new ReportParameter("DateEnd","2010-10-30");
ReportParameter[] p=new ReportParameter[]{paraDateStar,paraDateEnd};
ReportViewer2.ServerReport.SetParameters(p);
ReportViewer2.ServerReport.Refresh();
}
//前台代码
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication3._Default" %>
<%@ Register Assembly="Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
Namespace="Microsoft.Reporting.WebForms" TagPrefix="rsweb" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<div>
<span>
<rsweb:ReportViewer ID="ReportViewer1" runat="server" Font-Names="Verdana"
Font-Size="8pt" Height="400px" ProcessingMode="Remote" Width="421px">
<ServerReport ReportPath="/Assemble/Test6" ReportServerUrl="http://192.168.7.61/reportserver" />
</rsweb:ReportViewer>
</span>
<span>
<rsweb:ReportViewer ID="ReportViewer2" runat="server" Font-Names="Verdana"
Font-Size="8pt" Height="400px" ProcessingMode="Remote" Width="400px">
<ServerReport ReportPath="/Assemble/QA_Sel_ForUpdate"
ReportServerUrl="http://192.168.7.61/reportserver" />
</rsweb:ReportViewer>
</span>
</div>
<div>
<div><a href="http://192.168.7.61/ReportServer?/Assemble/QA_Sel_ForUpdate&DateStar=2010-10-1&DateEnd=2010-10-18" target="_blank">QA查寻</a></div>
<div><a href="http://192.168.7.61/ReportServer?/Assemble/QAQuery2&DateStar=2010-10-1&DateEnd=2010-10-18" target="_blank">QA分类查寻</a></div>
<div><a href="http://192.168.7.61/ReportServer?/QA报表/test3" target="_blank">Test3</a></div>
<div><a href="http://192.168.7.10/ReportServer?/Assemble/test3" target="_blank">Test3</a></div>
</div>
</div>
</form>
</body>
</html>