以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  请教,如何使用统计工具来实现?  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=23593)

--  作者:baoxyang
--  发布时间:2012/9/13 17:28:00
--  请教,如何使用统计工具来实现?

dt 为数据表,有统计条件,单据状态,数量三列内容。

\'    For Each nm As String In dt.GetUniqueValues("","统计条件")
\'        Dim dr As DataRow = DataTables("统计").AddNew()
\'        dr("统计条件") = nm
\'        Dim Total1 As String = dt.Compute("sum(数量)","统计条件 = \'"& nm &"\'")  
\'        Dim Total2 As String = dt.Compute("sum(数量)","([单据状态] = \'已发货\' or [单据状态] = \'已交货\' or [单据状态] = \'已回未取\' or [单据状态] = \'已取单\') and 统计条件 = \'"& nm &"\'")
 \'       dr("总托单数") = Total1
\'        dr("已回回单") = dt.Compute("sum(数量)","([单据状态] = \'已回未取\' or [单据状态] = \'已取单\') and 统计条件 = \'"& nm &"\'")
\'        dr("未回回单") = Total2 - dr("已回回单")
 \'       dr("已取单数") = dt.Compute("sum(数量)","[单据状态] = \'已取单\' and 统计条件 = \'"& nm &"\'")
\'        dr("未取单数") = Total2 - dr("已取单数")
\'        dr("已出库数") = Total2
\'        dr("未出库数") = Total1 - Total2
\'        dr("已交货数") = dt.Compute("sum(数量)","([单据状态] = \'已交货\' or [单据状态] = \'已回未取\' or [单据状态] = \'已取单\') and 统计条件 = \'"& nm &"\'")
\'        dr("未交货数") = Total2 - dr("已交货数")
\'    Next
以上如何用CrossTableBuilder来实现呢?


--  作者:狐狸爸爸
--  发布时间:2012/9/13 17:45:00
--  

没办法,所有统计工具的条件都是唯一的,你不同的列,统计条件不同,老老实实写代码吧。


--  作者:baoxyang
--  发布时间:2012/9/13 17:57:00
--  

写代码实现跟CrossTableBuilder速度相差太大。


--  作者:baoxyang
--  发布时间:2012/9/13 18:05:00
--  

由统计工具产生的统计表,与手工产生临时表绑定到表时不一样效果。

datatables的表名不一样,一个S回单统计_Table1,一个临时表名。

Tables("S回单统计_Table1").DataSource = DataTables("统计表1")

手写代码:

 

Dim dtb As New DataTableBuilder("统计")
dtb.AddDef("总托单数", Gettype(Integer))
dtb.AddDef("已回回单", Gettype(Integer))
dtb.AddDef("未回回单", Gettype(Integer))
dtb.AddDef("已取单数", Gettype(Integer))
dtb.AddDef("未取单数", Gettype(Integer))
dtb.AddDef("已出库数", Gettype(Integer))
dtb.AddDef("未出库数", Gettype(Integer))
dtb.AddDef("已交货数", Gettype(Integer))
dtb.AddDef("未交货数", Gettype(Integer))
dtb.build()

\'    For Each nm As String In dt.GetUniqueValues("","统计条件")
\'        Dim dr As DataRow = DataTables("统计").AddNew()
\'        dr("统计条件") = nm
\'        Dim Total1 As String = dt.Compute("sum(数量)","统计条件 = \'"& nm &"\'")  
\'        Dim Total2 As String = dt.Compute("sum(数量)","([单据状态] = \'已发货\' or [单据状态] = \'已交货\' or [单据状态] = \'已回未取\' or [单据状态] = \'已取单\') and 统计条件 = \'"& nm &"\'")
 \'       dr("总托单数") = Total1
\'        dr("已回回单") = dt.Compute("sum(数量)","([单据状态] = \'已回未取\' or [单据状态] = \'已取单\') and 统计条件 = \'"& nm &"\'")
\'        dr("未回回单") = Total2 - dr("已回回单")
 \'       dr("已取单数") = dt.Compute("sum(数量)","[单据状态] = \'已取单\' and 统计条件 = \'"& nm &"\'")
\'        dr("未取单数") = Total2 - dr("已取单数")
\'        dr("已出库数") = Total2
\'        dr("未出库数") = Total1 - Total2
\'        dr("已交货数") = dt.Compute("sum(数量)","([单据状态] = \'已交货\' or [单据状态] = \'已回未取\' or [单据状态] = \'已取单\') and 统计条件 = \'"& nm &"\'")
\'        dr("未交货数") = Total2 - dr("已交货数")
\'    Next

Tables("S回单统计_Table1").DataSource = DataTables("统计")

为什么会这样呢?如何解决?谢谢指点!!


--  作者:lin_hailun
--  发布时间:2012/9/13 18:14:00
--  
多次循环汇总,慢是理所当然的。有空帮你瞧瞧。

看看代码优化一章

http://www.foxtable.com/help/topics/2226.htm