BIRT实现组内跨行计算

问题来源:http://developer.actuate.com/community/forum/index.php?/topic/36160-dealing-with-previous-rows-groups-sorts-and-subtotals/

组内跨行计算一般要用SQL窗体函数或报表脚本去实现。但代码比較复杂。这样的情况下能够用集算器来辅助报表工具。以下用样例来说明。

库表sample有三个字段,当中id是分组字段。须要设计一张分组表,id是分组字段,明细字段是v1,v2以及计算列crossline, crossline的算法是v1+v2+本组内上一条记录中的v1+本组内上一条记录中的v2。源数据例如以下:

用集算器进行数据整理:

A1:查询数据库。多产生一列常数备用。

A2:按id分组。并在每组数据中改动计算列crossline,最后合并。计算结果例如以下:

A3:将计算结果返回给报表工具。集算器对外提供JDBC接口。报表工具会将集算器识别为普通数据库。

时间: 2024-10-05 07:08:15

BIRT实现组内跨行计算的相关文章

集算器简化SQL式计算之组内运算

在开发数据库应用时,经常会遇到分组后针对组内数据的运算问题,如:列出近3年每年都发表过论文的学生名单,统计全部参加了历次培训的员工,选出每位客户的高尔夫成绩最高的三天等等.SQL完成这类运算较为复杂,一般需要嵌套多层,导致代码难以理解和维护.而集算器擅长表达这类组内计算,且很容易和JAVA或报表工具集成.下面用一个例子来说明. 根据数据库表SaleData统计出2013年中,每个月销售金额均排在前20名的客户名称.SalesData的部分数据如下: 想解决这个问题,需要选出2013年的销售数据,

ROWNUMBER() OVER( PARTITION BY COL1 ORDER BY COL2)用法,先分组,然后在组内排名,分组计算等

ROWNUMBER() OVER( PARTITION BY COL1 ORDER BY COL2)用法 今天在使用多字段去重时,由于某些字段有多种可能性,只需根据部分字段进行去重,在网上看到了rownumber() over(partition by col1 order by col2)去重的方法,很不错,在此记录分享下: row_number() OVER ( PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算

sql 分组后 组内排名

语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN) 简单的说row_number()从1开始,为每一条分组记录返回一个数字,这里的ROW_NUMBER() OVER (ORDER BY xlh DESC) 是先把xlh列降序,再为降序以后的没条xlh记录返回一个序号. 示例: xlh           row_num 1700              1 1500              2 1085             

玩转报表排名之组内排名

"一眨眼又到年中了,各种业绩考核结果即将出炉.这不头儿明天要对于各个地区的订单情况做个排名分析,吩咐我下班前吧材料准备好,可是离下班就剩下五分钟了!好巧不巧仰慕已久的女神又突然约饭!怎么办?怎么办?!" 嗯 ~ 是时候展现真正的技术了. [技术装备]:润乾报表 [核心技术]:坐标定位单元格 我们都知道排名分析是常见的分析方法,主要是通过排名让使用者了解当前业务维度下数据记录的次序,多用于业绩考核和对比分析.排名分析中除了之前讲到的总(组间)排名,还涉及到组内排名,这就是今天要放的大招.

今天和组内一起写代码时碰到了一个关于命名冲突的问题,最后用js命名空间的方法解决的。

//第一步,首先创建一个全局变量,可以放在自己的js方法库中方便以后用,这个就是用来注册命名空间的方法. ns = function(namespace){ var arr = namespace.split('.');  //将传入的字符串如"com.test.lzn"以'.'隔开做成一个数组 var strNamespace = ""; //这个是为了保存每一步循环进去的包名 for(var i=0;i<arr.length;i++) { if(i!=0)

如何在MySQL中实现组内前几名的输出

关于问题 如何查询组内最大的,最小的,大家或许都知道,无非是min.max的函数使用.可是如何在MySQL中查找组内最好的前两个,或者前三个? 什么是相关子查询 在提出对于这个问题的对应方法之前,首先来理解一个概念:相关子查询. 所谓相关子查询,就是其查询的执行依赖于外部查询.多数情况下是子查询的where子句中引用了外部查询的表.执行过程: 从外层查询中取出一个元组,将元组相关列的值传给内层查询 执行内层查询,得到子查询操作的值 外查询根据子查询返回的结果或结果集得到满足条件的行 然后外层查询

模拟QQ分组(具有伸缩功能) SimpleExpandableListAdapter 适配器的用法,并且可添加组及其组内数据。

1 package com.lixu.qqfenzu; 2 3 import java.util.ArrayList; 4 import java.util.HashMap; 5 import java.util.List; 6 import java.util.Map; 7 8 import android.app.Activity; 9 import android.content.Context; 10 import android.graphics.Color; 11 import an

nagios(或icinga)将多个主机放到一个组内步骤

nagios将多个主机放到一个组内步骤: # vi ming.cfg define host{       use           linux-server       host_name     ming        alias         ming       address       192.168.1.14       action_url    /pnp4nagios/index.php/graph?host=$HOSTNAME$       } define host{ 

自动将登录域用户添加PowerUsers群组内

1.考虑到XP系统电脑,所以下内容使用BAT脚本,没使用PowerShell 2.需要使用工具lsrunas.exe 在开机脚本中添加: rem 将lsrunas复制到客户机C盘system目录 xcopy "\share\lsrunas\lsrunas.exe" "C:\window 同时,在登录脚本中添加: rem 将用户添加到Power Users组内脚本 echo @echo off >D:\AddPowerUsers.bat echo net localgro