比值报表- 动态格间运算-报表设计高级教程
目录

比值报表

一、报表实例

我们看看下面这个报表例子:

 

在这个报表中,按照销售额从大到小排列。和第一名的差距这个指标的运算逻辑是:第一名的销售额 - 当前销售的销售额。这些在快逸报表中该如何实现呢?

二、设计过程

1、引用数据集demo_雇员订单表

2、编辑报表
     
    (1)A2单元格的表达式为:=&B2,设置A2的左主格为B2

(2)B2单元格的表达式为:=demo_雇员订单表.Group(销售人员,false,,,demo_雇员订单表.sum(数量*单价),true)

(3)C2单元格的表达式为:=demo_雇员订单表.sum(数量*单价),显示格式:¥#,##0.00,缩进:3

这个报表中,通过B2单元格表达式中group()函数的排序功能,实现按照销售额从大到小排列。对于A2单元格的名次表达式,要知道某个扩展出来的格子在所有扩展出来的格子中排第几,就用到了&运算符,它可以获得当前单元格所属的某主格在所有扩展出来的格子中排第几。

和第一名的差距这个指标的运算逻辑是:第一名的销售额 - 当前销售的销售额。 从图中可以看出,D2格的表达式最关键的在于如何表达出“第一名的销售额”,该报表是按照销售额从大到小排列的,因此第一名的销售额肯定是第一个C2格。如何在报表扩展前在表达式中描述出扩展后的第N个C2格呢? 这里用到了快逸报表非线性模型中的层次坐标,我们把D2单元格的表达式写成:=C2[1]-C2。

     
3、保存预览

此报表保存为“比值报表”,预览结果如下:


 三、小结 

1. &运算符

单元格是可以扩展的,一个单元格可以扩展出多个格子,那么如何知道某个扩展出来的格子在所有扩展出来的格子中排第几呢?这时我们就引入了&运算符,它可以获得当前格所属的某主格在所有扩展出来的格子中的排序,这种运算我们也称为层次坐标的逆运算。

语法: &Cellx

返回值: 整数,当前格所属的Cellx主格在所有扩展出来的格子中的排序

说明: Cellx必须是当前格的主格,这样&Cellx才能够正确运算,其返回值相当于是当前格所属的Cellx主格的位置。

示例:

例1:A1=to(1,3)  B1=to(4,6)  C1=A1*B1,扩展后C1的第2行值为5,对此格,&A1返回1,&B1返回2;扩展后C1的第6行值为12,对此格,&A1返回2,&B1返回3。

 

例2: A2的左主格为B2,B2是扩展格,在A2单元格中写入=&B2,则返回值随B2的扩展依次改变。

2. 层次坐标

在进行报表设计时,单元格尚未扩展,但是其它单元格的表达式可能需要此单元格扩展后的位置。这时,就要对扩展后的每个单元格进行唯一性定义,这就是单元格的层次坐标。层次坐标是用于唯一描述(精确定位)扩展后的每一个单元格的表达式。

例如:

 

对于该主格,C2[A1:3,B1:2]表示对应的附属格,即图中黄色单元格。

语法:

说明:

例1:

C1[A1:1,B1:2]的返回值为5;

C1[A1:2,B1:3]的返回值为12;

C1[A1:3,B1:4]的返回值为21。

例2:

C3[A3:1,B3:2;C1:2,C2:3]的返回值为216;

C3[A3:3,B3:3;C1:1,C2:2]的返回值为255;

C3[A3:2,B3:1;C1:3,C2:2]的返回值为228;

C3[A3:3,B3:1;C1:3,C2:3]的返回值为248。

在上述的层次坐标的表示法中,如果目标单元格Cellx本身是扩展单元格,那么要唯一描述(精确定位)其扩展后的单元格的位置,可以写为Cellx[Lk:lk,Lk-1:lk-1...L1:l1,Cellx:n],其中n为Cellx扩展后的次序。与之类似,如果Cellx只有上主格,可以写为Cellx[;Tk:tk,Tk-1:tk-1...T1:t1,Cellx:n]。

例如:上面例1的图中,B1[A1:2,B1:2]的返回值为5,B1[A1:3,B1:4]的返回值为7。

层次坐标[Coordinate]的运算结果指向目标单元格的位置。如果层次坐标能够定位到一个单元格,那么Cellx[Coordinate]返回该单元格的值;如果定位到多个单元格,那么Cellx[Coordinate]返回这些单元格中第一个单元格的值。

例如:


C3[A3:1,B3:2;C1:2]的返回值为212;

C3[A3:3;C1:1,C2:2]的返回值为229;

C3[A3:2;C1:3,C2:3]的返回值为231。

3. 省略主格的层次坐标

层次坐标的表示比较烦琐,而且大部分时候,对于单元格的定位是和当前格的位置有关系的,比如当前格的主格或者和当前格有着相同主格的单元格,这时可以采用省略主格的写法。
    如果目标单元格Cellx本身是扩展单元格,那么Cellx[n]表示其纵向扩展后的第n个单元格,Cellx[;n]表示其横向扩展后的第n个单元格。
例如:在本节的报表实例中,C2[1]表示C2单元格扩展出来的第一个单元格的值。