定义方体时,对方体里的某一度量(对应的所有记录值),按该方体所引用的某一维的上那个被引用的级别,来进行预计算(pre- calculate ),并将对该度量进行预计算的结果存储下来。这是利用方体(结合维,维可以使得在该方体所引用的某一维的上那个被引用的级别上预计算的结果,可以通过级别间的关系,推演出在高一级别上按照该预计算方法得出的该方体里的该度量的计算结果)来提高查询速度的本质。
注释:预计算就是sum或者aver等聚合函数。
以空间换时间
方体a里的一个度量为销售数量(amount),引用time维的month级别
在time维的month级别上,对 销售数量(amount) 的预计算为sum()。
这样,就将计算结果存储下来。
于是下面SQL语句就不用通过先访问表在计算 sum(f.amount)来得出结果,而是直接将获取上面存储下来的计算结果即可:
select t.t_month, sum(f.amount) from time_dim t,fact_sales f where t.time_id=f.time_id group by t.t_month;
对下面一句话的说明解释:
维可以使得在该方体所引用的某一维的上那个被引用的级别上预计算的结果,可以通过级别间的关系,推演出在高一级别上按照该预计算方法得出的该方体里的该度量的计算结果。
例如,
在time维中,t_quarter是t_month的上一级别。而第一季度,包括1、2、3三个月,以此类推。所以,下面SQL语句也就不用通过先访问表在计算 sum(f.amount)来得出结果,而是间接将获取上面存储下来的计算结果,再通过t_quarter和t_month间的关系(如第一季度,包括1、2、3三个月)来计算得出:
select t.t_quarter, sum(f.amount1),sum(f.amount2) 2 from time_dim t,fact_sales f 3 where t.time_id=f.time_id 4 group by t.t_quarter;比如,第一季度,包括1、2、3三个月。
1月的sum(f.amount)=5
2月的sum(f.amount)=10
3月的sum(f.amount)=2
则第一季度的sum(f.amount)=5+10+2;