Foxtable(狐表)用户栏目专家坐堂 → 请教,如何使用统计工具来实现?


  共有8640人关注过本帖树形打印复制链接

主题:请教,如何使用统计工具来实现?

帅哥哟,离线,有人找我吗?
baoxyang
  1楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐精 帖子:3313 积分:23134 威望:0 精华:1 注册:2009/3/31 11:25:00
请教,如何使用统计工具来实现?  发帖心情 Post By: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来实现呢?


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251048 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2012/9/13 17:45:00 [只看该作者]

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


 回到顶部
帅哥哟,离线,有人找我吗?
baoxyang
  3楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐精 帖子:3313 积分:23134 威望:0 精华:1 注册:2009/3/31 11:25:00
  发帖心情 Post By:2012/9/13 17:57:00 [只看该作者]

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


 回到顶部
帅哥哟,离线,有人找我吗?
baoxyang
  4楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐精 帖子:3313 积分:23134 威望:0 精华:1 注册:2009/3/31 11:25:00
  发帖心情 Post By: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
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2012/9/13 18:14:00 [只看该作者]

多次循环汇总,慢是理所当然的。有空帮你瞧瞧。

看看代码优化一章

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

 回到顶部