直接统计后台数据


如果数据量非常大,例如上百万甚至千万级别的记录,那么全部加载到内存是不可能的,所以Foxtable提供了动态加载数据的功能,使得在程序的运行过程中,也能随时根据需要加载符合条件的数据,这让Foxtable管理超大型数据库成为可能。

但是这有一个问题,动态加载部分数据是没问题的,但是很多时候,我们的统计是针对所有数据的,而Foxtable的分组统计和交叉统计默认都是针对已经加载的数据,如果我要统计所有数据,难道需要将一百万甚至一千万记录全部加载到Foxtable?显然这是不可能的。

对于熟练掌握SQL语言的用户来说,这不是问题,直接自己编写SQL语句来统计即可;但实际上,SQL语言虽然入门容易,但是精通是很难的,对于一些复杂的统计,即使是一些非常资深的程序员,也不见得能够在短时间内写出合理高效的SQL语句来,何况是普通用户呢?

为此GroupTableBuilder和CrossTableBuilder都提供了一个名为FromServer的逻辑属性,只需将此属性设为True,即可直接统计后台数据。

例如:

Dim g As New GroupTableBuilder("统计表1", DataTables("订单"))
g.Groups.AddDef("产品")
g.Totals.AddDef("数量")
g.FromServer = True
g.Build()
MainTable
= Tables("统计表1")

上述代码能够自动生成最高效的SQL语句,来对后台数据进行统计。
对于一些复杂的统计,GroupTableBuilder和CrossTableBuilder生成的SQL语句,会比最资深的程序员写出来的SQL语句还要高效。

如果通过菜单统计,且需要直接统计后台数据,可以选中下图所示的选项:

对于某些表,可能希望禁止分组统计和交叉统计窗口的“直接统计后台数据”选项,为此可将Table的AllowBackgroundStatistics属性设置为False:

Tables("订单").AllowBackgroundStatistics = False

另GroupTableBuilder和CrossTableBuilder还提供一个名为CommandTimeOut的属性,用于设置统计后台数据的超时时限,默认为30秒,一般不需要设置此属性,除非需要进行非常耗时超过30秒的统计,以至于出现超时错误,此时可适当地加大CommandTimeOut属性的值。

提示:

统计后台数据时,GroupTableBuilder和CrossTableBuilder的Filter属性采用SQL语法,和常规表达式有所差别,请参考:SQL表达式的语法差异


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