报表工具的二次革命之集算器的作用

之前的文章已经大致给大家介绍过大数据计算引擎-润乾集算器了。想必很多人心里还是存在疑惑,集算器作为大数据分析系统,到底它能做些什么?这篇文章,就为大家详细介绍。

降低报表开发难度

降低开发难度从而提高开发效率是集算器的设计初衷,是最容易理解的作用,前面已有粗略介绍。

这方面的细节内容太多,我们会再做一个专门话题详细讲述集算器如何解决报表开发中的各种具体难题以及与常规手段的对比。在这里只做总结性地阐述。

比Java和SQL更易写

如前所述,集算器的设计目标是为了解决报表的数据准备,而目前这个工作一般采用Java或复杂SQL完成,存储过程及中间表也可以算作是SQL。

与Java这类没有提供直接结构化计算的语言相比,采用集合化语法的集算器代码会更为短小,这很容易理解,毕竟集算器基于Java提供了更高层的类库和方法。

短小不仅仅是写得快,而且还能容易理解和排错。一个页面内能看到更多的代码,从而能更完整地理解代码的含义。使用集算器编码时,伪实代码的比例大约是只有1.5:1,绝大多数报表的数据准备算法可以在一个屏幕内显示出来。

而使用Java就很难这样,几十行代码下来仅仅能做个简单的汇总,一个完整的业务逻辑动辄需要几百行代码,翻看到后面时已经忘了前面是怎么做的了。

除了代码本身简短的外,集算器特有的网格式编码和调试方式还能进一步强化这个特色。程序员可以在一行写多句相关的代码,某句长代码不必完全显示出来从而不影响查看算法整体结构,循环可以用更直观的方式呈现,单步执行和单元格变量可以随时查看每一步的结果而提高调试效率。

这些,都可以让程序员专注于数据计算中的业务逻辑而非技术细节。

与SQL这类本身就支持结构化计算的语言相比,集算器完善了对分步计算、集合化、有序计算和对象引用等几方面的支持。对于日期和字串等运算,集算器也比大部分SQL提供了更丰富的方法。

许多情况用SQL也不是写不出来,但不能直接按自然思维实现,很费脑筋,这种代码放时间长了程序员自己都会忘了是怎么写出来的,给将来的维护也造成麻烦。

集算器代码则没有这些问题,符合自然思维习惯,即使是与SQL相同的思路也能更清晰地表达,很容易理解和维护。

比报表中计算更广泛

报表工具一般都可以完成计算列、分组排序等运算。基于非线性报表模型的工具还提供了跨行组和相对格与格集引用方案,可以完成相当复杂的运算。

报表呈现环节的计算是一种状态式的计算。所谓状态式计算,就是把所有计算表达式一次性都写出来,由报表工具根据依赖关系决定计算次序。这种直接把运算写到布局中的好处是很直观,在依赖关系不太复杂时能一目了然地了解各单元格的运算目标。

但是,在依赖关系较为复杂,计算需要分成多步时,这种状态式计算就显得困难了。还有的时候,计算的中间结果并不要呈现,这样就会出现隐藏格。隐藏格不仅将很大程度地破坏状态性运算的直观性,而且还会导致运算效率低下,占用更多内存。

比如要列出销售额占前一半的大客户,这时就有典型的过程性计算,在报表中要使用隐藏行列手段将不该列出来的条目隐藏,而不能直接过滤掉。再比如带明细的分组报表要按汇总值排序,这需要先分组再排序,而采用状态式计算的报表工具无法控制这个次序,这个报表也就无法完成了。

对于这类过程性计算或需要隐藏格的复杂报表,采用集算器在数据准备阶段完成计算,报表只负责呈现及少量的直观计算,可以有效地保留状态式计算的优势。把复杂运算到集算器完成,过程虽然多了一步,但结构更为清晰。

