Foxtable(狐表)用户栏目专家坐堂 → [讨论]关于自定义统计


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

主题:[讨论]关于自定义统计

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


加好友 发短信
等级:婴狐 帖子:50 积分:508 威望:0 精华:0 注册:2012/4/17 14:41:00
[讨论]关于自定义统计  发帖心情 Post By:2013/8/17 12:00:00 [只看该作者]

以下是写在DataColChanged中自定义统计代码,能不能简化呢?
Dim names As List (Of String) = DataTables("随访名单").GetUniqueValues("预随访地区 Is Not Null","预随访地区")
For Each name As String In names
    For Each r As Row In Tables("统计表B").Rows
        If r("乡镇名称") = name Then
            r("评估人数_2013年_01月") = DataTables("随访名单").Compute("Count(档案编号)","预随访地区 = '" & name & "' And [评估建议完成日期] >= #2013-1-1 0:00:00# And [评估建议完成日期]  < #2013-2-1 0:00:00#")
            r("评估人数_2013年_02月") = DataTables("随访名单").Compute("Count(档案编号)","预随访地区 = '" & name & "' And [评估建议完成日期] >= #2013-2-1 0:00:00# And [评估建议完成日期]  < #2013-3-1 0:00:00#")
            r("评估人数_2013年_03月") = DataTables("随访名单").Compute("Count(档案编号)","预随访地区 = '" & name & "' And [评估建议完成日期] >= #2013-3-1 0:00:00# And [评估建议完成日期]  < #2013-4-1 0:00:00#")
            r("评估人数_2013年_04月") = DataTables("随访名单").Compute("Count(档案编号)","预随访地区 = '" & name & "' And [评估建议完成日期] >= #2013-4-1 0:00:00# And [评估建议完成日期]  < #2013-5-1 0:00:00#")
            r("早孕随访人数_2013年_01月") = DataTables("随访名单").Compute("Count(档案编号)","预随访地区 = '" & name & "' And [早孕随访完成状态] <> '未创建' And [评估建议完成日期] >= #2013-1-1 0:00:00# And [评估建议完成日期]  < #2013-2-1 0:00:00#")
            r("早孕随访人数_2013年_02月") = DataTables("随访名单").Compute("Count(档案编号)","预随访地区 = '" & name & "' And [早孕随访完成状态] <> '未创建' And [评估建议完成日期] >= #2013-2-1 0:00:00# And [评估建议完成日期]  < #2013-3-1 0:00:00#")
            r("早孕随访人数_2013年_03月") = DataTables("随访名单").Compute("Count(档案编号)","预随访地区 = '" & name & "' And [早孕随访完成状态] <> '未创建' And [评估建议完成日期] >= #2013-3-1 0:00:00# And [评估建议完成日期]  < #2013-4-1 0:00:00#")
            r("早孕随访人数_2013年_04月") = DataTables("随访名单").Compute("Count(档案编号)","预随访地区 = '" & name & "' And [早孕随访完成状态] <> '未创建' And [评估建议完成日期] >= #2013-4-1 0:00:00# And [评估建议完成日期]  < #2013-5-1 0:00:00#")
            r("已孕人数_2013年_01月") = DataTables("随访名单").Compute("Count(档案编号)","预随访地区 = '" & name & "' And [当前早孕随访结果] = '已孕'and [早孕随访日期] >= #2013-1-1 0:00:00# And [早孕随访日期]  < #2013-2-1 0:00:00#")
            r("已孕人数_2013年_02月") = DataTables("随访名单").Compute("Count(档案编号)","预随访地区 = '" & name & "' And [当前早孕随访结果] = '已孕' And [早孕随访日期] >= #2013-2-1 0:00:00# And [早孕随访日期]  < #2013-3-1 0:00:00#")
            r("已孕人数_2013年_03月") = DataTables("随访名单").Compute("Count(档案编号)","预随访地区 = '" & name & "' And [当前早孕随访结果] = '已孕' And [早孕随访日期] >= #2013-3-1 0:00:00# And [早孕随访日期]  < #2013-4-1 0:00:00#")
            r("已孕人数_2013年_04月") = DataTables("随访名单").Compute("Count(档案编号)","预随访地区 = '" & name & "' And [当前早孕随访结果] = '已孕' And [早孕随访日期] >= #2013-4-1 0:00:00# And [早孕随访日期]  < #2013-5-1 0:00:00#")
            r("妊娠结局随访人数_2013年_01月") = DataTables("随访名单").Compute("Count(档案编号)","预随访地区 = '" & name & "' And [妊娠结局随访完成状态] <> '未创建' And [早孕随访日期] >= #2013-1-1 0:00:00# And [早孕随访日期]  < #2013-2-1 0:00:00#")
            r("妊娠结局随访人数_2013年_02月") = DataTables("随访名单").Compute("Count(档案编号)","预随访地区 = '" & name & "' And [妊娠结局随访完成状态] <> '未创建' And [早孕随访日期] >= #2013-2-1 0:00:00# And [早孕随访日期]  < #2013-3-1 0:00:00#")
            r("妊娠结局随访人数_2013年_03月") = DataTables("随访名单").Compute("Count(档案编号)","预随访地区 = '" & name & "' And [妊娠结局随访完成状态] <> '未创建' And [早孕随访日期] >= #2013-3-1 0:00:00# And [早孕随访日期]  < #2013-4-1 0:00:00#")
            r("妊娠结局随访人数_2013年_04月") = DataTables("随访名单").Compute("Count(档案编号)","预随访地区 = '" & name & "' And [妊娠结局随访完成状态] <> '未创建' And [早孕随访日期] >= #2013-4-1 0:00:00# And [早孕随访日期]  < #2013-5-1 0:00:00#")
        End If
    Next
