一、报表定义
所谓的占比运算,就是拿每一行的数值除以所有行的合计值,因此,我们要先把合计值算出来。
二、设计过程
1、定义数据集demo_订单信息表
demo_订单信息表:select DEMO_ORDERS.订购日期,DEMO_ORDERS.货主地区,DEMO_ORDERS.货主城市,DEMO_ORDERS.货主名称,DEMO_ORDERDETAILS.单价,DEMO_ORDERDETAILS.数量 from DEMO_ORDERS,DEMO_ORDERDETAILS where DEMO_ORDERS.订单ID=DEMO_ORDERDETAILS.订单ID and DEMO_ORDERS.订购日期 is not null
2、编辑报表
(1)A2单元格表达式:=demo_订单信息表.Group(货主地区,false)
(2)B2单元格表达式:=demo_订单信息表.count()
(3)D2单元格表达式:=demo_订单信息表.sum(数量*单价),显示格式:¥#,##0.00,缩进:5
(4)B3单元格表达式:=sum(B2{})
(5)D3单元格表达式:=sum(D2{}),显示格式:¥#,##0.00,缩进:5,算出合计值
可以看到合计值出来了:
此时我们再加上占比的表达式:
(6)C2单元格表达式:=B2/B3,显示格式:#0.00%,缩进:5
(7)E2单元格表达式:=D2/D3,显示格式:#0.00%,缩进:5
3、保存预览
此报表保存为“占比报表”,预览。
三、小结
这是一个比较简单的行间运算例子,该例子要求报表引擎在解析报表时,能够先解析表达式,判断出B2格和D2格的占比表达式用到了B3格和D3格,从而先计算B3格和D3格,然后再计算C2格和E2格。
对于很多引用第三方表达式解析器(如BeanShell)的报表工具来说,就无法智能的判断运算优先级了。因此,对于那类报表工具来说,看起来很简单的占比报表,实现起来却很麻烦。