集算器辅助报表工具的应用过程

时间:2024-04-01 14:11:39

   集算器具有丰富的(半)结构化计算函数,支持动态解析表达式,支持多样性数据源。报表工具可将集算器脚本文件当做数据库存储过程执行,传入参数并用JDBC获得返回结果。

  集算器与报表工具的集成结构如下:


集算器辅助报表工具的应用过程
 

下面举例说明报表集成集算器的方法

 

数据库表SALES3存储着订单数据,部分数据如下:


集算器辅助报表工具的应用过程
 

现在要计算出指定年份每个月订单的总金额、最大订单金额、最小订单金额,以及总订单数,并将数据转置成134行,即:四种算法是第一列,列名为subtotal,每个月占一列,列名分别是1234…

         步骤一:在集算器IDE中连接数据库。


集算器辅助报表工具的应用过程
 

可用同时连接多个数据源进行混合计算,本案例使用mySQL数据库,JDBC配置如下。


集算器辅助报表工具的应用过程
 

步骤二:在集算器IDE中完成算法:


集算器辅助报表工具的应用过程
 

SQL简单分组汇总,再循环每条数据,将行转为列,按顺序修改空二维表A2中的一列。A1中的argYear是报表传来的参数,A4中的result语句表示向JDBC输出A2(默认输出最后一个单元格A3)。点击A2可观察计算结果:


集算器辅助报表工具的应用过程
 

步骤三:在报表中建立集算器数据源

         驱动类名为com.esproc.jdbc.InternalDriver ( v1.0)

         JDBC URLjdbc:esproc:local://

         用户名和密码为空。

 

         对于Jasper,其配置界面如下:


集算器辅助报表工具的应用过程
 

步骤四:在报表中新建数据集

之后可在query设计器中以存储过程的形式调用集算器脚本。对于Jasper,写法形如:call transData($P{pYear}),其中存储过程的名字就是集算器脚本文件名。pYear是报表参数,传入集算器时将按顺序(而不是参数名)依次对应集算器参数。

对报表工具而言,调用集算器脚本和调用普通数据库代码没有区别,之后就是常规的设计报表摆放字段,此处不再赘述。

WEB端配置呈现可参考【集算器集成与应用之JasperReport集成】。

 

上面以Jasper为例说明了报表工具集成集算器的一般方法,下面说明几种特殊情况。

BIRT集成集算器

BIRTJasper的情况基本相同,唯一的区别在于参数用法。不论存储过程还是SQLBIRT都使用问号做参数占位符,因此调用集算器脚本时应当写作:calltransData (?)。详细信息可见集算器集成与应用之BIRT集成

总之,只要报表工具支持JDBC数据源,就可以集成集算器。

 

简单脚本无文件

集算器脚本比较简单时,可以直接在报表的query设计器中写脚本,而不必专门存储一个脚本文件。比如下面的代码是将每条记录中的ANOMALIES字段拆分成多条记录。


集算器辅助报表工具的应用过程
 

Jasperquery设计器中可以直接写作=myDB1.query("select ID,ANOMALIES from data where ID>?”,$P{pID}) \n =A1.news(ANOMALIES.array(" ");A1.ID:ID,~:ANOMALIES)

可以看到,行和行之间只需用回车“\n“来分隔(列之间用\t分隔)。

 

 

上面的代码可以连写,等价于:


集算器辅助报表工具的应用过程
 

因此Jasper中的query可以进一步简化为=myDB1.query("select ID,ANOMALIES from data where ID>?”,$P{pID}).news(ANOMALIES.array(" ");A1.ID:ID,~:ANOMALIES)

 

BIRT使用问号做参数占位符,而问号是集算器表达式的一部分,因此需要用”arg1,arg2,arg3”的形式依次占位。query应当写作=myDB1.query("select ID,ANOMALIES from data where ID>?”,arg1).news(ANOMALIES.array(" ");A1.ID:ID,~:ANOMALIES) 。