混合多种统计

之前每一种分组都只进行了一种统计,就是累计值。

汇总模式提供了很多统计方式,通过
SubtotalGroup的Aggregate属性,可以指定统计类型,此属性是AggregateEnum型枚举,包括以下可选值:

Average:平均值
Count:记录数
Max:最大值
Min:最小值
Percent:百分比
Std:标准偏差
StdPop:总体标准偏差
Sum:累积值
Var:方差
VarPop:总体方差

我们前面的代码都没有指定Aggregate属性,这是因为Aggregate属性的默认值是AggregateEnum.Sum,也就是求和,而我们日常统计多数也是求和。

汇总模式有一个很重要的特性,就是同一个分组,可以进行多种不同类型的统计。

打开本章示例文件“统计演示.Table”,选择“学生成绩”表,我们希望同时统计出最大分、最低分和平均分,代码为:

Dim t As Table = Tables("学生成绩")
Dim
g As Subtotalgroup
t
.SubtotalGroups.Clear()

'按班统计各科的最低分|最高分|平均分

g
= New Subtotalgroup
g
.Aggregate = AggregateEnum.Min
g
.GroupOn = "班级"
g
.TotalOn = "数学,英语,物理,化学,总分"
g
.Caption = "{0} 最低分"
t
.SubtotalGroups.Add(g)

g = New Subtotalgroup
g
.Aggregate = AggregateEnum.Max
g
.GroupOn = "班级"
g
.TotalOn = "数学,英语,物理,化学,总分"
g
.Caption = "{0} 最高分"
t
.SubtotalGroups.Add(g)
 

g
= New Subtotalgroup
g
.Aggregate = AggregateEnum.Average
g
.GroupOn = "班级"
g
.TotalOn = "数学,英语,物理,化学,总分"
g
.Caption = "{0} 平均分"
t
.SubtotalGroups.Add(g)
 

'
统计全校各科的最低分|最高分|平均分
g
= New Subtotalgroup
g
.Aggregate = AggregateEnum.Min
g
.GroupOn = "*"
g
.TotalOn = "数学,英语,物理,化学,总分"
g
.Caption = "最低分"
t
.SubtotalGroups.Add(g)
 

g
= New Subtotalgroup
g
.Aggregate = AggregateEnum.Max
g
.GroupOn = "*"
g
.TotalOn = "数学,英语,物理,化学,总分"
g
.Caption = "最高分"
t
.SubtotalGroups.Add(g)
 

g
= New Subtotalgroup
g
.Aggregate = AggregateEnum.Average
g
.GroupOn = "*"
g
.TotalOn = "数学,英语,物理,化学,总分"
g
.Caption = "平均分"
t
.SubtotalGroups.Add(g)

t
.Subtotal()

上面的代码中,班级分组和总计分组,都进行了最高分、最低分和平均分三种统计。

代码看起来很长,实际上每一段都基本相同,复制粘贴后修改统计类型、分组列和标题即可,为方便大家阅读理解,我特意在每段之间加上了空行。

上述代码得到的汇总模式如下:


本页地址:http://www.foxtable.com/webhelp/topics/3292.htm