
Java相关
文章平均质量分 81
iteye_15107
这个作者很懒,什么都没留下…
展开
-
简化SQL式计算之固定排序
固定排序不是按照某个字段升序或降序排序,而是有着固定的顺序,比如按照2,3,1的顺序排序,或者按照"DSGC","TAS","GC","HU"的顺序来排序。 如果允许在数据库建一张表来存储依据,那就可以用join语句来实现排序。但很多时候排序依据是变动的,或者数据库不能建表,这时就需要先union再join,或者用decode函数。排序依据比较短的时候可以这样做,但排序依据有时候...原创 2015-05-12 07:58:56 · 184 阅读 · 0 评论 -
按组处理大文件(结构化文本)
有这样一类文本文件:文件太大无法全部读入内存计算;但数据已按某列排序,如果以该列为标准每次读取一组数据,则可以放入内存进行计算。电信通话记录、网站访问记录、商场会员信息等等都属于此类文件。JAVA实现此算法需要编写大量代码,过程复杂难以维护。使用集算器来辅助Java编程,这类问题就轻松许多。下面我们通过例子来看一下具体作法。文本文件sOrder.txt存储着大量的订单信息,以tab为分隔...2015-02-27 14:51:17 · 306 阅读 · 0 评论 -
快速实现对结构化文本的条件过滤
直接用Java实现文本文件中数据按条件过滤会有如下的麻烦: 1、文件不是数据库,不能用SQL访问。当过滤条件变化时需要改写代码。如果要实现象SQL那样灵活的条件过滤,则需要自己实现动态表达式解析和求值,编程工作量非常大。 2、文件太大时不能一次性装入内存处理,而采用逐步读入方式在考虑到性能时又会涉及到文件缓冲区管理、拆行计算等复杂编程。 使用集算器来辅助J...2015-02-17 10:04:04 · 227 阅读 · 0 评论 -
报表动态可挂接算法的简便实现
在报表项目中,有些报表的数据计算方法会经常改变。例如:某企业员工的实际工资是通过绩效得分计算出的,算法经常变动,需要在不改动其他代码的情况下用新算法替换旧算法。如果用Java来实现计算的话,虽然可以实现动态可挂接计算模块,但是存在缺乏基础类库、占用多余内存等问题。 采用润乾集算报表可以很好的解决这些问题,实现低耦合、热部署的动态挂接算法。集算报表挂接算...2015-02-13 16:44:15 · 197 阅读 · 0 评论 -
复杂多数据源报表join后再计算
复杂数据源是报表开发的常见问题,比如不同数据库表先进行join运算,再进行后续的过滤分组排序等运算。JasperReport/Birt等报表工具有virtual data source或table join,可以一定程度地实现多数据源join后计算,但掌握起来并不容易。集算器具有结构化强计算引擎,支持多样性数据源,集成简单,可以协助报表工具方便地实现此类需求,下面通过一个例子来说明多数据源...原创 2015-02-10 14:40:56 · 337 阅读 · 0 评论 -
将数据放至数据库外或文件系统来提高报表系统性能
在报表应用中,针对历史数据查询的报表占比很大,这类报表的特点是:第一,数据变化小,查询的历史数据几乎不会发生变化;第二,数据量大,数据量随时间跨度增大而不断增加。如果数据始终存放在数据库中,由于大多数数据库的JDBC性能都很低下(JDBC取数过程要做数据对象转换,比从文件中读取数据会慢一个数量级),这时涉及数据量较大或在并发较多的时候,报表的性能会急剧下降。如果能将这些变化不大...2015-02-06 15:06:43 · 134 阅读 · 0 评论 -
脚本式计算能力对报表工具的重要性
在报表项目开发中常常会出现自定义数据源的情况。这是因为有很多结构化计算比较复杂,需要多步骤完成。sql或者报表本身的计算能力并不适合完成这种过程化计算,所以报表程序员会借助于报表API,使用Java程序来完成。 例如这个《各地区销售情况分析表》: 该报表是根据订单表统计各(预置)时间段内,各地区的订单数量、订单金额汇总。其中各时间段范围为: 1996年圣诞前:date &...2015-02-03 11:31:25 · 128 阅读 · 0 评论 -
报表开发中通用group_concat函数的实现方法
使用Jasper或BIRT等报表工具时,常会碰到一些非常规的统计,用报表工具本身或SQL都难以处理。比如基于MSSQL/Oracle时,在报表中呈现类似group_concat函数的计算结果。 集算器具有结构化强计算引擎,集成简单,可以协助报表工具方便地实现此类需求。下面通过一个例子来说明通用group_concat函数的实现过程。 ...2015-01-30 14:10:56 · 276 阅读 · 0 评论 -
如何从文本文件中批量抽取数据
在进行文本处理时,有时候需要从多级目录的多个文件中取出某些数据。命令行难以处理较复杂的过程,而高级语言虽然可以实现这种算法,但代码比较难写,再加上可能存在大文件,处理起来会更加困难。集算器支持游标读取大文件、脚本递归调用,易于实现批量文件处理,下面通过例子来看一下具体作法。 目录“D:\files”包含多级子目录,每个目录下都有许多文本格式的文件,从这些文件中读取指定的行(比如第二行),...2015-01-27 13:27:20 · 6577 阅读 · 0 评论 -
去除文本文件分组后的重复行
在进行文本文件的处理时,有时需要从已经分组的数据中去除重复的行,当文件较大无法放入内存时会更为麻烦。集算器的分组运算支持丰富的选项,同时支持文件游标读取整组数据,易于实现此类算法,下面通过例子来看一下具体作法。 文件EPRom.log有4列,列之间以tab分隔,数据已按第二列分组。现在要去除数据中重复的行(只保留各组的第一行)。部分源数据如下:...2015-01-23 14:21:30 · 155 阅读 · 0 评论 -
条件查询大文本文件的通用办法
在进行文本处理时,经常会遇到对大文件进行条件查询的情况。用命令行的grep\cat可以处理一些简单情况,写法很简单,但效率太低,用高级语言处理此类问题虽然可以获得较高的运行效率,但代码编写复杂度却相当高。如果遇到条件比较复杂或条件经常变化的情况,还需要额外实现一套类SQL的底层库函数,其难度会更大。集算器支持大文件条件查询和多线程并行计算,代码简洁性能优异,下面通过例子来看一下具体作法。...2015-01-20 14:17:30 · 279 阅读 · 0 评论 -
文本文件的分组间插入汇总值
在已经分组的数据间插入汇总值,通常的做法是依次读入本组数据,直到数据发生变化,然后将本组数据和汇总值追加到新文件中,再读入下一组数据。硬编码的过程有些麻烦,集算器支持分组游标,可以自动读入整组数据。下面通过例子来看一下具体作法。 日志webdata.log有三列,列之间以逗号分隔,第一列是分组标志,后两列是数值,部分数据如下: 注意:第一...2015-01-16 11:22:00 · 124 阅读 · 0 评论 -
大文本文件的字符匹配处理办法
在进行文本处理时,经常会遇到对大文件进行字符串匹配情况。用命令行的grep\cat命令处理此类问题时,写法很简单,但效率太低,用高级语言处理此类问题虽然可以获得较高的运行效率,但代码编写复杂度却相当高。集算器支持大文件字符串匹配和多线程并行计算,代码简洁性能优异,下面通过例子来看一下具体作法。 文件file1.txt存储着大量的字符串,现在需要找出以”.txt”结尾的行数据,并输出...2015-01-13 11:23:47 · 949 阅读 · 0 评论 -
用集算器来处理大文本文件的字符串匹配
在进行文本处理时,经常会遇到对大文件进行字符串匹配情况。用命令行的grep\cat命令处理此类问题时,写法很简单,但效率太低,用高级语言处理此类问题虽然可以获得较高的运行效率,但代码编写复杂度却相当高。集算器支持大文件字符串匹配和多线程并行计算,代码简洁性能优异,下面通过例子来看一下具体作法。 文件file1.txt存储着大量的字符串,现在需要找出以”.txt”结尾的行数据,并输出到...2015-01-06 15:28:15 · 273 阅读 · 0 评论 -
集算器序表对象与R的数据框对比
集算器和R语言都是典型的数据处理及分析语言,都具有二维结构化数据对象,都擅长多步骤的复杂计算。但两者的二维结构化数据对象在底层机制上存在较大的差异,这种差异导致了集算器对于结构化数据的计算更为擅长,特别适合应用程序员进行商业计算,而R对矩阵计算更为擅长,特别适合科学工作者进行科学计算或工程计算。 集算器的二维结构化数据类型是序表对象(TSeq)。序表对象以...原创 2014-12-16 16:04:27 · 163 阅读 · 0 评论 -
用集算器来处理大文件集合运算
在进行文本处理时,经常会遇到对大文件进行集合运算的情况,比如找出两个文件不同的行数据。用命令行的grep\cat命令处理此类问题时,写法很简单,但效率太低,用高级语言处理此类问题虽然可以获得较高的运行效率,但代码编写复杂度确相当高。 用集算器来进行大文件的集合运算和多线程并行计算,不仅代码简洁,而且性能优异。文件file1.txt和file2.txt存储着大量的字符串,找出两者共同...2014-12-11 14:56:49 · 200 阅读 · 0 评论 -
集算报表对润乾报表的优化精简
润乾报表是优秀的报表工具软件。在发展过程中,润乾报表的功能越来越多,难免会出现需要整理和优化的地方。作为润乾报表的下一代产品,集算报表对润乾报表进行了新增和精简,实现了多方面的产品提升。一、集算报表新增功能 1.集成集算器,使计算与呈现分离集算报表内置了专业的结构化和半结构化数据计算开发工具:集算器esProc,在增强报表复杂外观展现能力的同时,还能解决报表复杂的数据源计算问...2014-12-08 15:30:50 · 116 阅读 · 0 评论 -
结构化文本处理时的表达式计算
JAVA不直接支持动态解析文本文件中的表达式,只能通过手工拆分字符串再递归调用来实现,这需要编写大量代码,过程复杂难以维护。使用集算器来辅助Java编程,这些问题就不需要自己写代码了,下面我们通过例子来看一下具体作法。 文本文件formula.txt是tab分割的文本文件,第一行是列名,有3个列No、type、exp,其中exp列是公式。现在需要动态解析exp中的公式,...2015-03-04 14:44:16 · 159 阅读 · 0 评论 -
结构化文本文件中非单行记录的处理
集算器能够协助java处理结构化文本的各种计算工作,但碰到非单行记录的情况就不能直接计算了,这时需要先进行一些必要的变换处理。 比如,文本文件Social.txt中存储着网站的访问记录,每三行对应一条记录,现在需要整理出这些记录,再进行下一步的计算。记录需要按(UserID, Time, IP, URL, Location)的格式取出使用或存放在文件...原创 2015-03-06 14:42:49 · 175 阅读 · 0 评论 -
结构化文本文件零代码导入数据库的方法
直接用JAVA将结构化文本文件导入数据库时,需要手工拼凑SQL语句,还需要处理各种麻烦情况,比如:表中数据是否已经存在,是要update还是要insert,文件中是否包含字段,文件中的字段是否和表字段一致。使用集算器来辅助Java编程,这些问题都不需要自己写代码解决。下面我们通过例子来看一下具体作法。 文本文件sales.txt中存储着销售订单数据...2015-03-13 11:10:04 · 259 阅读 · 0 评论 -
简化SQL式计算之行间计算
在数据库应用开发中,我们经常需要面对复杂的SQL式计算,行间计算就是其中一种,比如用每月的销售额除以上月的销售额,求比上期,或用每月销售额除以去年同月的销售额,求同期比。有些数据库没有提供SQL2003标准的窗口函数(或支持的不完备),完成行间计算就需要更换思路使用连接(join)运算替代,不仅难以理解而且运算效率低下。即使可以使用窗口函数仍要面临嵌套子查询等问题,SQL语句仍较为冗长。而使用集...2015-05-08 10:18:52 · 361 阅读 · 0 评论 -
简化SQL式计算之行列转置
在数据库应用开发中,我们经常需要面对复杂的SQL式计算,行列转置就是其中一种。实现这类算法,Oracle可以使用pivot函数,但其他数据库没有相应的函数,因此代码比较难写,也不易理解和维护。另外,pivot函数只能实现固定列的转置,对于非固定列则无能为力,其他数据库同样无法实现非固定列的转置,通常都要求助于高级语言来实现动态SQL。用集算器实现此类算法会更加简洁易懂,下面用一个例子来说明。...2015-05-05 14:39:23 · 202 阅读 · 0 评论 -
简化SQL式计算之行列转置
在数据库应用开发中,我们经常需要面对复杂的SQL式计算,行列转置就是其中一种。实现这类算法,Oracle可以使用pivot函数,但其他数据库没有相应的函数,因此代码比较难写,也不易理解和维护。另外,pivot函数只能实现固定列的转置,对于非固定列则无能为力,其他数据库同样无法实现非固定列的转置,通常都要求助于高级语言来实现动态SQL。用集算器实现此类算法会更加简洁易懂,下面用一个例子来说明。...2015-05-05 14:37:39 · 156 阅读 · 0 评论 -
简化SQL式计算之逆分组
逆分组也是我们经常遇到的一种计算,即将每条记录拆成多条,实现分组汇总的逆运算。SQL可以实现这种算法,但必须转换思路绕个大弯才能实现,代码很复杂,也不易理解。集算器实现这种逆分组较为容易,代码简单易懂,下面用一个例子来说明。 表packGather记录着多种产品的包裹汇总数据,字段productID是产品编号,字段packing是包裹件数,每个包裹里的产品数量相同,字段quantiti...2015-04-28 10:03:23 · 183 阅读 · 0 评论 -
简化SQL式计算之区间合并
区间合并是我们经常遇到的一种复杂SQL计算,如进行不重复时间段汇总,或将重叠的时间段合并等计算。由于SQL集合无序,实现时需要采用递归的方式实现,而对于递归函数不足的数据库实现起来则更加困难。除了递归,SQL实现时还要依赖多层子查询嵌套问题,SQL语句过为冗长使得实现和修改起来都很困难。 集算器在实现这类计算时则比较简单,可以通过直观分步的脚本实现区间合并,下面通过一...2015-04-24 09:09:17 · 315 阅读 · 0 评论 -
简化SQL计算之竖排多层数据
在我们经常处理的复杂SQL计算,常会遇到这种需求:请将分组数据按顺序拼为一列,并将分组和明细标识为不同的类型,如下所示: 此类算法常见于为报表整理数据,SQL缺少有序集合的机制,需要分组和明细分别设置用于排序的计算列,再将分组和明细合并,最后做排序。实现这种算法,SQL往往要用非ansi标准的特殊函数去实现,代码比较难写,也不易理解。如果对多级分组进行拼凑,将更加难以实现。...2015-04-21 08:41:07 · 181 阅读 · 0 评论 -
简化SQL计算之分组中的关联计算
在数据库应用开发中,我们经常需要面对复杂的SQL式计算,比如多层分组中的关联计算。由于SQL分组时必须同时汇总,并且不能进行对象式关联访问,因此处理这类问题会比较复杂,只能用窗口函数嵌套多层的子查询的高级技巧来实现。集算器支持真正的分组,直观的对象式关联访问,解决这类问题更加容易。分组关联在实际业务中遇到的较多,比如http://forums.bit-tech.net/showthread...2015-04-17 11:28:12 · 291 阅读 · 0 评论 -
简化SQL计算之分组内的运算
在开发数据库应用时,经常会遇到分组后针对组内数据的运算问题,如:列出近3年每年都发表过论文的学生名单,统计全部参加了历次培训的员工,选出每位客户的高尔夫成绩最高的三天等等。SQL完成这类运算较为复杂,一般需要嵌套多层,导致代码难以理解和维护。而集算器擅长表达这类组内计算,且很容易和JAVA或报表工具集成。下面用一个例子来说明。 根据数据库表SaleData统计出2013年中,每个月销售金...2015-04-14 09:17:38 · 307 阅读 · 0 评论 -
简化SQL式计算之最大值对应记录
在数据库应用开发中,我们经常需要取出最大值(或最小值)对应的记录而不是最大值本身,比如:每位员工涨薪最多的一次是哪次;高尔夫成绩最差的三次是哪三次;每个月,每种产品销量最高的五天是哪五天。由于SQL的max函数只能取出最大值,而不是最大值对应的记录,因此处理起来会比较复杂,只能用窗口函数或嵌套子查询以及keep/top/rownumber等高级技巧来间接处理。如果是多层分组、多级关联,计算过程会...2015-04-10 15:46:39 · 344 阅读 · 0 评论 -
简化sql计算系列之记录拆分
数据库应用开发中,经常会遇到一些比较复杂的SQL式计算,比如记录拆分,将按分隔符分隔的一条记录拆分成多条记录。SQL在实现时由于数据库间的差异,会遇到语法支持不足、嵌套多层等问题。而集算器具有丰富的类库,可以编写直观分步的脚本,完成这类计算要简单许多,下面通过一个例子来看一下集算器的实现方式。 应用程序将用户一次登陆后的所有操作代码按逗号分隔,以一条记录存储到...2015-04-07 10:04:00 · 251 阅读 · 0 评论 -
有序归并文本文件
许多数据库有MERGE语句,可以方便地将两个表归并。但如果需要归并的数据在文本文件中,就无法直接使用数据库的语法了。这时候可以用集算器针对文本文件完成类似MERGE语句的功能。 table1.txt和table2.txt是结构相同但数据不同的文件。现在要根据列逻辑主键A、B用table2更新table1,即主键相同但其他字段不同时更新table1,主键不同时...2015-04-03 11:00:23 · 218 阅读 · 0 评论 -
并行处理大文本文件
集算器可以方便地用并行方式处理大文本文件,下面通过一个例子来说明使用方法。假设有个一千万条销售记录的文本文件sales.txt,其主要字段是SellerID(销售员)、OrderDate(订单日期)、Amount(订单金额),请计算每个销售员在近四年里的大订单总金额。其中,金额在2000以上的属于大订单。要进行并行处理,首先要能对文件进行分段,集算器提供了游标数据对象cursor及其函数...2015-03-31 09:21:57 · 889 阅读 · 0 评论 -
文本文件连接的实现
问题来源:http://stackoverflow.com/questions/26820118/text-file-processing-using-javaJAVA没有直接处理文本文件的连接运算的类库,自行编码非常复杂,特别是文件太大无法放入全部读入内存时。集算器可以协助JAVA实现这些运算,下面通过例子来看一下具体作法。文本文件order.txt的第一行是列名,列SellerId是...2015-03-27 15:26:53 · 239 阅读 · 0 评论 -
用集算器解决结构化文本文件的排序问题
直接用Java实现文本文件排序,对于小文件还较为简单,如果是内存装不下的大文件,需要分段读入数据,再将每段排序结果写成临时文件,最后归并这些临时文件,编程非常复杂。即使只处理内存可放下的小文件,也要面对解析文本中数据类型的任务,虽然不是很难,但要写较长的代码。使用集算器辅助java编程就可以轻松规避这些问题。下面我们来看一下具体作法。文本文件employee.txt中保存的员工信息,需要按照...2015-03-24 14:24:01 · 177 阅读 · 0 评论 -
结构化文本文件之间的集合运算
JAVA不直接支持集合运算,因此要用嵌套循环才能实现文本文件之间的交集、并集、差集等集合运算,如果文件数量较多,或者文件较大而无法放入内存直接计算,再或者要按照多个字段进行集合运算,则相应的代码会更加复杂。集算器直接支持集合运算,可以协助JAVA轻松实现此类算法,下面我们通过例子来看一下具体作法。有两个小文件:f1.txt和f2.txt,第一行是列名,现在需要对文件中的Name字段进行交集运...2015-03-20 11:05:15 · 121 阅读 · 0 评论 -
大文本文件的分组汇总办法
直接用Java实现文体文件分组汇总会有如下的麻烦:1、文件不是数据库,不能用SQL访问。当分组、汇总表达式变化时,只能改写代码。而要实现灵活表达式的话,需要自己实现动态表达式解析和求值,编程工作量非常大。2、遍历过程中记录分组结果,结果小了还可以存在内存中,如果分组结果太大时要将中间结果缓存进临时文件再归并,实现过程非常复杂。使用集算器辅助Java编程,这些问题都有现成的类库可以解决...2015-03-17 10:44:18 · 410 阅读 · 0 评论 -
集算器和R语言处理外存文本文件的对比
作为数据计算语言,集算器和R语言都提供了丰富的功能用来处理外存中的文本文件。两者在基本用法上有很多相似之处,但区别也很明显,比如处理列宽固定的文件、读写指定的列、处理大文本文件,计算性能等方面。下面详细对比两者的异同。 1、基本功能对比 描述: sales.txt共有六列,列之间以制表符(\t)分割,行之间以换行符(\n)分割,其中第一行为列名。请将该文件读入内...2014-12-03 15:52:31 · 167 阅读 · 0 评论 -
集算报表与润乾报表的函数语法对比
集算报表5.0在保留润乾报表V4.x的核心功能外,进行了优化和精简,其中报表函数也做了适当优化,这里就常见计算来比较一下二者函数语法之间的差异。 对比函数一览表 1、数据集函数1.1ds.group()润乾报表:datasetName.group(selectExp{,descExp{,filterExp{,sortExp{,groupSortExp{,groupDescE...原创 2014-11-20 09:07:22 · 212 阅读 · 0 评论 -
用Jasper计算交叉增长率
来源:http://community.jaspersoft.com/questions/847490/how-get-annual-growth-rate-crosstab 。 交叉表的每一列都是动态生成的,进行列间计算时需要动态引用,用Jasper脚本实现此类需求有一定难度,用集算器在数据准备阶段实现则相对简单,下面用例子来说明。 数据库表store存储着多种产品在2014...2015-11-03 08:46:46 · 180 阅读 · 0 评论 -
在主表中动态插入子表字段
库表dColThread是主表,主键是tID。dColQuestion是子表,外键是tID,如下: dColThread: dColQuestion; 报表需要根据ApplicationName查询主表并以列表的形式展现数据。主表每条记录对应的status字段值有多个,但不超过5个,需要横向插入主表的Phone、Decline字段之间,依次命名为Quest...2015-10-30 09:44:27 · 328 阅读 · 0 评论