BI 前端实践 19:集算器 DQL 的自助查询
实践目标
集算器DQL针对报表DQL做了新的改进,能比较自由地进行横、纵向连接汇总值;基于集算器DQL单独开发了前端的自助查询页面,除了支持DQL新特性,还增加了自动明细、分组查询能力,查询结构的展现也提供两种排列方式,以适应不同用户的思维习惯。
页面概览
左上功能按钮依次是查询、撤销、重做、保存、打开;
右上列出raqsoftConfig.xml配置的所有集算器DQL类型数据源,选其中一个做自助查询;“搜索数据”按钮跳转到搜索页面(集算器DQL服务器提供的一种更自由查询数据的方式)。
左侧是元数据树,包括整个数据库所有可选的数据信息,逐级关联的表、同维表、主子表;维字段、指标字段及其多种汇总方式、层字段。
右侧是选出的查询信息,根据选出字段的特征,自动形成单表明细、分组汇总、多表横/纵关联等各类查询。
页面功能示例
明细数据查询
以订单表为例,从展开的各级选出了一些字段,包含外键表客户、销售雇员等信息。
虽然涉及多个数据库中的物理表,但DQL查询是针对单个订单表的:
SELECT
T1.订单ID
,T1.客户ID.客户名称
,T1.客户ID.联系人姓名
,T1.雇员ID.姓名
,T1.雇员ID.上级.姓名
,T1.订单金额
FROM 订单 T1
自动分组查询
同样是选取了客户ID、雇员ID两个维度字段,再选出“订单金额”指标时是明细查询,如果改选“订单金额求和”汇总时,就会自动变成分组查询。
SELECT
T1.客户ID
,T1.雇员ID
,T1.订单金额
FROM 订单 T1
SELECT
T1.sum(订单金额) 订单金额求和
ON 客户ID ,雇员ID
FROM 订单 T1
BY T1.客户ID ,T1.雇员ID
分组后关联查询
1000元以上的订单为大订单,以下为小订单。想统计每个客户的大订单总额、小订单总额。这需要两个分组查询分别汇总两种订单,然后再把两个结果集UNION在一起。
SELECT
T1.sum(订单金额) 大订单总额 ,
T2.sum(订单金额) 小订单总额
ON 客户ID
FROM
订单 T1 WHERE (T1.订单金额>1000) BY T1.客户ID
UNION
订单 T2 WHERE (T2.订单金额<1000) BY T2.客户ID
这时,还想同时查出大、小订单的“订单总额”,就可以再追加涉及多表的复合字段:
SELECT
T1.sum(订单金额) 大订单总额 ,
T2.sum(订单金额) 小订单总额 ,
sum(T1.订单金额:T2.订单金额) AS 订单总额
ON 客户ID
FROM
订单 T1 WHERE (T1.订单金额>1000) BY T1.客户ID
UNION
订单 T2 WHERE (T2.订单金额<1000) BY T2.客户ID
这种复合字段,用于汇总多个不同物理表中同类指标时更显便捷:
SELECT
sum(基金表.金额:股票表.金额) AS 买入总额
ON 机构,日期
FROM
基金表 BY 买入机构, 买入日期
UNION
股票表 BY 买入机构, 买入日期
查询结构横纵切换
横向排列结果字段比较像常规表结构;纵向排列适合结果字段比较多,方便操作;或哪种符合自己思维习惯就切换成哪种:
部署集成
集算器DQL服务器是一个独立运行的JAVA程序,{集算器根目录}/bin/startDQLServer.bat,WEB端用JDBC方式访问它,从使用方式看,可以简单的把它类比成一种新型的数据库,只不过是用不同的查询语言(DQL vs SQL)获得数据。除了查询数据的DQL语句,它还提供一些描述元数据的接口,以方便前端BI用可视化的方式生成查询DQL。用DQL设计器定义自己的元数据,部署到{集算器根目录}/esproc-services/下,就可以给WEB提供服务了。
WEB端要引入润乾报表安装包中{WEB根目录}\WEB-INF\lib下的全部jar,其中esproc*.jar是DQL Server的JDBC driver程序,guide.jar为开源的自助查询、分析页面程序,raqsoftReport .jar为报表程序;配置文件\WEB-INF\web.xml,raqsoftConfig.xml;\raqsoft\dql\下的jsp、js等web相关的文件。
raqsoftConfig.xml中需要增加集算器DQL JDBC的数据源:
部署完成后,访问{WEB根目录}\raqsoft\dql\jsp\esprocDql.jsp?dateSource=EsprocDQL,就能对自己的数据库自助查询了,数据源名称随意起,在配置文件和jsp中一致即可。
开源代码及二次开发
自助查询页面jsp、js、java都是开源的,想更改、增补功能时,自己动手更改这些源代码。
页面jsp为\raqsoft\dql\jsp\esprocDql.jsp;
\raqsoft\dql\js\下的query.js、dqlApi.js、dqlreport.js、where.js是实现主要功能模块的js;
主要Java类是com.raqsoft.guide.esprocdql.EsprocDQL.java。
依赖DQL服务器特色的查询能力,有想法重新设计、实现一套自己的前端BI查询,可以通过集算器DQL JDBC执行“list metadata”,获得元数据信息,以这个为基础做开发。
对润乾产品感兴趣的小伙伴,一定要知道软件还能这样卖哟性价比还不过瘾? 欢迎加入好多乾计划。
这里可以低价购买软件产品,让已经亲民的价格更加便宜!
这里可以销售产品获取佣金,赚满钱包成为土豪不再是梦!
这里还可以推荐分享抢红包,每次都是好几块钱的巨款哟!
来吧,现在就加入,拿起手机扫码,开始乾包之旅
嗯,还不太了解好多乾?