- 浏览: 163503 次
最新评论
-
mx122723:
不错,学习了!
解决报表特殊布局的若干示例 -
Long_yuan:
说了半天加个字段就好了嘛。。。。。。
MongoDB的本地化排序 -
windlike:
...
查询MongoDB子文档的List字段 -
Long_yuan:
既然用mongodb 还是赶紧丢掉sql设计范式吧
MongoDB的外键关联处理 -
datamachine:
m635674608 写道收费的吧???不是开源的吧??有免费 ...
结构化文本文件之间的集合运算
文章列表
被数据库厂商扩展后的SQL也可动态拼接出语句执行,但SQL的集合运算和有序计算不方便,实现动态列计算很繁琐,往往要借助高级语言拼出动态SQL。
免费的集算器支持动态脚本、有序计算、显式集合,可以弥补这一不足。下面举例说明SQL开发中常见的动态列计算问题,以及集算器对应的解法。
列间排序
表order有6个整数类型的字段,现在要对每条记录的字段值进行排序,使其按从小到大的顺序横向排列。源数据如下:
SQL通常只能按某字段进行排序,如果要按照指定列表排序,就只能用decode或union,但项目一多SQL就会很长,项目如果是变动的参数,SQL就更难实现,经常需要建立临时表。而且项目和字段值不一定相等,差异部分有时要补齐在排序结果中,有时要排除在外,用SQL处理起来难度很大。
集算器支持对齐函数、有序计算、显式集合,可轻松实现固定排序。集算器还支持独立使用、控制台执行、报表调用、JAVA代码调用,详情参考【集算器辅助SQL编写的应用结构】。
下面举例说明SQL开发中常见的固定排序问题,以及集算器的解法。
简单固定排序
SQL通常只能按源表字段进行分组,如果分组依据来自另一张表、外部参数、条件列表,用SQL就很繁琐。有时分组依据需要动态生成,这些往往要借助高级语言实现。有时分组依据和源表不完全对应(或区间没有交集),差异部分有时要补齐在分组结果中,有时要排除在外,用SQL处理起来难度很大。
集算器支持对位分组、枚举分组、有序计算,可轻松实现上述非等值分组。集算器还支持独立使用、控制台执行、报表调用、JAVA代码调用,参考【集算器辅助SQL编写的应用结构】。
下面举例说明SQL开发中常见的非分等值分组问题,以及集算器的解法。
控制台命令、JAVA、python、perl都可以进行简单的文本比对,但这些工具不擅长集合运算、结构化运算,编写多线程代码较复杂,处理多字段对比、大文件对比、异构文件对比等情况时很繁琐。
免费的集算器支 ...
循环函数可以遍历数组或集合中的每个成员,可以将结构复杂的循环语句用简单的函数形式表达出来,可以减少代码量并提高可读性。集算器和R语言都支持循环函数,下面将对比两者用法上的异同。
1、生成数据
生成1到10之间的奇数。
集算器:x=to(1,10).step(2)
代码中,to(1,10)生成了1到10之间的连续整数,step函数根据上一步计算结果间隔取数,最终结果是[1,3,4,5,7,9]。集算器的这种数据类型被称为序列。
这段代码还有更简单的写法:x=10.step(2)。
R语言:x<-seq(from=1,to=10,by=2)
这段代码 ...
作为数据计算语言,集算器和R语言都提供了丰富的功能用来处理外存中的文本文件。两者在基本用法上有很多相似之处,但区别也很明显,比如处理列宽固定的文件、读写指定的列、处理大文本文件,计算性能等方面。下面详细对比两者的异同。
1、基本功能对比
描述:
sales.txt共有六列,列之间以制表符(\t)分割,行之间以换行符(\n)分割,其中第一行为列名。请将该文件读入内存,再原样写入新的文件。该文件的前几行如下:
集算器:
data=file(“e:\\sales.txt”).import@t()
file(“e:\\salesResult.txt”) ...
集算器序表和SQL数据表都是有结构的二维数据对象,都有记录、索引、主键的概念,都可以应用于结构化数据的计算。虽然都可以应用于结构化数据的计算,但两者的应用场景却有明显的区别,序表适合解决较复杂但数据量不是很大的计算问题,而数据表适合进行常规但可能数据量巨大的计算。
两者的不同是由底层机制决定的。
序表具有有序的特点,每条记录、每列数据都有确定的序号;序表支持显式集合,序表之间可以直接进行集合运算;序表也是泛型集合,其基本元素既可以是数值也可以是引用或者另一个集合。
SQL数据表缺乏上述特点,但它对内外存透明,可以用一致的语法来访问内存、外存或混合数据。
下面,我们将 ...
有时我们不能使用数据库而采用文件系统存储数据,这时就需要自行完成基于文件的数据计算。但JAVA本身缺少相应的类库,需要硬编码才能实现结构化文件计算,代码复杂且可读性差。
使用免费的集算器可以弥补这一不 ...
有时我们需要查询大文本而不是数据库,这时就需要流式读入文件并实现查询算法,还要进行并行处理以提高性能。但JAVA本身缺少相应的类库,需要硬编码才能实现结构化文件计算,代码复杂且可读性差,难以实现高效的并 ...
有些报表工具不直接支持跨行计算,需要用表脚本实现,非常麻烦,遇到多层分组的情况会更复杂。集算器支持有序计算,可以弥补这一不足。报表工具可将集算器脚本文件当做数据库存储过程执行,详情参考集算器辅助报表开发的集成方法。
下面举例说明报表开发中常见的跨行计算,以及集算器对应的解法。
比上期和同期比
库表sOrder存储着每个销售员每天的订单,报表需要统计指定时间段内各月份销售额的比上期和同期比。源数据如下:
比上期代码如下:
先用SQL进行分组汇总,计算出每年每月的销售额,再用公式“当月销售额/上月销售额”计算比上期。结果如下:
有些特殊布局难用报表工具提供的功能直接实现,但如果准备出合适的数据源,就能大大降低报表设计的难度。
使用免费的集算器可以弥补这一不足。集算器支持集合运算、有序计算、动态脚本执行,还提供了简单易用的JDBC接口,报表工具可将集算器脚本文件当做数据库存储过程执行,传入参数并用JDBC获得返回结果,详情参考集算器辅助报表工具的应用过程。
下面举例说明报表常见的特殊布局,以及集算器对应的解法。
横向分栏
报表工具大多有纵向分栏的功能,但很少有提供横向分栏的。使用集算器事先准备数据集可以可以弥补这一不足:
库表emp有3个字段,部分数据如下:
期望的报表布局是记 ...
有时候我们需要用参数动态指定数据源,或将多数据源连接为单数据源,或向子报表、table控件动态传入数据源名。对于此类需求,报表工具经常要借助高级语言实现或牺牲安全性以降低复杂度,尤其是BIRT、Jasper等单源报表。
使用免费的集算器可以弥补这一不足。集算器封装了丰富的结构化计算函数,支持动态解析表达式,支持多数据源混合计算,书写简单脚本就能实现动态数据源。集算器还提供了简单易用的JDBC接口,报表工具可将集算器脚本文件当做数据库存储过程执行,传入参数并用JDBC获得返回结果。
集算器与报表工具的集成结构如下:
下面举例说明集算器根据参数动态切换数据源的基本过程: ...
JSON是半结构化数据,Java和报表工具只提供了简单解析的类库,很难进行深度计算。而使用集算器可降低JSON的计算难度。报表工具可将集算器脚本文件当做数据库存储过程执行,传入参数并用JDBC获得返回结果,详情参考集算 ...
有些非常规的格式很难用报表工具提供的功能直接实现,但如果准备出合适的数据源,就能大大降低报表设计的难度。
使用免费的集算器可以弥补这一不足。集算器提供了集合运算,支持动态脚本执行,还提供了简单易用的JDBC接口,报表工具可将集算器脚本文件当做数据库存储过程执行,传入参数并用JDBC获得返回结果。
集算器与报表工具的集成结构如下:
下面举例说明集算器实现横向分栏的过程:
报表工具大多有纵向分栏的功能,但很难实现记录横向摆放并分栏的布局。比如库表emp有3个字段,部分数据如下:
来源:http://developer.actuate.com/community/forum/index.php?/topic/36204-split-data-row/ 。
将字段拆分为多条记录,可以用存储过程或报表脚本来实现,但代码比较复杂,这种情况下可以用集算器来辅助报表工具,下面用例子来说明。
库表data有两个字段,需要将ANOMOALIES字段按空格拆分为多个字符串,每个字符串和原ID字段形成新的记录。源数据如下:
集算器代码:
A1:查询数据库。
A2:拆分ANOMALIES字段,形成新二维表。函数conj可对A1中每个成员的计算结 ...