« DataReport中的超级表达式 »
Tools » http://www.anysql.net/tools/webchart-super-expression.html 2010-01-08将部份报表从Oracle迁到MySQL中时, 发现要在MySQL中实现Oracle的分析函数功能, 解决诸如”每个员工在各自部门中按工资降序排列的名次”等问题, 在Oracle中我们以用”rank() over (partition by deptno order by sal desc)”这样的语句来实现, 可这个在MySQL中怎么实现? SQL实在难写.
这样的需求还是有一定的通用性的, 不如放到客户端来计算, 在DataReport中实现它吧! 下面这个报表的后台数据库是在MySQL上的, 先猜猜是如何完成的.
empno ename job sal deptno Pecent Rank 7782 CLARK MANAGER 2450.0 10 28 2 7839 KING PRESSIDEN 5000.0 57.1429 1 7934 MILLER CLERK 1300.0 14.8571 3 7369 SSMITH CLERK 800.0 20 7.3563 5 7566 JONESS MANAGER 2975.0 27.3563 3 7788 SSCOTT ANALYSST 3000.0 27.5862 1 7876 ADAMSS CLERK 1100.0 10.1149 4 7902 FORD ANALYSST 3000.0 27.5862 2 7499 ALLEN SSALESSMA 1600.0 30 17.0213 2 7521 WARD SSALESSMA 1250.0 13.2979 5 7654 MARTIN SSALESSMA 1250.0 13.2979 4 7698 BLAKE MANAGER 2850.0 30.3191 1 7844 TURNER SSALESSMA 1500.0 15.9574 3 7900 JAMESS CLERK 950.0 10.1064 6
所用的SQL只是非常简单的SELECT语句.
select
empno, ename, job, sal, deptno
from emp_his order by deptno
在报表定义文件中, 定义了两个虚拟列, 指定表达式, 就完成这个工作了.
webchart.express_1=Pecent|100*x/y|sal,sum::sal|deptno
Rank|x|rnk::sal|deptno
webchart.merge_1=deptno
这样在不同的数据库之间迁移起来就简单多了, DataReport中已经实现了”min, max, sum, avg, cnt, row, rnk”这七个计算公式. 虽然功能很好, 但实现的逻辑并没有优化, 处理大量数据估计不行, 但一个页面上的少量数据, 应当没有什么问题.
Tags: Java, Tomcat, Tools, WebChart


今天实现了移动平均(mov,相邻三个点的平均值)计算功能。
今天增加了pre, nxt, cum三个计算功能,其实mov不用去实现的,有了pre, nxt后mov就已经实现了。