需求描述:
现在有3台服务器(比如A、B、C):C为数据库服务器,A为报表服务器,B为集算器服务器(专门做数据处理供其他应用使用)。
其中B可以访问C,A不能访问到C(即A不能直接连数据库获取数据),但A可以访问B。
问:A的报表服务器能否访问B服务器从C获取及处理后的数据用于报表呈现?具体怎么实施?
分析:
集算器作为数据计算的引擎,可以为润乾报表或其他应用提供数据支持,如Java程序可通过jdbc方式访问集算器脚本文件,从而获取脚本处理后的数据,当然润乾报表也就轻而易举了。
基本方式为:A作为报表服务器,部署报表应用;B作为集算器服务器,部署集算器;A与B之间通过类似集群方式,A在报表内的脚本数据集作为主程序,通过callx调用B服务器的子程序(获取C数据、处理并返回计算结果),这样让集算器实现报表获取数据的通道。
具体实例参考(部署过程这里不介绍,可以参考相关文章):
1、 报表脚本数据集(主程序)定义
| A | B |
1 | [192.168.1.104:4001] |
|
2 | =callx(“zi.dfx”,A1) |
|
3 | result A2.conj() | /多个节点机返回conj成一个序表 |
2、 集算器服务子程序(节点机)
| A | B |
1 | =connect("demo") | /demo数据源在B内配置 |
2 | =A1.query("select 订单ID,货主地区,货主城市,运货商,运货费 from 订单") | >A1.close() |
3 | result A2 |
|
3、 启动节点机(B)
在bin目录下找到esprocs.exe(wins下,linux是startunit.sh)启动即可。
4、 设计报表并查看结果
报表数据集用主程序
报表结果: