加载中…
个人资料
人月神话
人月神话 新浪个人认证
  • 博客等级:
  • 博客积分:0
  • 博客访问:4,067,708
  • 关注人气:5,899
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
正文 字体大小:

自定义报表(2.28)

(2019-02-28 20:19:25)
标签:

自定义报表

杂谈

分类: IT咨询
对于自定义报表,我博客前面谈到过一篇文章,讲的商用报表平台或工具来实现大屏展示,而实际上一谈到报表大家谈的比较多的还是BI分析应用中常用的各种报表类工具,类似水晶报表,国内的FineReport等。

一个商用的报表平台或工具可以看到功能会很强大,但是总结来说还是数据采集,设计,呈现几个部分内容。

1. 数据采集:从结构化数据库,各类文件数据源,也包括直接提供手工填报端的自动生成。
2. 报表设计器:提供独立的报表设计器能力,支持类似分组,切片,钻取等各类复杂场景,支持各类图表。
3. 报表展示:报表展示支持各类图表的展示,支持自定义参数查询,支持类似监控大屏等。

在这里不打算详细讨论商用自定义报表能力。对于我们大部分业务系统来说,需要的报表能力往往并不需要类似BI系统报表这么强大,更多的可以理解为自定义查询能力 可定制的图表展现。那么我们在实现自定义报表的时候就应该从这两个方面来考虑一个报表如何实现。

在考虑这个问题的时候,我们先考虑报表设计器的问题。对于最终的报表展现效果我们看到,分为自定义查询条件部分,和报表内容展示区域。报表内容展示区域可以理解为一个个的独立Widget面板,每个面板就展示一个内容,可以是一个曲线图,也可以是一个表格,Panel面板里面的内容可以自己进行定制。

整体展示效果类似如下:

自定义报表(2.28)

下面来拆分下几个关键的功能。

1. 数据源的定义

数据源定义关键就是通过数据源形成可在报表界面上展示的数据集。因此该功能建议不仅仅是简单定义数据源,同时包括数据集或数据对象的定义。因为数据集本身也是可复用的,不需要重复设计。

数据源连接可以是JDBC方式,也可以是WebService接口方式,而实际上最佳方案是采用WS服务接口方式来获取数据集。这样可以进一步保障后端数据库的安全性。

为了更好的支撑参数化查询,对于数据集的定义可以带参数化查询条件,由外围传入。

2. 单数据面板的定义

单数据面板的定义实际上思路很简单,就是要实现数据集和数据展示组件之间的绑定。数据面板可以是常规的表格,折线图,曲线图,饼图等。当前如果采用百度Echart图表库的话,我们可以做到对Echart图表库的大部分图形展现都支持。

数据集笼统来说就是一个二维结构的数据对象返回,这个二维结构可以很容易影响到表格,也可以映射为类似折线,曲线,饼图等各种我们希望展示的形状。

3. 整体查询报表页面的设计和定义

对整体查询报表的设计实际上可以看到,主要工作就是定义自定义查询面板,定义和选择需要在该报表中展示的单数据面板。确定查询结果面板的具体布局形式。

对于面板布局采用最简单的Grid布局形式即可,在定义清楚一个标准的Grid布局后,我们就很容易来配置单个面板究竟占有几列几行。同时在单个面板设计的时候,我们还需要将单个面板中的待输入参数项和自定义查询中的查询条件参数进行映射和绑定,完成查询条件的传入工作。

4. 最终的报表设计内容解析和呈现

这里有两种实现方式,一种是代码动态生成然后在自动编译为独立的部署包。另外一种方式就是所有报表呈现都只有一套动态代码来执行,即整个页面是基于配置参数完全动态生成的。

第一种方式性能更好,但是配置变更后需要重新部署;第二种方式性能稍差,但是好在能够完全动态调整。

最终的单个完整报表的呈现可以理解为就是一个url地址,传入具体的报表id信息。同时单个报表的呈现还需要考虑单点集成,并预留用户id,组织id,姓名等Session相关的全局参数。

0

阅读 收藏 转载 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

新浪公司 版权所有