微软SQL 报表服务的研究
上次发布的关于国内报表设计器的分析,很多看客说遗漏了微软的报表服务,本人经过一段时间的补充学习,将本人得出的浅淡的研究说一下,本人是初学者,其中观点可能错误,望大家不吝赐教。
微软报表服务是新出的产品,它背靠强大的微软和SQLServer服务器而在报表市场中异军突起,来势汹汹。本人首先进入微软的MSDN网络图书馆 MSDN Library > Servers and Enterprise Development > SQL Server > Reporting Services 的目录下面,这是报表服务的用户手册,本人英语不好,勉强看了它的几篇介绍文章,往后就看不下去。本人还下载了报表服务评估版下载安装了其中的客户端。由于它的服务器端需要SQLServer2000Spa,本人机子只有MSDE2000,装不了服务器端,再说本人暂时对报表设计器和报表原理感兴趣,所以没装服务器端程序。
整个报表服务概念非常庞大,覆盖了整个报表的生命周期,包括了报表设计,安全,管理和运行。在此只重点说说报表的运行原理和报表设计器。
实际生产运行中,报表服务系统需要配置一个报表Web服务器,将报表定义文件放好,数据库连接配好,然后用户就可以在客户端的IE地址栏中敲入报表页面URL就可访问报表了,因此报表服务算是一个纯粹的Web报表解决方案了,非常适合B/S系统。但目前不知如何在C/S系统中使用报表服务。
报表定义文件是一个扩展名为RDL的XML文档。它保存了报表的样式定义和数据源的定义,是微软自己定义的一种描述报表定义的XML文档,结构是公开的,因此第三方厂商可以编写兼容报表服务的报表设计器。微软使用自己的VS.NET集成开发环境来设计报表,相信绝大部分人还是用VS.NET来设计报表。
微软提供的报表设计器是基于VS.NET的,因此若要设计报表则必须安装昂贵的VS.NET集成开发环境,对报表设计器的广泛应用有所限制。其实私底下用用盗版的也没什么风险,若在公司里大量使用盗版的则微软迟早会找上门。微软做的软件向来好用,它的报表设计器也相当专业,它采用控件拖拽的设计模式,但表格内部则采用类似Excel的编辑方式。目前的报表设计器支持文本框,线条,表,矩阵,矩形,列表,图像,子报表和图表。好像不支持条形码。文本框也不支持行间距和字符间距。但报表元素所有的属性都支持表达式。矩阵实际上是交叉报表,是处理复杂的中国式报表的基础,但具体怎么使用则不清楚。
报表设计器的程序文件安装在 C:\Program Files\Microsoft SQL Server\80\Tools\Report Designer ,其中 Microsoft.ReportingServices.Designer.dll 是报表设计器的主程序。使用Reflector查看它的反编译代码,可以看到,其实所有的报表元素都是一个个Windows控件,这点和DeveloperExpress的XtraReports一样。在报表设计器中使用Windows控件来实现页面元素有些性能问题。大家都知道Windows控件是很消耗系统资源的,因为其中涉及到了窗体句柄这种重量级的句柄。当报表复杂,里面存在数百个页面元素时,报表设计器需要动态的加载数百个控件,如此启动和操作都比较慢,而且占用大量内存(这种事我以前干过,有体会)。而俄国的FastReport等类似报表工具则是自己绘制报表元素的,因此没有这种问题,加载和编辑复杂报表不会很慢。
在数据源定义方面,根据微软提供的RDL的XML样式定义,一个报表存在若干个DataSet的节点,DataSet节点提供一个Query,其中定义了一个SQL语句,DataSet还提供若干个字段,这些字段和Query的SQL查询结果的字段一一对应。因此个人看来DataSet实际只是定义了一个源自数据库的二维表格,一个报表内可以定义多个DataSet,当这些二维表格之间发生关联时如何处理我这个初学者就猜不出来了。本人觉得报表服务和其他报告工具类似,是基于SQL查询的,数据源结构是两层。这在报表设计器设计数据源的操作上体现出来了。它的数据源设计界面实际上是一个SQL查询设计器,无论如何操作,最终结果都是一个SQL查询语句,包括普通SQL查询语句,表查询和存储过程三种类型。SQL查询语句执行的结果肯定是一个二维表格。
报表设计器使用拖拽操作来简化数据源的绑定,一般的旁边有个字段窗体,列出了所有的DataSet的字段。将某个字段拖拽到某个报表页面元素上面,若这个页面元素为文本框则设置它的文本值使之绑定到指定的字段,否则会在拖拽的位置新增一个文本框并绑定到指定字段。
好了,小弟这个初学者了解的也就这么多了,以后还得加强学习。