BI 前端实践 12:隐身的汇总表提速多维分析

实践目标

         数据量大的基础表,做多维分析时会比较慢,通过汇总表预先缓存一些聚合数据,然后在元数据中设置好基础表和汇总表的关系,最后达到这样的效果:在界面上做多维分析感觉不到汇总表的存在,后台的DQL Server能自动选用合适汇总表提速查询。

大数据量的基础表和基于它的汇总表

         项目中的订单表可能有上亿条数据,基于它做分组汇总,速度会比较慢,这时如果预先把一些常用的汇总数据计算出来,并存入专门的汇总表,再做分组汇总分析时,直接从汇总表得到数据就会比较快,如订单表中的订单金额(amount)、订单日期(deal_date)

..

         按照年份、月份汇总出订单总额,年/月度最大订单额,数据存入订单年份汇总表(orders_year)/订单月份汇总表(orders_month)

..

..

多维分析页面直接使用汇总表数据

         首先把两个汇总表导入到元数据中:

..

         需要汇总月度的订单额时,在多维分析页面上直接选出汇总表的数据就可以了:

..

         上面这么用,虽然解决了性能问题,但实际项目中各种维度一交叉,汇总表的数量就会很多,比如市级年度男性汇总、市级年度女性汇总、省级月度男性汇总……

         多维分析页面出现很多的备用汇总表,会导致操作困难。接下来通过在元数据中设置基础表/汇总表的关系,把汇总表给隐身掉。

元数据中建立基础表和汇总表的关系

         选中订单年度汇总表,然后在它的基础表标签页添加一个基础表,选择订单表为它的基础表,之后了给它的三个字段设置基础表中的来源表达式:

                年份字段,来自订单表的订单日期#

                总额,来自订单表的sum(金额)

                最大额,来自订单表的max(金额)

        如果觉得最小额,平均额都常用,那设计汇总表的时候加上这些字段,同时在这里设置好聚合表达式就可以。

..

         在汇总表上设置好了基础表,可以点到基础表上查看关系,发现订单表下自动列出了它的两个汇总表,这样元数据中就成功建立了基础表和汇总表的关系:

..

 

使用多维分析验证隐身汇总表的效果

         部署元数据重启后,页面上发现确实只有基础表,看不到汇总表了:

..

         接下来基于基础订单表做分组汇总,重点是查看这时DQL Server中的运行日志,发现实际上执行的SQL是从汇总表orders_year查询的数据,这也就说明借用隐身的汇总表提高性能成功了:

..

..

         再继续增加平均订单额的汇总,发现执行的SQL自动变回从基础表orders查询数据了,这是因为汇总表没有平均订单额,它已经满足不了查询需求,所以DQL Server就自动切换回基础表了:

..

..

         汇总表作为一种提升性能的手段,只在数据库和制作元数据时出现,完成和基础表的关系设置后,DQL Server会智能的选用,界面上做多维分析时,感觉不到汇总表的存在。