目录

占比报表

一、报表实例

先看下面的报表:


预览如下:

 

这是一张比较典型的浮动行(行数不定,动态扩展)的报表,如果要计算占比该怎么办?

所谓的占比运算,就是拿每一行的数值除以所有行的合计值,因此,我们要先把合计值算出来。

二、设计过程

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)的报表工具来说,就无法智能的判断运算优先级了。因此,对于那类报表工具来说,看起来很简单的占比报表,实现起来却很麻烦。