这是统计表的格式

图片点击可在新窗口打开查看此主题相关图片如下:qq截图20130817120250.png
图片点击可在新窗口打开查看
现在主要有以下问题:1.生成结果速度太慢 2.如果还有以后的月份要查又怎么办?3.如果乡镇名称列所包含的项目内容和上面年月互换位置,代码应如何转换呢?如果行,就解决了第2个问题。


[此贴子已经被作者于2013-8-17 12:11:33编辑过]

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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/8/17 12:02:00 [只看该作者]

上个例子看看是否能使用SQL生成查询表吧.

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


加好友 发短信
等级:婴狐 帖子:50 积分:508 威望:0 精华:0 注册:2012/4/17 14:41:00
  发帖心情 Post By:2013/8/17 12:14:00 [只看该作者]

呵呵,帮我改一组看看,谢谢!

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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/8/17 12:16:00 [只看该作者]

上个例子才好办,纸上谈兵没用.

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


加好友 发短信
等级:狐神 帖子:4752 积分:34568 威望:0 精华:0 注册:2008/8/31 22:44:00
  发帖心情 Post By:2013/8/17 12:17:00 [只看该作者]

这样设计统计肯定会慢的
上个例子看看吧

[此贴子已经被作者于2013-8-17 12:17:25编辑过]

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


加好友 发短信
等级:婴狐 帖子:50 积分:508 威望:0 精华:0 注册:2012/4/17 14:41:00
  发帖心情 Post By:2013/8/17 12:38:00 [只看该作者]

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


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


加好友 发短信
等级:狐神 帖子:4752 积分:34568 威望:0 精华:0 注册:2008/8/31 22:44:00
  发帖心情 Post By:2013/8/17 12:56:00 [只看该作者]

