多样性数据源在报表开发中越来越常见,润乾集算报表对多样性数据源的有效支持使得这类报表开发变得非常简单,目前集算报表支持的数据源类型除传统的关系型数据库外,还支持:TXT文本、ExcelJSONHTTPHadoopmongodb等。

    mongodbnosql数据库具有易扩展和高性能等优势,但计算能力比传统SQL要弱(如mongodb的分组结果不能太大,且不直接支持join运算等),而集算报表内置的计算引擎再正好可以补充这一点,在获得mongodb的优势的同时还拥有较强的计算能力。

这里通过一个分组实例来看一下集算报表使用mongodb数据源开发报表的过程。

报表说明

     学生成绩信息存储在mongodb中,包含班级、姓名、成绩、科目等信息,成绩表(score)数据内容如下:

现根据学生信息汇总总成绩,并排名。以下为实现步骤:

准备mongodb jdbc驱动包

    这里使用的是最新版mongodb2.6.4,由于集算报表并不包含mongodbjava驱动包。用集算报表来访问mongodb,必须提前准备mongodbjava驱动包(集算报表要求2.12.2或以上版本的驱动,如mongo-java-driver-2.12.2.jar)。

由于这里要分别使用集算器编辑器编辑脚本,再使用集算报表设计器完成报表模板制作,所以需要将以上包放到[集算报表和集算器安装目录]\common\jdbc下(web部署时放到应用的classpath中)。Mongodbjava驱动包下载地址是:

编写计算脚本

     使用集算器编辑器编写集算脚本,(p1.dfx),完成表数据读取计算,为报表返回结果集(右侧为格子运行后结果)。

    A1:连接mongodbip和端口号是localhost:27017,数据库是test,用户名和密码为空。如果需要其他参数的话可以按照mongo://ip:port/db?user=…&password=…格式继续写参数。

    A2:使用find函数从mongodb中取数,形成游标。集合是score,取出除_id外的所有字段。可以看出find函数和mongodbfind函数类似。集算器的游标是分批读取和处理数据,可以避免数据量过大,内存出现溢出的情况。

    A3:关闭连接。

    A4:按照id字段分组。

    A5:汇总总成绩。

    A6:按总成绩排名,为报表返回结果集。

编辑报表模板

     首先在集算报表设计器中新建报表,设置数据集,使用“集算器数据集类型,调用编辑好的脚本文件(p1.dfx):

    其中,dfx文件路径既可以是绝对路径,也可以是相对路径,相对路径是相对选项中配置的dfx主目录的。

 

     编辑报表表达式,直接使用集算脚本返回的结果集,不再在报表中分组排序,完成报表制作:

    在设计器中预览报表,可得到如下结果:

通过上面的实现可以看到,使用集算器脚本可以方便地完成mongodb数据读取计算,而且外置的集算脚本具有可视化的编辑调试环境,编辑好的脚本还可以复用(被其他报表或程序调用)。不过,如果脚本已经调试好,而且不需要复用的时候,要维护两个文件(集算脚本和报表模板)的一致性会比较麻烦,这时候直接使用集算报表的脚本数据集就比较简单了。

    在脚本数据集中可以分步编写脚本完成计算任务,语法与集算器一致,还可以直接使用报表定义好的参数。使用脚本数据集可以这样完成:

1.  在数据集设置窗口中点击“增加”按钮,弹出数据集类型对话框,选择脚本数据集”;

2.   在弹出的脚本数据集编辑窗口中编写脚本;

3. 报表表达式,与使用集算器数据集一致,不再赘述。