码迷,mamicode.com
首页 > 其他好文 > 详细

用润乾集算报表实现实时报表(T+0)的方案

时间:2015-02-17 10:23:11      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:集算报表   实时报表   t+n报表   润乾   

         在报表项目中,客户越来越关注源数据的实时性,希望看到最新发生的数据在报表中体现出来。但是,传统的报表工具+数据仓库+ETL方式很难做到这一点,往往是只能看到昨天、上周甚至是上个月的情况,也就是T+1、T+7、T+30统称T+n报表。很难实现T+0报表,也就是能体现实时信息的报表。

         分析其原因在于:1、如果报表的历史数据和最新数据都从客户的生产系统读取,虽然可以实现T+0报表,但是会对生产数据库造成压力,影响客户的业务。2、如果采用数据仓库的方式,那么ETL从生产库中取出数据,需要较长的“窗口时间”,一般是客户下班之后,到第二天早上上班之前,所以客户能看到的最新数据也只能是T+1。3、虽然理论上可以从历史库中和生产库中同时取数据形成实时报表,但是一般的报表工具都不具备跨库取数计算能力,其他的跨库计算方案又比较复杂,很难实施。

         可以考虑采用润乾集算报表提供的T+0报表方案,利用集算报表的混合数据源能力实现低成本的实时报表。实现思路是:把不会发生变动的大量历史数据采用数据文件存储,少量新数据从生产库读取,在保证报表实时性的同时,降低了历史数据存储的成本,减少了报表系统造成的生产数据库的负载。传统T+n方案和集算报表T+0方案结构对比示意图如下:

技术分享

         上图润乾计算报表结构中“导出(非实时)”是指在非工作时间(例如晚上),将生产数据库新增数据同步到历史数据的数据文件中。具体实现是采用润乾集算器提供的命令行执行方式,配合操作系统定时任务方式,详见集算器教程。

这里通过“各州销售统计表”来说明一下润乾集算报表T+0方案的具体做法,报表如下:

技术分享

         上图报表中的历史销售数据量很大,来自于数据文件。同时,为了保证报表的实时行,当天的少量数据直接从生产数据库(db2)取出。

         具体实现步骤如下:

         第一步,在集算器中编写集算脚本sales-state.dfx。

技术分享

         A1:连接预先配置好的生产数据库(db2)。

         A2:建立数据库游标,用简单的sql读取销售数据和销售人员的数据。从where条件中的days(current date)=days(orderdate)可以看到,销售数据仅仅读取当天的新数据。

         A3:建立预先导出好的数据文件D:/files/sales/sales.b的游标。文件游标可以分批从比较大的数据文件中读取数据,避免出现内存溢出的情况。@b选项是指按照集算器提供的二进制编码来读取文件。

         A4:将数据库游标(新数据)和文件游标(历史数据)纵向合并。

         A5:利用groups函数,完成对合并后游标的分组汇总。

         A6:按照销售总额的降序排列。

         A7:关闭db2数据库连接。

         第二步,在集算报表中建立db2数据源和集算数据集:

技术分享

         第三步:设计报表如下:

技术分享

         报表中的统计图具体制作方法参见集算报表教程。

         需要说明的是,集算报表也支持数据采用其他的方式存储,比如mongodb、hdfs或者传统数据仓库。生产库中的新增数据可以用集算器导出,也可以用其他ETL工具导出。


用润乾集算报表实现实时报表(T+0)的方案

标签:集算报表   实时报表   t+n报表   润乾   

原文地址:http://blog.csdn.net/u012388497/article/details/43865315

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!