Dim dr As DataRow = e.DataRow
If e.DataCol.Name = "乡镇名称"
    dr("评估人数_2013年_01月") = DataTables("随访名单").Compute("Count(档案编号)","预随访地区 = '" & dr(e.DataCol.Name) & "' And [评估建议完成日期] >= #2013-1-1 0:00:00# And [评估建议完成日期]  < #2013-2-1 0:00:00#")
    dr("评估人数_2013年_02月") = DataTables("随访名单").Compute("Count(档案编号)","预随访地区 = '" & dr(e.DataCol.Name) & "' And [评估建议完成日期] >= #2013-2-1 0:00:00# And [评估建议完成日期]  < #2013-3-1 0:00:00#")
    dr("评估人数_2013年_03月") = DataTables("随访名单").Compute("Count(档案编号)","预随访地区 = '" & dr(e.DataCol.Name) & "' And [评估建议完成日期] >= #2013-3-1 0:00:00# And [评估建议完成日期]  < #2013-4-1 0:00:00#")
    dr("评估人数_2013年_04月") = DataTables("随访名单").Compute("Count(档案编号)","预随访地区 = '" & dr(e.DataCol.Name) & "' And [评估建议完成日期] >= #2013-4-1 0:00:00# And [评估建议完成日期]  < #2013-5-1 0:00:00#")
    dr("早孕随访人数_2013年_01月") = DataTables("随访名单").Compute("Count(档案编号)","预随访地区 = '" & dr(e.DataCol.Name) & "' And [早孕随访完成状态] <> '未创建' And [评估建议完成日期] >= #2013-1-1 0:00:00# And [评估建议完成日期]  < #2013-2-1 0:00:00#")
    dr("早孕随访人数_2013年_02月") = DataTables("随访名单").Compute("Count(档案编号)","预随访地区 = '" & dr(e.DataCol.Name) & "' And [早孕随访完成状态] <> '未创建' And [评估建议完成日期] >= #2013-2-1 0:00:00# And [评估建议完成日期]  < #2013-3-1 0:00:00#")
    dr("早孕随访人数_2013年_03月") = DataTables("随访名单").Compute("Count(档案编号)","预随访地区 = '" & dr(e.DataCol.Name) & "' And [早孕随访完成状态] <> '未创建' And [评估建议完成日期] >= #2013-3-1 0:00:00# And [评估建议完成日期]  < #2013-4-1 0:00:00#")
    dr("早孕随访人数_2013年_04月") = DataTables("随访名单").Compute("Count(档案编号)","预随访地区 = '" & dr(e.DataCol.Name) & "' And [早孕随访完成状态] <> '未创建' And [评估建议完成日期] >= #2013-4-1 0:00:00# And [评估建议完成日期]  < #2013-5-1 0:00:00#")
    dr("已孕人数_2013年_01月") = DataTables("随访名单").Compute("Count(档案编号)","预随访地区 = '" & dr(e.DataCol.Name) & "' And [当前早孕随访结果] = '已孕'and [早孕随访日期] >= #2013-1-1 0:00:00# And [早孕随访日期]  < #2013-2-1 0:00:00#")
    dr("已孕人数_2013年_02月") = DataTables("随访名单").Compute("Count(档案编号)","预随访地区 = '" & dr(e.DataCol.Name) & "' And [当前早孕随访结果] = '已孕' And [早孕随访日期] >= #2013-2-1 0:00:00# And [早孕随访日期]  < #2013-3-1 0:00:00#")
    dr("已孕人数_2013年_03月") = DataTables("随访名单").Compute("Count(档案编号)","预随访地区 = '" & dr(e.DataCol.Name) & "' And [当前早孕随访结果] = '已孕' And [早孕随访日期] >= #2013-3-1 0:00:00# And [早孕随访日期]  < #2013-4-1 0:00:00#")
    dr("已孕人数_2013年_04月") = DataTables("随访名单").Compute("Count(档案编号)","预随访地区 = '" & dr(e.DataCol.Name) & "' And [当前早孕随访结果] = '已孕' And [早孕随访日期] >= #2013-4-1 0:00:00# And [早孕随访日期]  < #2013-5-1 0:00:00#")
    dr("妊娠结局随访人数_2013年_01月") = DataTables("随访名单").Compute("Count(档案编号)","预随访地区 = '" & dr(e.DataCol.Name) & "' And [妊娠结局随访完成状态] <> '未创建' And [早孕随访日期] >= #2013-1-1 0:00:00# And [早孕随访日期]  < #2013-2-1 0:00:00#")
    dr("妊娠结局随访人数_2013年_02月") = DataTables("随访名单").Compute("Count(档案编号)","预随访地区 = '" & dr(e.DataCol.Name) & "' And [妊娠结局随访完成状态] <> '未创建' And [早孕随访日期] >= #2013-2-1 0:00:00# And [早孕随访日期]  < #2013-3-1 0:00:00#")
    dr("妊娠结局随访人数_2013年_03月") = DataTables("随访名单").Compute("Count(档案编号)","预随访地区 = '" & dr(e.DataCol.Name) & "' And [妊娠结局随访完成状态] <> '未创建' And [早孕随访日期] >= #2013-3-1 0:00:00# And [早孕随访日期]  < #2013-4-1 0:00:00#")
    dr("妊娠结局随访人数_2013年_04月") = DataTables("随访名单").Compute("Count(档案编号)","预随访地区 = '" & dr(e.DataCol.Name) & "' And [妊娠结局随访完成状态] <> '未创建' And [早孕随访日期] >= #2013-4-1 0:00:00# And [早孕随访日期]  < #2013-5-1 0:00:00#")
End If

效果是一瞬间!(条件未简化)
[此贴子已经被作者于2013-8-17 12:56:01编辑过]

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


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2013/8/17 13:26:00 [只看该作者]

也难怪楼主的代码执行,慢如蜗牛。

没有判断列名,每一列值的改变,都会导致重算。

楼上的,先来了一句:

If e.DataCol.Name = "乡镇名称"

 

 

差别大了。

 

而且楼主,身在数据库,心在电子表。

[此贴子已经被作者于2013-8-17 13:27:46编辑过]

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


加好友 发短信
等级:婴狐 帖子:50 积分:508 威望:0 精华:0 注册:2012/4/17 14:41:00
  发帖心情 Post By:2013/8/17 13:33:00 [只看该作者]

速度快了很多!谢谢!不过代码不知是否可以简化些呢?比如每列列名包含YYYYmm式的文本,能否在筛选统计时自动根据这一条件进行判断呢

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


加好友 发短信
等级:婴狐 帖子:50 积分:508 威望:0 精华:0 注册:2012/4/17 14:41:00
  发帖心情 Post By:2013/8/17 13:45:00 [只看该作者]

因为如果可以的话,到以后的年月就不要再改代码了

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