函数原型:Table.Group(table as table, key as any, aggregatedColumns as list, optional groupKind as nullable number, optional comparer as nullable function) as table
案例数据原表
一、可选参数分组类型groupKind对分组的影响
表示分组是局部分组还是全局分组
当groupKind=0时,不相连的”语文“分两组
当groupKind=1时,不相连的”语文“分到一组上。
二、第五个参数 optional comparer是一个可选函数类型参数,有2个参数通常用(x,y)=>Number.From()固定格式来处理所判断后的条件值。x表示分组的第一个记录,y表示剩余未分组的记录(不包括x记录)。现在讨论第五参数值,如果第五个参数为非零分组结束,如果为0那么归入分组。为了方便我们先将第四个参数设置为0,后面再讨论第四个参数为1时对第五个参数的影响。
我们先让第五个参数返回值恒为1既(x,y)=> 1,就起不到分组的作用了,当给定x值时,(x,y)=> 1都为1,就建立分组结束新建分组,既每条记录开始分组就结束了(每条记录一个分组)。
再让第五个参数返回值恒为0既(x,y)=> 0,也起不到分组的作用了,当给定x值时,(x,y)=> 0都为0,就归入分组,既所有记录都归入分组。
三、groupKind参数对第五个参数的影响
前面已经举过groupKind=0时的例子,如果groupKind=1分组会受到影响,如果groupKind=1,(x,y)=> 1,那么按分组每个记录一个分组,但是指定全局分组,那么在新分组的表中会出现一样的分组导致错误。数学只有1条记录,不会出现错误。
如果groupKind=1,(x,y)=> 0,所有记录分配到一个组中,没有相同的分组记录,也不会出现错误。
四、x,y的关系
为了避免出现错误,将groupKind=0,对x,y关系进行讨论。
先单独看看x,x表示新建分组的第一条记录,开始分组第一条记录x="语文",(x,y)=>Number.From(x="语文")返回值为1,结束分组;同理第二条语文也分为一组;第三条x=数学,对于这条x=”语文“返回值为0,后面所有的记录都归入数学这一组中,包括最后一条语文。
y与x的关系
x是新建组的第一条,y是除x外剩余的记录,当第一条x=语文,判断第二条语文是否加入第一条的分组时,(x,y)=> Number.From(y="语文")函数返回1,结束分组,新建第二个语文分组。当第二个语文分组建立起来后,y=“数学”“英语”根据(x,y)=> Number.From(y="语文")函数返回0归入第二分组中;如果y包含x,那么第二条语文时,(x,y)=> Number.From(y="语文")返回的值为1,就应该结束分组,所以y不包含x;当碰到第三个语文(x,y)=> Number.From(y="语文")函数返回1结束分组,新建第三个分组语文。从该案例也可以证明y是除x以外的剩余记录。
将groupKind=1时,结果出现重复的语文分组错误。
再举一个y不包含x的例子,compare函数Number.From(x = "语文" and y="语文"),判断第一条语文记录时,返回1,x是第一条语文记录,y是第二条语文记录,结束分组;判断第二条语文时,如果y包含x那么compare函数返回1,应该结束分组,然而并没有结束分组;如果y不包含x,x=”语文",y="数学",返回0,加入分组。