经常会遇到一些报表需要根据不同的情况(参数)连接不同的数据源从而完成相应的数据的展现,也就是经常说的动态数据源报表。报表工具通常的做法有两种,一是不同的情况加载不同的数据源连接参数,如:url、driver、username、password等;二是利用已配置的多个连接池,根据不同情况选择。这里以BIRT和润乾报表为例来说明

BIRT的做法

   在报表数据源的beforeopen事件中添加如下代码: 

1.fin= newjava.io.FileInputStream(newString("d:/config.txt")); 

2.props= newjava.util.Properties(); 

3.     

4.props.load(fin); 

5.extensionProperties.odaDriverClass= newString(props.getProperty("driver")); 

6.extensionProperties.odaURL= newString(props.getProperty("url")); 

7.extensionProperties.odaUser= newString(props.getProperty("username")); 

8.extensionProperties.odaPassword= newString(props.getProperty("password")); 

9.fin.close(); 

  其中,config.txt存储的是数据库连接信息,当需要读取不同的数据源时需要更改config中连接参数。

润乾报表的做法

   假设我们已在应用端配置了多个数据源,报表使用不同数据源时需要通过JSP/Servlet更改:             cxt.setDefDataSourceName("dsName");

   完成后通过Context方式发布报表,而无法通过最常用的file方式发布。

 

   上面两种报表工具的做法我们看到都需要依赖Java编程,且修改维护性很差,对报表开发维护人员都是不小的挑战。而集算器则比较适合辅助完成动态数据源报表,下面来看一下。

集算器的做法

集算器脚本

用集算器实现动态数据源报表_动态

    A1格通过一句简单的参数判断即可完成不同条件下不同数据源的连接,相比前面报表工具的做法简单了很多。当然,集算器作为独立的计算中间件并不能直接为用户输出报表,报表展现的工作仍然由报表工具完成,为此集算器封装了应用程序调用的标准JDBC

集算器JDBC

    使用集算器JDBC与使用一般数据库的JDBC非常类似,集算器允许报表工具像调用存储过程一样调用集算器脚本,而此时集算器对应用的表现就好像一个数据库一样。

 

   由此可见,原来需要依靠大量的Java代码的动态数据源报表,通过集算器可以非常简单完成;而集算器提供的JDBC对于报表开发人员来讲大家可以仍然使用固定数据源报表的方式进行报表开发(通过集算器实现了动态数据源功能,也可将集算器用于跨数据和混合数据源报表的开发),将极大地降低报表开发与维护成本。