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.batWEB端用JDBC方式访问它,从使用方式看,可以简单的把它类比成一种新型的数据库,只不过是用不同的查询语言(DQL vs SQL)获得数据。除了查询数据的DQL语句,它还提供一些描述元数据的接口,以方便前端BI用可视化的方式生成查询DQL。用DQL设计器定义自己的元数据,部署到{集算器根目录}/esproc-services/下,就可以给WEB提供服务了。

WEB端要引入润乾报表安装包中{WEB根目录}\WEB-INF\lib下的全部jar,其中esproc*.jarDQL ServerJDBC driver程序,guide.jar为开源的自助查询、分析页面程序,raqsoftReport .jar为报表程序;配置文件\WEB-INF\web.xmlraqsoftConfig.xml\raqsoft\dql\下的jspjsweb相关的文件。

raqsoftConfig.xml中需要增加集算器DQL JDBC的数据源:

121png


部署完成后,访问{WEB根目录}\raqsoft\dql\jsp\esprocDql.jsp?dateSource=EsprocDQL,就能对自己的数据库自助查询了,数据源名称随意起,在配置文件和jsp中一致即可。

开源代码及二次开发

自助查询页面jspjsjava都是开源的,想更改、增补功能时,自己动手更改这些源代码。

页面jsp\raqsoft\dql\jsp\esprocDql.jsp

\raqsoft\dql\js\下的query.jsdqlApi.jsdqlreport.jswhere.js是实现主要功能模块的js

主要Java类是com.raqsoft.guide.esprocdql.EsprocDQL.java

依赖DQL服务器特色的查询能力,有想法重新设计、实现一套自己的前端BI查询,可以通过集算器DQL JDBC执行“list metadata”,获得元数据信息,以这个为基础做开发。


以下是广告时间

对润乾产品感兴趣的小伙伴,一定要知道软件还能这样卖哟性价比还不过瘾? 欢迎加入好多乾计划。
这里可以低价购买软件产品,让已经亲民的价格更加便宜!
这里可以销售产品获取佣金,赚满钱包成为土豪不再是梦!
这里还可以推荐分享抢红包,每次都是好几块钱的巨款哟!
来吧,现在就加入,拿起手机扫码,开始乾包之旅



嗯,还不太了解好多乾?
猛戳这里
玩转好多乾