以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- [求助]大量数据递归计算 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=91896) |
-- 作者:chnfo -- 发布时间:2016/10/21 11:16:00 -- [求助]大量数据递归计算 表A中有Code、FCode、V等列,数据量较大(约2万行) 显示的示列如下: Code FCode V 1 1.1 1 1.1.1 1.1 1.2 1.1.2 1.1 1.1.2.1 1.1.2 2.3 1.1.2.2 1.1.2 3.4 1.1.2.3 1.1.2 4.5 …… 这么多数据肯定是导入的了。 用普通的compute会导致计算溢出,如何用递归来搞定它?关键是要速度快才好。
|
-- 作者:jspta -- 发布时间:2016/10/21 11:26:00 -- 用MSSQL2005以上就用 公用表达式直接递归就好了 |
-- 作者:chnfo -- 发布时间:2016/10/21 11:29:00 -- 现在还是用的ACCESS哦。 而且,在数据量很大的情况下,使用遍历,且在其中用到赋值、compute肯定效率会很低
[此贴子已经被作者于2016/10/21 11:35:36编辑过]
|
-- 作者:有点蓝 -- 发布时间:2016/10/21 11:42:00 -- 上例子数据,说明你要做什么 |
-- 作者:chnfo -- 发布时间:2016/10/21 12:03:00 -- 示例表中只截了一部分数据,其实真实的数据量比这个大很多。 需要计算class = 1的各列的V值。 如果是用DrawCell或者datacolchanged事件,在数据全部加载之后,单个的数据修改,就算用最简单的遍历再compute,速度也不会慢。 但是这么大的数据量,一般会直接从EXCEL表中合并进来,合并之后计算它们的值。 因为是遍历,如果compute再赋值,肯定效率会很低。 用递归能解决吗? 似乎用DrawCell,出来得很快。datacolchanged极慢。 所以,涉及到递归的,不计算用查询可能要好很多。
[此贴子已经被作者于2016/10/21 14:03:14编辑过]
|
-- 作者:有点蓝 -- 发布时间:2016/10/21 14:06:00 -- V值怎么算,子节点求和? |
-- 作者:chnfo -- 发布时间:2016/10/21 14:10:00 -- 对,FCode的意思就是父节点的Code。 往上递归合计到父节点的V值。 我现在是在Drawcell事件中写的 if e.row("Class") = 1 then e.row("V") = e.table.datatable.compute("Sum(V)","Code = \'" & e.row("Code") & "\' or Code like \'" & e.row("Code") &".8\'") end if 这样,其实父节点的金额出来得速度还可以接受(就算20000行数据也还行) 但是,如果父节点的金额要被其它地方应用,就比较麻烦。 不用递归也可以,能整出来就行。 比如这个表的Class=1的数据要被其它的表引用参与计算,尤其是V值要参与计算(例如再sum),那就加重了其它表的负担,速度会极慢。 有没有其它的途径来解决呢?比如在外部数据库中用一个查询视图,来计算class=1的值,其它的表要引用这个金额来参与计算,就直接从查询视图中取值?
[此贴子已经被作者于2016/10/22 12:52:32编辑过]
|