分页加载后台统计

筛选树和加载树,能够让我们随意选择前台数据(筛选树)或后台数据(加载树)进行统计,参考:

筛选树与数据统计

加载树与数据统计

上一节提到即使只加载部分数据,依然可以使用GroupTableBuilder或CrossTableBuilder对后台所有数据进行统计,只需将FromServer属性设置为True即可。

实际上,
使用GroupTableBuilder或CrossTableBuilder进行后台统计时,并非总是统计后台所有数据,而是受是否开启分页加载的影响,原则是:

1、如果开启了分页加载,那么默认统计的是后台符合加载条件的所有数据,如果再设置一个统计条件,那么统计的数据必须符合:加载条件 And 统计条件

2、如果未开启分页加载,那么加载条件不影响统计结果,默认会统计后台所有数据,如果设置了统计条件,那么统计的是后台所有符合统计条件的数据。

验证

下图的加载树,按年月分页加载,每页10行,我们在加载树中选择了6个节点,分别为2018年的7、8、9月和2019年的7、8、9月:

在命令窗口执行:

Dim g As New CrossTableBuilder("统计表1", DataTables("订单"))
g
.HGroups.AddDef("产品")
g
.VGroups.AddDef("日期", DateGroupEnum.Year, "{0}年")
g
.VGroups.AddDef("日期", "{0}月")
g
.Totals.AddDef("数量", "数量")
g
.FromServer = True  '设置为True,统计后台数据
g
.Build()
MainTable
= Tables("统计表1")

得到的统计结果为:

可以看到:

1、 尽管CrossTableBuilder没有设置统计条件,但并没有统计全部数据,而只统计了加载树选定的6个月份的数据。

2、 尽管加载树只加载了一页数据(10行),但CrossTableBuilder依然对这6个月全部数据进行了统计。

现在我们加上统计条件:

Dim g As New CrossTableBuilder("统计表1", DataTables("订单"))
g
.HGroups.AddDef("产品")
g
.VGroups.AddDef("日期", DateGroupEnum.Year, "{0}年")
g
.VGroups.AddDef("日期", "{0}月")
g
.Totals.AddDef("数量", "数量")
g
.FromServer = True
g
.Filter = "日期 >= #8/1/2018#"  '设置了统计条件

g
.Build()
MainTable
= Tables("统计表1")

得到的统计结果为:

可以看到统计的是选定的6个月中符合条件的行,而不是后台所有符合条件的行。

如果你要统计所有数据,或者说所有符合条件的行:

1、可以在加载树中选择第一个节点"加载所有行"。

2、或者临时清除LoadFilter或者LoadTop属性,统计完成之后再恢复,例如:

Dim g As New CrossTableBuilder("统计表1", DataTables("订单"))
Dim
Filter As String  = DataTables("订单").LoadFilter '临时保存加载条件
DataTables
("订单").LoadFilter = ""  '清除加载条件
g
.HGroups.AddDef("产品")
g
.VGroups.AddDef("日期", DateGroupEnum.Year, "{0}年")
g
.VGroups.AddDef("日期", "{0}月")
g
.Totals.AddDef("数量", "数量")
g
.FromServer = True
'g.Filter = "日期 > #8/1/2018#" '根据需要设置统计条件

g
.Build()
DataTables
("订单").LoadFilter = Filter '恢复加载条件
MainTable
= Tables("统计表1")

或者:

Dim g As New CrossTableBuilder("统计表1", DataTables("订单"))
Dim
Top As String  = DataTables("订单").LoadTop
DataTables
("订单").LoadTop = ""
g
.HGroups.AddDef("产品")
g
.VGroups.AddDef("日期", DateGroupEnum.Year, "{0}")
g
.VGroups.AddDef("日期", "{0}")
g
.Totals.AddDef("数量", "数量")
g
.FromServer = True
g
.Build()
DataTables
("订单").LoadTop = Top
MainTable
= Tables("统计表1")

 


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