明细数据联查预算表 功能分析 个人总结

来源:互联网 发布:单片机stc isp v488 编辑:程序博客网 时间:2024/04/30 00:58

背景:在我们实际业务中,特别是对于报表业务,我们常常会利用到取数公式来得到我们想要的业务系统数据,而取数公式的实现方式也根据条件,从系统过滤出我们想要的数据,而此时,用户想根据报表上的取数公式所得到的结果数值得到构成该结果数值所在的预算表。

数据模型:

预算方案 会存在所有在此方案下创建预算表的明细数据,里面有一个关联事实表,这个事实表中会记录维度交点处的度量信息,所谓的维度交点,这里是根据预算业务系统所定义的维度指标,预算组织 ,预算期间,预算要素,预算指标,币别,预算版本,以及预算值。

通过方案来分开存储预算数据,这样能够明显提高系统性能,这是一种用空间换时间的方式。对于一些大数据量的业务,实时性要求比较高的情境下,也是一种处理方式。这样,相比把明细数据全部放在一张表里面来处理的方式性能更加优越。

关联表:t_mbg_bgdata - t_mbg_bgdataentry, t_mbg_bgactual-t_mbg_bgactualentry 为了提供数据搜索速度,建立了这张预算表和这张预算表里面的明细数据。通过这张表,我们可以快速通过预算表检索到明细数据ID,或者根据明细数据ID获取到该张预算表。

然后,根据一种聚合取数公式MBGAGG取数公式,它可以根据输入过滤条件 来得到我们具体业务交点的聚合数据,维度:预算组织,预算要素,币别,维度成员,预算方案,预算开始时间,结束时间,预算情景 维度来取得聚合数据的值。 但是,这种情形下,去联查预算表,对于我们的有树形结构的维度来说,只要其不是叶子节点的话,那么它就联查不到我们的预算表,因为我们在事实表中存储的数据维度是明细的,根据非明细过滤条件是得不到我们的明细数据的,这样的话,也就不到我们的相关联的预算表了。

为了解决这种情形,完成这个需求,我们需要把维度向下钻取DRILL DOWN ,这样的话,我们是需要引进明细维度数据的,所以,为了得到明细维度数据,我们根据我们的非明细维度的成员 去查询叶子节点数据,这其中有一个问题就是,不是所有的维度数据都是树形结构,对于树形结构的资料,我们可以用到FlongNumber,如果不是,我们只能使用number来进行查询。

这样,我们最后可以把所有维度的明细数据放到临时表中(为了提高性能),进行查询。


另外,在查询的过程中,我们得注意到,我们将要处理的逻辑算法是否有缺陷,是否有性能的提升空间,对于报表批处理业务,特别是单元格处理,不要万不得已,不要遍历单元格,这样,单元格超过10000个,而每个单元格里面的处理逻辑所消耗的资源很大,这样会导致虚拟机直接OOM。

针对上面这种情况,因为我们的明细数据时放在方案中的,而我们取数公式进行查询的过程中,有许多相同的方案,这样的话,我们可以不必要去重复查询同一个方案里面的明细数据,对于同一个方案,只需要查询一次即可。这样的话,我们的查询数量级会大大减少。

0 0