Foxtable(狐表)用户栏目专家坐堂 → 生成统计效率的问题


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

主题:生成统计效率的问题

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


加好友 发短信 一级勋章
等级:狐仙 帖子:9879 积分:57634 威望:0 精华:15 注册:2008/9/1 9:45:00
生成统计效率的问题  发帖心情 Post By: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
  2楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:狐仙 帖子:9879 积分:57634 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By: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编辑过]

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


加好友 发短信
等级:一尾狐 帖子:476 积分:3523 威望:0 精华:0 注册:2012/12/13 14:23:00
  发帖心情 Post By: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
  4楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:狐仙 帖子:9879 积分:57634 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2013/9/26 13:59:00 [只看该作者]

谢谢!  我看看

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


加好友 发短信 一级勋章
等级:狐仙 帖子:9879 积分:57634 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2013/9/26 14:21:00 [只看该作者]

我测试了下 也需要4秒  是不是异表的关系,这个例子 老大说是本表的速度.

 回到顶部
帅哥哟,离线,有人找我吗?
不倒的翁
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:476 积分:3523 威望:0 精华:0 注册:2012/12/13 14:23:00
  发帖心情 Post By:2013/9/26 14:54:00 [只看该作者]

 异表用多表查询,嵌套查询能否加速呢?

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


加好友 发短信 一级勋章
等级:狐仙 帖子:9879 积分:57634 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2013/9/26 15:04:00 [只看该作者]

理论上 我这个应该是没有问题的  为啥300行数据的数据汇总会有几秒呢!

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2013/9/26 15:12:00 [只看该作者]

最好用例子说话,瞎猜没意思。

数据保密不是理由,可以用a1、a2、a3代替。


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


加好友 发短信 一级勋章
等级:狐仙 帖子:9879 积分:57634 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2013/9/26 15:32:00 [只看该作者]

老大  我 做个例子上来 你帮我改改.

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


加好友 发短信 一级勋章
等级:狐仙 帖子:9879 积分:57634 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2013/9/26 15:52:00 [只看该作者]

    上传的这个例子的代码是和我现在做的代码一模一样  只是原来的代码多了个 生成统计表的过程. 我刚才测试时去掉这个生成统计表4的过程,生成我需要的统计表是4秒多.

     上传的这个例子的统计表4我直接做好,同样去掉这个生成统计表4的过程,我现在测试用了约1.8秒. 速度上有变化. 
统计表的结构和数据量是一模一样的. 为啥有2秒多的差异我就不明白了.   但是就是1.8秒 还是觉得有点慢了.


 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:统计.table



 回到顶部
总数 19 1 2 下一页