分组统计生成器

在学习本课的内容之前,请打开示例文件"统计演示.Table"。

关于分组统计我,们已经在《使用指南》中介绍过,参考:分组统计

本章介绍如何通过代码设置分组统计,实际上分组统计的代码也可以自动生成,很少需要手工编写,但是对此有所了解是必须的,方便对自动生成的代码做一些细节调整。

快速入门

我们首先看一个简单的例子,在命令窗口输入如下代码: 

'定义一个GroupTableBuilder,名称为"统计表1",对订单表进行统计。
Dim
b As New GroupTableBuilder("统计表1",DataTables("订单"))
b
.Groups.AddDef("产品") '根据产品分组
b
.Totals.AddDef("数量") '对数量进行统计
b
.Build '生成统计表
Maintable
= Tables("统计表1") '打开生成的统计表

执行上述代码,可以得到不同产品的销售数量:

再例如要统计CS01客户订购各种产品的数量:

'定义一个GroupTableBuilder,名称为"统计表1",对订单表进行统计。
Dim
b As New GroupTableBuilder("统计表1",DataTables("订单"))
b.Filter = "[客户] = 'CS01'" '仅统计客户为CS01的记录
b
.Groups.AddDef("产品") '根据产品分组
b
.Totals.AddDef("数量") '对数量进行统计
b
.Build '生成统计表
MainTable
= Tables("统计表1") '打开生成的统计表

代码很简单,几乎具备自我描述性,无非就是定义一个生成器,指定分组列和统计列,然后生成统计表。
GroupTableBuilder是专门针对分组统计而设计的,定义一个GroupTableBuilder的语法如下: 

New GroupTableBuilder(TableName, SourceDataTable)

参数说明:

详解GroupTableBuilder

下面有些内容比较抽象,在接触具体的示例前,会比较难以理解,没有关系,先大概了解一下即可。 

GroupTableBuilder包括以下属性:

Caption:           字符型,指定新生成统计表的标题。
Groups:            集合,用于添加分组列
Totals:            集合,用于添加统计列。
VerticalTotal:     逻辑型,设为True,垂直方向自动增加汇总行。参考:垂直汇总
GrandProportion:   逻辑型,是否生成总占比。 参考:分组统计之占比分析
GroupProportion:   逻辑型,是否生成分组占比。参考:分组统计之占比分析
SamePeriodGrowth:  逻辑型,是否生成同比增长率。参考: 分组统计之增长率分析
CircleGrowth:      逻辑型,是否生成环比增长率。参考: 分组统计之增长率分析
Subtotal:          逻辑型,设为True,将对分组统计结果进行二次统计,生成汇总模式。 参考:自动生成汇总模式
SubtotalLevel:     整数型,根据多少个分组生成汇总模式。 参考:自动生成汇总模式
Decimals:          整数型,用于设置统计结果要保留的小数位数,默认为4位。
Filter:            字符型,如果只是对SourceDataTable中的部分数据进行统计,可用Filter属性设置条件。
请参考表达式的运算符和函数条件表达式

在Groups集合中添加一个分组列的语法是: 

Groups.AddDef(Name)
Groups.AddDef(Name, NewName)
Groups.AddDef(Name, NewName, NewCaption)
Groups.AddDef(Name, DateGroup)
Groups.AddDef(Name, DateGroup, NewName)
Groups.AddDef(Name, DateGroup, NewName, NewCaption)

参数说明

Name:        字符型,指定分组列。
NewName:     字符型,用于给分组列指定一个新的名称,这个名称在统计表中显示。
NewCaption:  字符型,用于给分组列设置标题。
DateGroup:  DateGroupEnum型枚举,如果分组列是日期列,可用此属性指定如何根据日期进行分组,默认按月分组。

DateGroupEnum枚举的可选值:

None :     不分组
Year:      按年分组
Quarter:   按季度分组
Month:     按月分组
Week:      按周分组
Day:       按天分组,月中的某一天。
Hour:      按小时分组
Minute:    按分钟分组
Second:    按秒分组

在Totals集合中添加一个统计列的语法如下: 

Totals.AddDef(Name)
Totals.AddDef(Name, NewName)
Totals.AddDef(Name, NewName, NewCaption)
Totals.AddDef(Name, Aggregate)
Totals.AddDef(Name, Aggregate, NewName)
Totals.AddDef(Name, Aggregate, NewName, NewCaption)

参数说明 

Name:        字符型,指定统计列。
NewName:     字符型,用于给统计列指定一个新的名称,这个名称在统计表中显示。
NewCaption:  字符型,用于给统计列设置标题。
Aggregate:  AggregateEnum枚举型,用于指定统计类型,默认是求和。

AggregateEnum型枚举的可选值:

Average:平均值
Count:  记录数
Max:    最大值
Min:    最小值
Sum:    累积值


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