交叉统计生成器
在学习本课的内容之前,请打开示例文件"统计演示.Table"。
关于交叉统计,我们已经在《使用指南》中介绍过,参考:交叉统计
本章介绍如何通过代码设置交叉统计,实际上交叉统计的代码也可以自动生成,很少需要手工编写,但是对此有所了解是必须的,方便对自动生成的代码做一些细节调整。
快速入门
我们先看一个简单的例子,将下面的代码复制到命令窗口执行:
Dim
b As New
CrossTableBuilder("统计表1",DataTables("订单"))
b.HGroups.AddDef("客户")
'添加客户列用于水平分组
b.VGroups.AddDef("产品")
'添加产品列用于垂直分组
b.Totals.AddDef("数量")
'添加数量列用于统计
b.Build '生成统计表
Maintable = Tables("统计表1")
'打开生成的统计表
得到的统计结果:
代码很简单,几乎具备自我描述性,无非就是定义一个生成器,指定水平分组列、垂直分组列和统计列,然后生成统计表。
详解CrossTableBuilder
CrossTableBuilder是专门针对交叉统计而设计的,可以轻松生成各种复杂的交叉表,定义一个CrossTableBuilder的语法如下:
New CrossTableBuilder(TableName, SourceDataTable)
参数说明
TableName: 字符型,
指定即将生成的统计表的名称
。
SourceDataTable: DataTable型,指定要统计的数据表。
下面有些内容比较抽象,在接触具体的示例前,会比较难以理解,没有关系,先大概了解一下即可。
CrossTableBuilder包括以下属性:
Caption | 字符型,指定新生成统计表的标题。 |
HGroups | 集合,用于添加水平分组列。 |
VGroups | 集合,用于添加垂直分组列。 |
Totals | 集合,用于添加统计列。 |
OrderByTotal | 逻辑型,在有多个统计列时,是否将同一个统计列的数据排放在一起。参考:统计数据的排列方式 |
HorizontalTotal | 逻辑型,水平方向是否自动汇总。 参考:自动汇总 |
VerticalTotal | 逻辑型,垂直方向是否自动汇总。 参考:自动汇总 |
SamePeriodGrowth | 逻辑型,是否生成同比增长率。 参考:交叉统计之增长率分析 |
CircleGrowth | 逻辑型,是否生成环比增长率。 参考:交叉统计之增长率分析 |
HorizontalProportion: | 逻辑型,是否生成水平份额。 参考:交叉统计之占比分析 |
VerticalProportion | 逻辑型,是否生成垂直占比。 参考:交叉统计之占比分析 |
HorizontalProportionCaption | 字符型,用于设置水平份额标题,默认为“份额” |
VerticalProportionCaption | 字符型,用于设置垂直占比标题,默认为“占比” |
Subtotal | 逻辑型,设为True,将对交叉统计结果进行二次统计,生成汇总模式。 参考:交叉统计之汇总模式 |
SubtotalLevel | 整数型,根据多少个分组生成汇总模式。 参考:交叉统计之汇总模式 |
Decimals | 整数型,用于设置统计结果要保留的小数位数。 |
Filter | 字符型,如果只是对SourceDataTable中的部分数据进行统计,可用Filter属性设置条件。 请参考表达式的运算符和函数 和 条件表达式。 |
添加水平分组到HGroups的语法是:
HGroups.AddDef(Name)
HGroups.AddDef(Name, NewName)
HGroups.AddDef(Name, NewName, NewCaption)
HGroups.AddDef(Name, DateGroup)
HGroups.AddDef(Name, DateGroup, NewName)
HGroups.AddDef(Name, DateGroup, NewName, NewCaption)
参数说明
Name: 字符型,指定分组列。
NewName: 字符型,用于给分组列指定一个新的名称,这个名称在统计表中显示。
NewCaption: 字符型,用于给分组列设置标题。
DateGroup: DateGroupEnum型枚举,如果分组列是日期列,可用此属性指定如何根据日期进行分组,默认按月分组。
DateGroupEnum枚举的可选值:
None : 不分组
Year: 按年分组
Quarter: 按季度分组
Month: 按月分组
Week: 按周分组
Day: 按天分组,月中的某一天。
Hour: 按小时分组
Minute: 按分钟分组
Second: 按秒分组
添加垂直分组到VGroups中的语法如下:
VGroups.AddDef(Name)
VGroups.AddDef(Name, Pattern)
VGroups.AddDef(Name, DateGroup)
VGroups.AddDef(Name, DateGroup, Pattern)
参数说明
Name: 字符型,指定分组列
Pattern: 指定生成标题的模式,用字符"{0}"表示分组值;假定分组值是10,模式是"第{0}周",生成的分组标题将是"第10周"
DateGroup:DateGroupEnum枚举型,如果分组列是日期列,可用此属性指定如何根据日期进行分组,默认按月分组。
添加统计列到Totals集合中的语法是:
Totals.AddDef(Name)
Totals.AddDef(Name, Caption)
Totals.AddDef(Name, Aggregate)
Totals.AddDef(Name, Aggregate,Caption)
参数说明
Name: 字符型,指定统计列
Caption: 字符型,指定统计列的标题
Aggregate: AggregateEnum枚举型,用于指定统计类型,默认是求和。
AggregateEnum型枚举的可选值:
Average:平均值
Count: 记录数
Max: 最大值
Min: 最小值
Sum: 累积值