易表在线答疑技术与交流用户社区 → [求助]请CZY等老师看看为何个别表运算要花5分钟?有没有优化的公式?


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

主题:[求助]请CZY等老师看看为何个别表运算要花5分钟?有没有优化的公式?

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


加好友 发短信
等级:蒙面侠 帖子:2409 积分:400 威望:0 精华:0 注册:2006/8/14 19:31:00
[求助]请CZY等老师看看为何个别表运算要花5分钟?有没有优化的公式?  发帖心情 Post By:2007/1/22 2:45:00 [只看该作者]

[这个贴子最后由tzszw在 2007/03/07 10:28pm 第 2 次编辑]

CZY等老师:
   你们好!
   我这个系统承蒙大家关心,基本完成。最近将正式数据放上去试运行后,发现个别表的功能模块运行实行太慢,优化了几次,效果并不理想。其实我的数据目前才4256条,将来会达到2、3万条,如果按现在的运行速度到时恐怕难以忍受。特在此请CZY等各位版主和易友会诊一下,看看毛病究竟出在哪?
   我的系统中主要有4个表:个人开户、社会化发放、历史发放、社会化汇总。这四个表的关系如下:
   1、个人开户是数据源头,新参加保险的人员先进入此表,在每月的25日左右通过该表的“生成社会化发放数据”窗口重新计算参保人员的待遇(因待遇是动态的,必须每月重算一次),并将计算的待遇转入“社会化发放”表中(置“社会化发放_发放月份”为“YYYY.MM”)。此步骤各列计算使用RecalcCol("个人开户",29,62) and RecalcCol("个人开户",75,92)and RecalcCol("个人开户","人数")在我的配置为P4/3.0GHZ/512M机器上运行约5分钟。
   2、“社会化发放”表用于打印当月发放数据报财务和财政以及邮政代发机构,打印结束后通过该表的“社会化发放数据月度结转”窗口将当月发放过的数据转入“历史发放”表中备查。此步骤在我的配置为P4/3.0GHZ/512M机器上运行约0.5分钟。
   3、“历史发放”表中存放各月发放数据,其存放形式为如:
   编号,姓名,性别,社会化发放_本月生活,社会化发放_本月养老,社会化发放_本月小计,社会化发放_发放月份(其中本月小计=本月生活+本月养老)
   0100028,张三,男,120,0,120,2006.01
   0100029,李四,女,0,170,170,2006.01
   ... ... ...
   0100028,张三,男,120,0,120,2006.02
   0100029,李四,女,0,170,170,2006.02
   ... ... ...
   ... ... ...
   ... ... ...
   0100028,张三,男,120,0,120,2006.11
   0100029,李四,女,0,170,170,2006.11
   ... ... ...
   0100028,张三,男,120,0,120,2006.12
   0100029,李四,女,0,170,170,2006.12
   ... ... ...
   以上指每人的待遇均从1月排到12月(如果某人在某月无待遇,则其在某月没有记录)。
   4、“社会化汇总”用于对全年的发放数据进行综合统计,其形式是将每人的全年待遇以1月、2月、3月、4月、5月、6月、7月、8月、9月、10月、11月、12月、本年合计的方式统计并列出来,数据源为第3条的“历史发放”表。目前我采用sumfor统计,如在该表的“生成本年社会化发放汇总数据”窗口将“历史发放”表中某保险编号的发放月份为"2006.01"的发放待遇小计统计到“社会化汇总”表的“本年01月”列,则“本年01月”列的刷新公式为SumFor("历史发放","社会化发放_本月小计","保险编号","=",[保险编号],"社会化发放_发放月份","=",text(year(today()))+".01")。
   这种方法速度实在太慢,该表的“生成本年社会化发放汇总数据”窗口的统计公式在我的配置为P4/3.0GHZ/512M的机器上仍需约8分钟。
   
   **其他如:“社会化发放”表中“社会化发放数据汇总”窗口的汇总模块部分(采用RecalcGrid("社会化发放",1)And MoveCol("所在镇街",1) And Explorer()统计)运算速度也不理想。

   请大家看看为何这些个运算要花5-8分钟?有没有什么优化的公式?
   谢谢!文件如下,管理员无密码。
  请直接用CTRL+ALT+SHIFT+Q键进入管理员模式看相关表的相关列刷新公式和相关窗口命令按钮公式.


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


加好友 发短信
等级:超级版主 帖子:13147 积分:-89 威望:0 精华:0 注册:2006/8/11 11:14:00
  发帖心情 Post By:2007/1/22 12:57:00 [只看该作者]

全面检查一个系统,还是个大型系统,恐怕一时半会连领会大致意思都是个问题,晚上抽抽时间帮你看看,不过别抱太大希望。

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


加好友 发短信
等级:超级版主 帖子:13147 积分:-89 威望:0 精华:0 注册:2006/8/11 11:14:00
  发帖心情 Post By:2007/1/22 19:13:00 [只看该作者]

