以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [讨论]关于自定义统计 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=39170) |
||||
-- 作者:祁阳 -- 发布时间: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 这是统计表的格式 现在主要有以下问题:1.生成结果速度太慢 2.如果还有以后的月份要查又怎么办?3.如果乡镇名称列所包含的项目内容和上面年月互换位置,代码应如何转换呢?如果行,就解决了第2个问题。 [此贴子已经被作者于2013-8-17 12:11:33编辑过]
|
||||
-- 作者:Bin -- 发布时间:2013/8/17 12:02:00 -- 上个例子看看是否能使用SQL生成查询表吧. |
||||
-- 作者:祁阳 -- 发布时间:2013/8/17 12:14:00 -- 呵呵,帮我改一组看看,谢谢! |
||||
-- 作者:Bin -- 发布时间:2013/8/17 12:16:00 -- 上个例子才好办,纸上谈兵没用. |
||||
-- 作者:y2287958 -- 发布时间:2013/8/17 12:17:00 -- 这样设计统计肯定会慢的 上个例子看看吧 [此贴子已经被作者于2013-8-17 12:17:25编辑过]
|
||||
-- 作者:祁阳 -- 发布时间:2013/8/17 12:38:00 -- 例子上来了
|
||||
-- 作者:y2287958 -- 发布时间: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 -- 发布时间:2013/8/17 13:26:00 -- 也难怪楼主的代码执行,慢如蜗牛。 没有判断列名,每一列值的改变,都会导致重算。 楼上的,先来了一句: If e.DataCol.Name = "乡镇名称"
差别大了。
而且楼主,身在数据库,心在电子表。 [此贴子已经被作者于2013-8-17 13:27:46编辑过]
|
||||
-- 作者:祁阳 -- 发布时间:2013/8/17 13:33:00 -- 速度快了很多!谢谢!不过代码不知是否可以简化些呢?比如每列列名包含YYYYmm式的文本,能否在筛选统计时自动根据这一条件进行判断呢 |
||||
-- 作者:祁阳 -- 发布时间:2013/8/17 13:45:00 -- 因为如果可以的话,到以后的年月就不要再改代码了 |