首页| 水晶报表 | 润乾报表 | 快逸报表 | Birt报表 | 其他产品 | 报表教程 | 产品评述 | 技术文章 | 其他资料
>> 首页 -> 报表教程 ->一个排名的例子
一个排名的例子

 在练习6.2-2里我们完成了一张学生3科成绩的交叉报表。现在我们对各科成绩进行排名。

 步骤1: 先复习一下10.1节学到的内容。

  我们前面已经讲过有多个过滤条件时的表达式用法了,这里也是这样。统计成绩在80—90之间时,不仅B3〉=80还要B3<90

  通常我们不仅是要做这样的统计,而且要列出每个人成绩的排名。

  在传统的报表工具中,这是一项很困难的事情,需要预先编程序进行计算,而润乾报表引进了层次座标的概念,可以很好地处理许多非常复杂的跨行、组的计算。

  层次座标的概念是比较复杂的,我们还是通过实例,一点一点地理解。

  仍然看这个排名的问题,很显然,显示每个人的排名,就是数一下所有的成绩中,比自己高的成绩有多少(然后还要+1),如排名2的话,比他成绩高的有1个,1+1=2。也就是说,排名表达式应该是:

  =count(…)+1 这种样子。

  当然,主要问题是count函数()里面应该怎么写,我们有几个问题:

 问题1: 成绩都是在b3这个格里,而c3是与b3一样,都是从a3主格扩展出来的,这就与在下面的格子如b5、b6里面写表达式不一样了,为什么呢?我们先做下面的尝试:

  在c3里输入与b5同样的表达式,对成绩〉=90的人数统计:

  预览:

  可以发现只对每个人的成绩作了〉=90的计数,而不是所有的人。

  同理,再在c3里输入与b6同样的表达式,对成绩<90且〉=80的人数统计,预览如下:

  只对每个人的成绩作了<90且〉=80的计数,而不是所有的人。

    就是成绩都是在b3这个格里,而c3是与b3一样,都是由a3主格扩展出来的,即a3扩展出一个b3时,同时也扩展出一个c3,c3单元格里表达式中的b3就受到了限制,c3只对与其同行的一个b3单元格作统计,而不是所有的b3。

 问题2: 如何在这里表示“所有的b3”呢?

    写法是:b3[`0],它可以表示所有的b3格。

    这里的规则是:Cell[Lk],表示由Lk扩展出来的所有的Cell这个格子。

    是不是很难理解,没关系,看一个例子就明白了:

    C3[B3],假如B3是一个主格,这个公式就表示由B3扩展出来的所有C3格。

 问题3: 为什么要有这样的公式呢?因为C3可能会被扩展出很多,不一定只是由B3扩展出来的,可能还有由A3扩展出来的,我们看一下这个例子10.2c.raq:

  这个例子中:A、B、C三列中的内容,都是我们前面学过的,如果你忘了,也正好可以复习一下。A3、B3单元格都是可扩展单元格,其表达式中含有集合函数group、select。

  现在预览一下:

  D3:=count(C3[B3]{}) 它表示对B3扩展出来的所有C3计数;B3与其扩展出的C3是一一对应的关系,因为按科目分组后,姓名和成绩是一一对应的,所以计数是1。

  E3:=count(C3[A3]{}) 它表示对A3扩展出来的所有C3计数;A3与其扩展出的B3是一对四的关系,即每科都有4个同学考试,所以与C3也是一对四的关系,计数是4。

  F3:=count(C3[`0]{}) 它表示对全部的C3计数,实际`0就是表示根格,这是一个固定的用法,记住就可以。

  上面的坐标层次分了3层,从主格是B3的较小范围的坐标层次,到主格是A3的稍大范围的坐标层次,再到主格是根格的最大范围的坐标层次。

  我们通常用的不带花括号的单元格表示法,其实指的是当前层次坐标下的。如我们将上例中d3表达式的方括号去掉,如下图所示:

  预览会发现没有什么变化,因为D3是对由B3扩展出的所有C3计数,D3的左主格是B3,所以当前的坐标层次的主格是B3,所以就不需要对层次坐标作定义了。

  看明白了这个例子,就明白上面说的b3[`0]。不过,那个公式应该是有条件的,应该是

    =count(b3[`0]{b3>?})+1这种样子。

  问题4: =count(b3[`0]{b3>?})+1表达式中的?应该是每人自己的成绩,该怎么表示呢?

  因为在{}里面,再用b3,就已经是在前面的b3[`0]前提下了,{b3>?}中的b3就是所有的b3,怎么区别所有的b3和当前的b3呢?也即怎么区分所有的成绩和自己的成绩呢?在润乾报表里用$b3来表示“我自己的b3”,即回到主格是B3的较小范围的坐标层次。整个公式是:=count(b3[`0]{b3>$b3})+1。在这里,$就是去掉前面的层次坐标(比如[`0])的作用,相当于直接使用b3。

  步骤2: 在c3中输入:=count(b3[`0]{b3>$b3})+1预览如下:

  可以这样理解,在使用$时,都是在某些其他主格的作用域内,这时使用$,不考虑前面的作用域,而按照当前格的作用域来选取。

  或者说:$Cellx,就是不管它前面的格集、范围等等之类的,就相当于什么其他都没有时,在当前格里直接使用Cellx获得的值。

  这里的主格,指的都是左主格,如果是上主格,参见10.3。                 ( 下载

  练习10.21 完成下面的成绩表。                             ( 下载

  提示: 排名是对各科成绩的排名,所以所有的成绩指各科所有的成绩,假设成绩所在单元格为C5,科目所在单元格为A4,各科所有的成绩C5[A4]。排名表达式: =count(C5[A4]{C5>$c5})+1

下一节: 上主格的用法

 

 相关内容:
 
 
 
 

Copy Right 2005, 版权所有 Report99.com