看了一下,你的这个文件提速的可能已经很小了,一次要计算的列太多,目前来说好象没什么好办法了。

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


加好友 发短信
等级:蒙面侠 帖子:2409 积分:400 威望:0 精华:0 注册:2006/8/14 19:31:00
  发帖心情 Post By:2007/1/22 21:44:00 [只看该作者]

   谢谢CZY老师呀!这些个计算的列是不是可以用EvalFor()处理?EvalFor()处理时会不会快些呢?实在不行只好去掉些列,牺牲掉些系统的"灵活性",将系统做得"死"一点了.
   只是那样实在太可惜了!困惑中... ...

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


加好友 发短信
等级:超级版主 帖子:13147 积分:-89 威望:0 精华:0 注册:2006/8/11 11:14:00
  发帖心情 Post By:2007/1/22 21:57:00 [只看该作者]

用EvalFor也不能提高速度。
对一个月只执行一次的公式,这个速度我想还是应该可以接受的。

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


加好友 发短信
等级:蒙面侠 帖子:2409 积分:400 威望:0 精华:0 注册:2006/8/14 19:31:00
  发帖心情 Post By:2007/1/22 22:06:00 [只看该作者]

   谢谢CZY老师!
   对于汇总数据用sumfor()是不是科学呢?这实在想不出什么好办法!因为还有一个模块未做,就是对"个人开户"表中"个人账户"余额的处理,我现在的设想也是用"期初金额-sumfor("历史发放","社会化发放_本月小计","保险编号","=",[保险编号])"来处理,如果这样处理的话,速度也不会快呀!

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


加好友 发短信
等级:超级版主 帖子:13147 积分:-89 威望:0 精华:0 注册:2006/8/11 11:14:00
  发帖心情 Post By:2007/1/22 22:56:00 [只看该作者]

问一下,你登录窗口的提示是你手工输入的,还是系统自动生成的?会不会是你们使用的用户中注册码出现错误了?

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


加好友 发短信
等级:超级版主 帖子:13147 积分:-89 威望:0 精华:0 注册:2006/8/11 11:14:00
  发帖心情 Post By:2007/1/22 23:25:00 [只看该作者]

下面引用由tzszw2007/01/22 10:06pm 发表的内容:
谢谢CZY老师!
   对于汇总数据用sumfor()是不是科学呢?这实在想不出什么好办法!因为还有一个模块未做,就是对"个人开户"表中"个人账户"余额的处理,我现在的设想也是用"期初金额-sumfor ...

如果只是一两列这样的公式不会有问题的,如果要计算的列太多,如果只是想得到一个分组数据,可否考虑用SubtotalFill等函数来完成,如果可行我想速度不再会是问题。比如随意新增一个表,执行一下下面的公式:
SubtotalFill("历史发放","所在镇街,单位代码,单位名称,保险编号,身份证号,姓名","社会化发放_本月小计",2) And DelFor(Grid,"身份证号","=","") And DelFor(Grid,"姓名","=","")
20秒左右的时间就能生成一个新的数据表,并按要求对本月小计列进行了统计。
当然你也可以在SubtotalFill再加一些其它操作,比如增加新的列,调入其它数据与本月小计进行比较等等。
以上说的对你的要求不一定可行,我的意思是说如果可以,尽可能活用一下易表中的一些高效的函数,可能会有意想不到的效果。


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


加好友 发短信
等级:蒙面侠 帖子:2409 积分:400 威望:0 精华:0 注册:2006/8/14 19:31:00
  发帖心情 Post By:2007/1/23 22:43:00 [只看该作者]

下面引用由czy2007/01/22 10:56pm 发表的内容:
问一下,你登录窗口的提示是你手工输入的,还是系统自动生成的?会不会是你们使用的用户中注册码出现错误了?

这个注册码是我家的机器没有注册(用的是试用版,已被锁过一次,也许不是被锁,反正在家没打开得了,后发给易表公司处理一上才行的),我在单位注册了4个企业版,但家中没舍得注册,没办法,总不能掏太多的银子,现等新版出来再注册几个企业版的吧。

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


加好友 发短信
等级:蒙面侠 帖子:2409 积分:400 威望:0 精华:0 注册:2006/8/14 19:31:00
  发帖心情 Post By:2007/1/23 23:12:00 [只看该作者]

下面引用由czy2007/01/22 11:25pm 发表的内容:
如果只是一两列这样的公式不会有问题的,如果要计算的列太多,如果只是想得到一个分组数据,可否考虑用SubtotalFill等函数来完成,如果可行我想速度不再会是问题。比如随意新增一个表,执行一下下面的公式:
Sub ...

关键是用户要求表要具有1到12月和合计数据,没办法。我又想不出其他高招,只好用sumfor()了。你建议用的这个SubtotalFill函数速度确实够快,但我不会用它从"历史发放"表中产生如下效果的数据啊:
所在镇街,单位代码,单位名称,保险编号,身份证号,姓名,本年01月,本年02月,...,本年12月,本月小计
   速度与技巧两难全.困惑中... ...

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