以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 生成统计效率的问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=40670) |
-- 作者:blackzhu -- 发布时间:2013/9/26 11:43:00 -- 生成统计效率的问题 日期是1年的条件: 下面的代码 生成的统计表是300条不到的数据量,但是我再次汇总到我需要的表里面,用的时间切有3到4秒左右 是不是我的电脑太旧还是代码有大问题? Filter = "日期 >= \'" & dt1 & "\' And 日期 <= \'" & dt2 & "\'And 报表名称=\'" & e.Node.Name & "\'And [部门] =\'" & e.Node.ParentNode.Name & "\'" Dim g As New GroupTableBuilder("统计表4", DataTables("管组民警数据")) g.Groups.AddDef("部门") g.Groups.AddDef("项目") g.Groups.AddDef("报表名称") g.Groups.AddDef("统计类型") g.Groups.AddDef("数据统计项目") g.Groups.AddDef("日期", DateGroupEnum.None) g.Totals.AddDef("数据") g.FromServer = True g.Filter = Filter g.Build() Dim f As New Filler f.SourceTable = DataTables("统计表4") f.SourceCols = "部门,报表名称,数据统计项目,统计类型,项目" f.DataTable = Tables("统计部门分析_Table1").DataTable f.DataCols = "部门,报表名称,数据统计项目,统计类型,项目" f.Filter = "部门=\'" & e.Node.ParentNode.Name & "\'And 报表名称=\'" & e.Node.Name & "\'" f.ExcludeExistValue = True f.ExcludeNullValue = True f.Distinct = True f.Append = True f.fill Arys = DataTables("统计表4").GetUniqueValues("部门 Is Not Null","部门","报表名称","项目","统计类型","数据统计项目") For Each Ary As String() In Arys Filter = "[部门] = \'" & Ary(0) & "\'And 报表名称=\'" & Ary(1) & "\'And 项目 = \'" & Ary(2) & "\'And 统计类型 =\'" & Ary(3) & "\'And 数据统计项目=\'" & Ary(4) & "\'" Ar = Tables("统计部门分析_Table1").DataTable.Find(Filter) If Ar IsNot Nothing Then Dim s() As String = {"一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"} For i As Integer = 0 To s.Length - 1 dt1 = New Date(y, i+1, 1) dt2 = New Date(y, i+1, Date.DaysInMonth(y,i+1)) \'获取该月的最后一天 Filter1 = "日期 >= \'" & dt1 & "\' And 日期 <= \'" & dt2 & "\'And [部门] = \'" & Ary(0) & "\' And 报表名称=\'" & Ary(1) & "\'And 项目 = \'" & Ary(2) & "\'And 统计类型 =\'" & Ary(3) & "\'And 数据统计项目=\'" & Ary(4) & "\'" Val= DataTables("统计表4").Compute("Sum(数据)",Filter1) If Val > 0 Then ar(s(i)) = Val Else Ar(s(i)) = 0 End If Next End If Next |
-- 作者:blackzhu -- 发布时间:2013/9/26 13:09:00 -- 测试了一下 生成统计表时间是0.4-0.6秒不等,执行到填充的结束的时间是0.7秒,生成统计数据是3.7秒,300条数据统计居然花了3秒的时间. Arys = DataTables("统计表4").GetUniqueValues("部门 Is Not Null","部门","报表名称","项目","统计类型","数据统计项目") For Each Ary As String() In Arys Filter = "[部门] = \'" & Ary(0) & "\'And 报表名称=\'" & Ary(1) & "\'And 项目 = \'" & Ary(2) & "\'And 统计类型 =\'" & Ary(3) & "\'And 数据统计项目=\'" & Ary(4) & "\'" Ar = Tables("统计部门分析_Table1").DataTable.Find(Filter) If Ar IsNot Nothing Then Dim s() As String = {"一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"} For i As Integer = 0 To s.Length - 1 dt1 = New Date(y, i+1, 1) dt2 = New Date(y, i+1, Date.DaysInMonth(y,i+1)) \'获取该月的最后一天 Filter1 = "日期 >= \'" & dt1 & "\' And 日期 <= \'" & dt2 & "\'And [部门] = \'" & Ary(0) & "\' And 报表名称=\'" & Ary(1) & "\'And 项目 = \'" & Ary(2) & "\'And 统计类型 =\'" & Ary(3) & "\'And 数据统计项目=\'" & Ary(4) & "\'" Val= DataTables("统计表4").Compute("Sum(数据)",Filter1) If Val > 0 Then ar(s(i)) = Val Else Ar(s(i)) = 0 End If Next End If Next 求教: 所以这段代码有无其他比较速度快的写法?
[此贴子已经被作者于2013-9-26 13:08:56编辑过]
|
-- 作者:不倒的翁 -- 发布时间:2013/9/26 13:55:00 -- For i As Integer = 0 To s.Length - 1 dt1 = New Date(y, i+1, 1) dt2 = New Date(y, i+1, Date.DaysInMonth(y,i+1)) \'获取该月的最后一天 Filter1 = " 日期 >= \'" & dt1 & "\' And 日期 <= \'" & dt2 & "\'And [部 门] = \'" & Ary(0) & "\' And 报表名称=\'" & Ary(1) & "\'And 项 目 = \'" & Ary(2) & "\'And 统计类型 =\'" & Ary(3) & "\'And 数据统计项 目=\'" & Ary(4) & "\'" Val= DataTables("统计表4").Compute("Sum(数据)",Filter1) If Val > 0 Then ar(s(i)) = Val Else Ar(s(i)) = 0 End If Next 查询与赋值并存不是会降低效率么。。 http://www.foxtable.com/help/topics/2225.htm |
-- 作者:blackzhu -- 发布时间:2013/9/26 13:59:00 -- 谢谢! 我看看 |
-- 作者:blackzhu -- 发布时间:2013/9/26 14:21:00 -- 我测试了下 也需要4秒 是不是异表的关系,这个例子 老大说是本表的速度. |
-- 作者:不倒的翁 -- 发布时间:2013/9/26 14:54:00 -- 异表用多表查询,嵌套查询能否加速呢? |
-- 作者:blackzhu -- 发布时间:2013/9/26 15:04:00 -- 理论上 我这个应该是没有问题的 为啥300行数据的数据汇总会有几秒呢! |
-- 作者:狐狸爸爸 -- 发布时间:2013/9/26 15:12:00 -- 最好用例子说话,瞎猜没意思。 数据保密不是理由,可以用a1、a2、a3代替。 |
-- 作者:blackzhu -- 发布时间:2013/9/26 15:32:00 -- 老大 我 做个例子上来 你帮我改改. |
-- 作者:blackzhu -- 发布时间:2013/9/26 15:52:00 -- 上传的这个例子的代码是和我现在做的代码一模一样 只是原来的代码多了个 生成统计表的过程. 我刚才测试时去掉这个生成统计表4的过程,生成我需要的统计表是4秒多. 上传的这个例子的统计表4我直接做好,同样去掉这个生成统计表4的过程,我现在测试用了约1.8秒. 速度上有变化. 统计表的结构和数据量是一模一样的. 为啥有2秒多的差异我就不明白了. 但是就是1.8秒 还是觉得有点慢了. |