|
在魔方网表中,制作报表一般要写3个公式:
1 清除当前报表数据
2 插入统计维度
3 按照维度值更新统计项
如果统计维度项比较多,而且源表单数据量比较大,采用这种标准写法的报表公式执行很慢,主要原因如下:
1 第1步清除当前报表数据,系统默认会针对每条记录进行数据库删除操作,删除数据效率低
2 第2步插入统计维度,很多情况下,统计维度都是从源表单中选择不重复的值填写过来,如果源表单数据量大,执行速度会很慢
3 第3步按照维度值更新统计项,按照每个统计维度值从源表单过滤出数据然后进行统计计算,如果统计维度比较多,而且源表单数据量比较大,执行速度也很慢
下面我们针对每个步骤进行优化:
1 将删除报表数据的操作改为清空,清空的特点是一次性将命令发给数据库,数据库执行完操作返回,避免了删除记录方式下没删除一条记录访问一次数据库,提高了删除速度。但此办法不能触发删除类的回写公式,如果没有删除类的回写公式,可尝试用使用这个办法。
2 将第2步和第3步合并成一步,也就是说写一条新增类型的报表公式,同时给维度项和统计项赋值,这种情况下,魔方网表会将统计命令一次性发给数据库,数据库进行分组汇总后将结果返回给魔方网表。这个办法避免了大量反复查询汇总操作,从而提高了执行效率。
我们曾经试验,从26万条数据,汇总800个维度的50个统计项,在当前主流配置的计算机上,如果采用传统办法需要3-4个小时执行完毕;但如果采用优化办法,仅需要最多2分钟执行完毕,可见算法的改变对性能影响是十分巨大的。 |
|