集算器如何优化复杂报表计算(1)数据源集
2015-11-17 08:43
78 查看
集算器协助报表计算的例子很多,但大多数计算困难都发生在数据进入报表工具之前,如上面列举的文本计算和SQL协助中就有许多案例是针对报表开发的。除此之外,还有些复杂计算是发生在报表工具环节内,以及某些并非由于计算困难导致但可以用数据源计算来解决的报表难题。这里我们来讨论集算器在这些场合下对报表工具的协助作用。
报表工具中某个报表使用到的数据源通常是确定的,报表的参数通常只用于数据集的选出条件(即SQL的WHERE部分)而不会用来选择数据源,如果我们希望某个报表使用的数据源是由参数决定的,这对于大多数报表工具来讲都能直接做到,一般都需要采用报表工具提供的API编程才行,非常繁琐。
如果采用集算器就非常简单。可将集算器作为报表的固定数据源,然后在集算脚本中再根据参数再决定连接实际的数据源取数据返回。
数据源名称用参数pds进来,报表工具本身不必支持动态多数据源了。
类似地,有些报表工具要求主子报表必须用同一个数据源,当需要主子报表用不同数据源时,也可以采用这个办法,把集算器作为主子报表的共同数据源,而实际数据源在集算脚本中根据参数决定。
动态数据集
报表工具中,报表参数通常会用作数据集选出条件的参数,也就是SQL的参数。但有时我们需要替换SQL的一部分而不能只用参数,比如整个WHERE部分是作为参数传入的,这样可能获得更灵活的查询条件。
某些报表工具支持宏,可以做到这一点。对于不支持宏的报表工具,就只能再使用报表工具提供的API用代码去改写报表模板的数据集定义,相当繁琐。用集算器就很简单:
即使支持宏的报表工具,有些SQL也不易拼出。比如希望按传入的字段列表做合计,就要在这些字段上拼加sum(),而报表工具通常没有直接变换串的手段,又必须使用API去处理,或者在上层事先拼好。这时用集算器也都很容易处理。
取数限制
由于容量有量,我们要求报表最多取出10000行数据,如果没有取完要再补一行标记有“继续”的记录,这样可以显示出数据是否完整。但报表工具通常只能执行确定的取数语句,这种灵活控制又需要复杂代码调用API来实现。
集算器用代码控制这个过程很轻松:
数据源集
动态数据源报表工具中某个报表使用到的数据源通常是确定的,报表的参数通常只用于数据集的选出条件(即SQL的WHERE部分)而不会用来选择数据源,如果我们希望某个报表使用的数据源是由参数决定的,这对于大多数报表工具来讲都能直接做到,一般都需要采用报表工具提供的API编程才行,非常繁琐。
如果采用集算器就非常简单。可将集算器作为报表的固定数据源,然后在集算脚本中再根据参数再决定连接实际的数据源取数据返回。
A | |
1 | =${pds}.query("select * from T where F=?",pF) |
类似地,有些报表工具要求主子报表必须用同一个数据源,当需要主子报表用不同数据源时,也可以采用这个办法,把集算器作为主子报表的共同数据源,而实际数据源在集算脚本中根据参数决定。
动态数据集
报表工具中,报表参数通常会用作数据集选出条件的参数,也就是SQL的参数。但有时我们需要替换SQL的一部分而不能只用参数,比如整个WHERE部分是作为参数传入的,这样可能获得更灵活的查询条件。
某些报表工具支持宏,可以做到这一点。对于不支持宏的报表工具,就只能再使用报表工具提供的API用代码去改写报表模板的数据集定义,相当繁琐。用集算器就很简单:
A | ||
1 | ="select * from T" + if(where!=""," where "+where,"") | 拼上where,空则不拼 |
2 | =db.query(A1) |
A | ||
1 | =sums.array().("sum("+~+") as "+~).string() | 把a,b变成sum(a) as a,sum(b) as b |
2 | =db.query("select G,"+A1+" from T group by G") |
由于容量有量,我们要求报表最多取出10000行数据,如果没有取完要再补一行标记有“继续”的记录,这样可以显示出数据是否完整。但报表工具通常只能执行确定的取数语句,这种灵活控制又需要复杂代码调用API来实现。
集算器用代码控制这个过程很轻松:
A | B | ||
1 | =db.cursor("select * from T") | =A1.fetch(1000) | |
2 | if A1.fetch@0(1) | >B1.insert(0,"继续") | 未完成则插入标记 |
3 | >A1.close() | return B1 |
相关文章推荐
- iOS 开发之 ReactiveCocoa 下的 MVVM(干货分享)
- Android4.4 之后release版本如何提权
- 【人人都要学算法】网络流算法远比你想的要好玩
- js校验表单后提交表单的三种方法总结
- C++ 数据结构 *** 普通链表
- WebServices学习笔记(二)用java编写WebService的客户端代码
- android中的四种启动模式
- 基于bootstrap的编辑器summernote学习一
- 微软正式上线Win10商店企业版 用于商业的门户网站
- win7升级Win10 TH2正式版后将不能滚回?
- Android开发:Fragment不同操作的生命周期
- Codeforces Round #331 (Div. 2) 596ABC题解
- 用集算器实现文本比对
- iOS中 断点下载详解 韩俊强的博客
- iOS中 断点下载详解 韩俊强的博客
- update 多列更新
- DIY基于android的带GPS的相机遥控器
- 使用GridView 空间和ADO.NET实现数据操作
- win10隐藏输入法指示器的设置方法
- JavaScript常用表单验证&收集的35个 jQuery 小技巧