您好!
欢迎来到京东云开发者社区
登录
首页
博文
课程
大赛
工具
用户中心
开源
首页
博文
课程
大赛
工具
开源
更多
用户中心
开发者社区
>
博文
>
一个低代码报表配置平台实践
分享
打开微信扫码分享
点击前往QQ分享
点击前往微博分享
点击复制链接
一个低代码报表配置平台实践
自猿其说Tech
2022-02-23
IP归属:未知
313040浏览
Sql
数据库
### 1 背景 报表作为重要的数据载体,在各个业务中都扮演着重要的角色。随着业务的快速发展,报表的形态也在面临更多的挑战,报表的展示形式和口径随时都可能会变化。这给传统的报表系统带来了很大的挑战,每次改逻辑都需要重新上线,不仅有很大风险,而且还在应付不断变化的变化时难免会很吃力。 该平台目标是可以快速的通过界面化形式来配置报表模型,对报表的展示通过扩展形式动态扩展。再配合一套报表引擎。用来解析报表模型,根据请求实时执行报表查询统计。最终将结果通过接口的形式输出。平台地址: http://dbcp.jdl.cn/ ### 2 实现原理 对一个报表拆解结构如下:一个报表由三个部分组成(条件、指标、字段)。针对这三部分进行建模,配置报表模型,再搭配解析引擎,自动去执行报表查询得到报表结果。 - **条件:**就是报表的查询条件,作为报表查询的输入可以包含多个参数,参数又可以去指定类型和测试值。 - **指标:**由指标sql、字段、数据源,参数等信息组成。报表字段可以设置别名、字段类型(值类型、纬度类型)、中文描述等信息 - **字段:**报表要用到的字段,可以从指标的字段列表筛选,然后可以设置字段的显示中文名、展示属性(格式化、显示、下载、下钻、计算列脚本)等。 ![](//img1.jcloudcs.com/developer.jdcloud.com/9faab6c7-f14b-4f3f-9a8a-9ddf7a4839aa20220223160411.png) ### 3 功能介绍 这个平台由配置系统和报表引擎两部分组成,配置管理系统通过接页面方式将报表模型所需的信息录入,报表引擎通过读取报表配置,生成报表模型,然后进行具体的引擎逻辑处理。 #### 3.1 配置管理 ##### 3.1.1 条件管理 就是将报表的查询条件映射为指标配置录入系统中,多个报表可以公用同一个条件,参数可以配置测试值,方便自动化报表测试。页面如下 ![](//img1.jcloudcs.com/developer.jdcloud.com/7aedb0ae-ff28-4a06-af3a-d0bca2f89c7220220223160447.png) ##### 3.1.2 指标管理 这个就是将每个报表指标通过sql的方式进行配置,系统会根据sql的查询字段自动解析报表字段信息,指标参数也是后台自动解析的。不需要手工去配置。 ![](//img1.jcloudcs.com/developer.jdcloud.com/8f2029e6-23f9-42d0-a36a-30a99932812f20220223160512.png) ##### 3.1.3 报表配置 当所需的指标和条件都录入以后,可以Dag组件,实现了拖拽方式将多个指标关联生成一个报表。然后进行(条件--》指标)参数映射。报表列配置等。就可以生成一个报表。再配置测试功能。可以所见即所得的获得报表的结果。 报表指标关系建立页面如下: ![](//img1.jcloudcs.com/developer.jdcloud.com/7ae8fd25-5d27-4c74-9750-3166143a42a920220223160535.png) 指标参数和条件参数绑定页面如下: ![](//img1.jcloudcs.com/developer.jdcloud.com/2e35a38e-b939-4f2d-a574-5656668dbe6320220223160550.png) 报表列配置页面如下: ![](//img1.jcloudcs.com/developer.jdcloud.com/48467e07-e023-4162-87b7-e6204f1d14ef20220223160604.png) #### 3.2 报表引擎 报表引擎就是根据报表id找到报表配置模型,然后将模型转化为Tree结构,然后先并发执行指标查询获得所有结果集,然后遍历树,对结果集进行组装。最后再根据报表列配置去设置展示属性及计算列加工。 整体流程图如下所示: ![](//img1.jcloudcs.com/developer.jdcloud.com/d36e45dd-56cd-4aa6-9991-b8aa85fd97dc20220223160630.png) ##### 3.2.1 多数据源查询支持 支持跨源、异构的数据源。引擎内部实现了一个查询Select选择器,可以根据数据源类型去获取不同的数据源连接,sql替换、连接池管理等封装。保证了引擎内部是对数据源数据源隔离的。 ```java public class DbQuerySelect { public static DbQuery getDbQueryInstance(int clusterType){ ClusterType dbType = ClusterType.getByCode(clusterType); switch (dbType){ case MYSQL: return MysqlQuery.getInstance(); case ES: return EsSqlQuery.getInstance(); case PRESTO: return PrestoQuery.getInstance(); default: return null; } } } ``` ##### 3.2.2 Sql格式化 采用Mybatis引擎,通过模拟mybatis xml配置获得boundSql,可以支持mybatis的所有表达式。同时为了统一支持时间函数(不同数据源的时间函数可能不一样),所以借助了druid的sql解析引擎。将sql函数转为对应时间串交给对应的底层sql引擎。 ##### 3.2.3 结果聚合 遍历整个报表模型树,每个节点和对应的查询结果进行匹配。然后根据指标间关联关系,对指标结果进行聚合。考虑到一半每个指标的查询结果集一般是可控的,目前采用内存中进行聚合的方式性能最高的【分布式的方案还在调研中】。可以支持列合并、行合并等多种合并形式。 ##### 3.2.4 列处理 报表可以支持对每行结果集中的字段间进行自定义逻辑处理,目前支持了js脚本引擎。groovy脚本引擎正在开发中。每个字段都可以定义显示属性。比如是否支持下载、下钻等属性。 ### 4 实践案例 由于该平台我们刚发布,目前冷链数字化工作台刚开始接入。平台提供了测试功能,当配置完成一个报表以后,可以实时去点测试按钮进行验证报表结果。我们会把条件参数自动显示,默认使用测试值,也可以收工修改测试值。效果如下。 ![](//img1.jcloudcs.com/developer.jdcloud.com/0cd77b27-3416-49ef-b1b6-8fdf702d8f3420220223160745.png) ### 5 总结 通过该平台配置,可对复杂报表逻辑实现配置化。并且我们在报表列纬度增加了扩展,可以去定义各种列属性,主要有如下几个优点。 - **便捷可溯源:**通过sql的方式来配置指标,通过Dag拖拽的方式来组合报表,做一个报表更简单。而且指标字段都可溯源。比如想统计一下哪些报表用了某个表的某个字段,都可以通过平台很容易的统计。 - **易维护:**例如做了一个报表,用户想修改一下报表的口径,那我们只需要修改指标配置即可,完全无需修改代码,想增加或者修改字段也只需要在报表列配置里面进行配置即可。列的属性也可以动态控制。 - **易扩展:**在列上加了扩展属性列表,例如可以定义列的展示格式、列是否支持下载、列是否敏感字段等,后续可支持自定义。 - **去DAO:**之前我们实现报表,可能回去查询dao,所以需要有dao层,通过该平台只需要通过接口的方式调用即可,之前dao的逻辑都交给平台来实现了。如果遇到大促也可以和做到和业务系统解构,单独升级报表引擎即可。 ------------ ###### 自猿其说Tech-京东物流技术发展部 ###### 作者:王秋晓
原创文章,需联系作者,授权转载
上一篇:京喜达工作台拆分微前端实战
下一篇:有限状态机在国际计费中的应用探索
相关文章
【技术干货】企业级扫描平台EOS关于JS扫描落地与实践!
开发也要防沉迷--IDEA插件教程
如何保证MySQL和Redis的数据一致性?10分钟带你搞定!
自猿其说Tech
文章数
426
阅读量
2149963
作者其他文章
01
深入JDK中的Optional
本文将从Optional所解决的问题开始,逐层解剖,由浅入深,文中会出现Optioanl方法之间的对比,实践,误用情况分析,优缺点等。与大家一起,对这项Java8中的新特性,进行理解和深入。
01
Taro小程序跨端开发入门实战
为了让小程序开发更简单,更高效,我们采用 Taro 作为首选框架,我们将使用 Taro 的实践经验整理了出来,主要内容围绕着什么是 Taro,为什么用 Taro,以及 Taro 如何使用(正确使用的姿势),还有 Taro 背后的一些设计思想来进行展开,让大家能够对 Taro 有个完整的认识。
01
Flutter For Web实践
Flutter For Web 已经发布一年多时间,它的发布意味着我们可以真正地使用一套代码、一套资源部署整个大前端系统(包括:iOS、Android、Web)。渠道研发组经过一段时间的探索,使用Flutter For Web技术开发了移动端可视化编程平台—Flutter乐高,在这里希望和大家分享下使用Flutter For Web实践过程和踩坑实践
01
配运基础数据缓存瘦身实践
在基础数据的常规能力当中,数据的存取是最基础也是最重要的能力,为了整体提高数据的读取能力,缓存技术在基础数据的场景中得到了广泛的使用,下面会重点展示一下配运组近期针对数据缓存做的瘦身实践。
自猿其说Tech
文章数
426
阅读量
2149963
作者其他文章
01
深入JDK中的Optional
01
Taro小程序跨端开发入门实战
01
Flutter For Web实践
01
配运基础数据缓存瘦身实践
添加企业微信
获取1V1专业服务
扫码关注
京东云开发者公众号