数据准备还能解决动态数据源和数据集的问题。报表使用的数据源一般是在报表工具中配置的,不能根据参数动态选择,而使用集算器数据源时就可以用脚本控制连接不同的数据源。通用查询报表要求数据集取数SQL不能简单地用参数控制,而要整体替换,支持宏的报表工具能够一定程度地解决这个问题,但面对要将宏计算后才能拼进SQL的复杂场景也会感觉困难,而采用集算器数据集则无论是否支持宏、需要多复杂的宏计算都可轻松应对。

数据准备不仅能解决报表中的计算,还能协助处理格式。比如许多报表工具都支持纵向分栏,但很少有报表工具支持横向分栏,对这种需求无法处理。而采用集算器可以方便地将原数据集变换成横向拼接过的数据集,报表工作只要用普通的模板呈现一个列数更多的数据集即可。再比如许多报表工具不支持末页补足空行,也可以用集算器在返回数据集时补。

一致的多样性数据源支持

报表的数据源并不只是关系数据库,还可能是TXT或json等文件,而文件没有计算能力,所以常常要有一个过程将这些数据导进数据库,增加开发工作量。

如果采用集算器准备数据,则可以直接用这些文件作为数据源去生成报表,不需要导入数据库的过程。

数据库包括NoSQL数据库、文件包括HDFS文件,对于集算器来讲都是数据源。集算器自有的计算能力可以使这些计算能力不一的多样性数据获得通用一致的计算能力。比如文件几乎没有计算能力,MongoDB对JOIN和GROUP运算支持不足,各家SQL对窗口函数的支持程度不同、日期与字串处理能力也普遍不足且风格迥异。这些数据源都能基于集算器采用一致通用的方案来计算,而这将意味着更低的移植成本以及学习难度。

接下来的文章,还将继续为大家介绍大数据计算引擎-润乾集算器。

时间: 2024-10-19 08:30:08

报表工具的二次革命之集算器的作用的相关文章

报表软件的二次革命之集算报表

产生背景 报表工具是润乾的主打产品,我们在这方面积累了丰富的经验,当然,也有教训. 现代的报表工具主要解决两个环节的问题:一方面是呈现,也就是把数据以表格或图形的方式展现出来:另一方面是数据计算,即计算出源数据中没有和不能直接呈现的数据,比如一些公式格.分组汇总排序等等. 这里说的报表,主要是指用户事先确定好格式和数据运算规则的报表,我们俗称为固定报表.自助报表,也就是业务用户可以自己简单拖拽可以完成的报表,不在此类.自助报表的话题我们会专门再讲. 十年前润乾首先提出了非线性报表模型,带来了报表

集算器实现报表中零散的不规则计算

报表中存在的不规则计算往往给报表开发带来很大的困难,使用报表工具往往很难甚至无法直接实现.这里的不规则计算是指报表中存在特殊条件的统计项(计算),如:销售订单金额统计中计算前5名销售金额的合计和占比:学生成绩统计中总成绩排名前10的学生中语数外都超过90分的人数:用户充值统计中充值金额超过充值总额一半的用户数量等. 通过集算器可以很方便完成这类报表的开发,我们通过两个例子来了解一下具体的做法. 1.实例一 1.1 .报表描述 根据员工与订单表统计各销售人员的销售情况,并在报表中计算列出订单总额.

用集算器实现跨数据库关联报表

实际应用中很多报表的数据来源于多个不同类型的数据库,报表数据源跨数据库是报表开发中的常态.目前实现这类跨库关联报表的方式有多种,但都会存在这样那样的问题. 使用报表工具自身多源关联功能 现在大多数主流报表工具都支持多数据源关联,这在某些方面确实为报表用户带来了便利.然而我们也经常会遇到通过报表自身的多源关联功能很难实现一些跨库关联的报表(由于数据结构和业务本身决定).这当然容易理解,报表工具主要是来做数据展现的,而对数据计算本身来说并不擅长. 即使有的能实现,在报表中做跨库关联计算的效率也较低,

用集算器协助Java读入文本

