经常有人问起,在Group DataWindow里如何得到分组的序号,通常的答案是:
getrow() - first(getrow() for group 1) + 1
但这个其实是得到每个分组里的记录的序号,即对每一个分组的记录都重新从1开始排序,这个Compute field是放在Detail Band里的。而很多人想要的是这个:所有分组的序号。那就要用到下面这个高级用法,这是放在Group header Band里的,假设按bm分组。
cumulativeSum( if( bm = bm [-1],0,1) for all )
如果该分组是一个计算列或有多个字段组成,那么在上方的if条件的括号中要加and,如:
cumulativeSum( if( bm= bm[-1] and ywy = ywy[-1],0,1) for all )
如果是放在组summary区的计算field,又要在组汇总时显示计算组序号,又要在显示detail带明细数据时显示“小计:”字样,那么先要设置好计算列公式,再通过动态改变成显示的文本,如果需要可以通过动态再改变回显示序号。如果一开始设置计算列为:“小计:”文字,那么在程序处理时动态赋值组序号公式,则该计算列将显示空白,组计算公式无法正确显示。
dw_1.object.compute_group.Expression = "cumulativeSum( if( bm= bm[-1] and ywy = ywy[-1],0,1) for all )"
dw_1.object.compute_group.Expression = "'小计:'"
dw_1.object.compute_group.Expression = "cumulativeSum( if( bm= bm[-1] and ywy = ywy[-1] and zydl = zydl[-1] and dlwtf = dlwtf[-1],0,1) for all )"
下方是以往的老文章
怎样对分组里的行加上序号,要求每个组里行的序号从1开始!
---------------------------------------------------------------
用计算域,放在明细区:
getrow() - first(getrow() for group 1) + 1
---------------------------------------------------------------
first(getrow() for group 1)
可以取得每一组的第一行的行号
---------------------------------------------------------------
//做分组组号
cumulativeSum( if( 分组列名 [-1] = 分组列名 [0],0,1) for all )
//做组内编号
GetRow() - First(GetRow() for Group 1) + 1
---------------------------------------------------------------
★★★★★★★★★★★★★★★★★★★★★
★★★★ PB中怎样按分组取行号? ★★★★
★★★★★★★★★★★★★★★★★★★★★
有三个函数可以灵活使用:
CumulativePercent:取得包括当前行之前值占总数的百分点
CumulativeSum:取得包括当前行之间的行的值的总数
Percent:取得当前行值占总数的百分点
用法(三个都相同):
CumulativeSum ( column { FOR range }
下面的表达式可取得分组1的每一行的行号:
CumulativeSum (1 FOR GROUP 1)
range的值可以这样写:
ALL — (缺省) 取某列的当前行之前所有行的累积值
GROUP n — 取某列的当前行之前,在分组中所有行的累积值。必须指定一个分组号。例如 GROUP 1
PAGE — 取某列的当前行之前,且在本页内所有行的累积值
对于交叉表,可以这样指定 CROSSTAB 的范围:
CROSSTAB — (只用于交叉表) 在交叉表中,取某列的当前行之前所有行的累积值
对于图表和 OLE 对象, 可以使用下列方式之一:
GRAPH — (只用于图表) The cumulative percentage of values in column in the range specified for the Rows option
OBJECT — (只用于 OLE 对象) The cumulative percentage of values in column in the range specified for the Rows option
建立一个计算字段:
count( group_field for all distinct)