JAVA提供了最基本的文件处理函数,可以简单无结构的方式读入小文本文件,如果遇到需要结构化.格式多样.要求特殊的文件或内存装不下的大文件,相应的代码就会很复杂,可读性和复用性也很难保障. 使用免费的集算器可以弥补这一不足.集算器封装了丰富的结构化文件读写和计算函数,并提供JDBC接口.JAVA应用程序可以将集算器脚本文件当做数据库存储过程执行,传入参数并用JDBC获得返回结果.详情参考集算器用作Java计算类库的应用结构. 下面说明JAVA读入文本的常见案例,以及集算器对应的解法. 读入指定列 

集算器替代存储过程实现报表数据源

存储过程是SQL语句和流程控制语句的集合,常用来把一个复杂的计算目标分解为多个简单的计算步骤.虽然以复杂性换来了灵活性,但SQL语句固有的缺点仍然体现在存储过程中,比如:分步不彻底.数据无序.缺乏集合.缺乏引用,之前我们也分析过存储过程作为报表数据源的利弊,可点击这里查看. 集算器解决了存储过程的上述缺陷,降低了对开发人员的技术要求,是存储过程理想的替代工具. 报表例子说明 某电信产品厂商有一张报表,主要目的是分析优势产品的销售额.销量.环比等指标,其中优势产品的定义是"在每个州的销量均在前10

用集算器实现跨行组计算报表

跨行组计算类报表在报表开发中非常常见,如常见的同期比.环比计算.移动平均值计算等.这类报表由于经常要引用其他行列的数据进行相对/绝对位置运算,使得报表工具在实现时并不轻松.功能相对强大的润乾报表需要借助层次坐标和位移坐标,辅以条件表达式和"$"运算符完成,书写和理解都有相当的难度. 其实通过集算器这类报表则非常容易实现,我们来看一个例子.     报表需求:根据订单表和指定年份(参数)按月统计订单金额,以及与上一订单月金额比,与去年同月金额比,样式如下: 这里应该注意的是比去年同期是指

用集算器实现报表的外置存储过程数据源效果

业务逻辑相对复杂的报表开发中,开发人员往往会使用存储过程为报表准备数据.而使用存储过程往往受到编写困难.执行效率低下.数据库操作权限限制等问题,着实让开发人员不爽.如何改进或替代存储过程,成了很多程序员的心心声. 本文通过一个例子说明如何使用集算器实现报表存储过程数据源效果. 报表样式 某网络平台需要监测查看一定周期内的用户状况,需要为运营部门出具日报.周报.月报.年报等报表,每类报表中均包含本期与上期.上上期数据比较,故涉及数据量较大.这里以其日报为例(月报年报只是统计周期不同),报表格式如下

集算器如何优化复杂报表计算(2)格式布局及过程计算

布局格式 横向分栏 大多数报表工具都支持纵向分栏,但几乎没有报表工具支持横向分栏,我们可以用集算器把数据集事先摆好. A B C 1 =db.query("select a,b,c from T ") 2 =A1.step(3,1) =A1.step(3,2)|[null] =A1.step(3,3)|[null] 3 =A2.derive(B2(#).a:a2,B2(#).b:b2,B2(#).c:c2,C2(#).a:a3,C2(#).b:b3,C2(#).c:c3) 这段代码将3

润乾集算报表的集算器数据集部署(2)

2.WEB端部署 集算报表在web端部署流程与一般J2EE应用部署流程基本一致,包括: 如果和已有应用集成,一般来说已有应用已经配置好了数据库连接池,因此第一.第二步骤可以省略,只需要后面几个步骤. 配置应用服务器的数据库连接池.发布报表应用这两个步骤在不同应用服务器中的操作界面和操作方法是有区别的,举例来说,发布报表应用这个步骤,在weblogic和websphere中一般是发布一个war包或者是ear包,而在tomcat中就是在server.xml或context.xml中配置,可以不打wa