累计、同比、环比是BI项目中常用的分析方法。Oracle BIEE提供的解决方法是时间轴函数。Oracle BIEE现在支持两个时间轴函数:Ago:从当前时间起回溯用户指定的n个时间段,返回当时的度量值;ToDate:从用户指定时间段的起点开始,到当前时间为止,计算度量值的累计值。
使用时间轴函数的前提条件是在逻辑模型内定义了时间维。上面两个函数说明中的“时间段”实际上指的是时间维的层级(Level)。例如使用Ago函数定义“去年同期值”,指定的时间段为“年”这一层级,指定的回溯周期为1,表示得到去年的值。再比如使用ToDate函数定义“本年累计值”,指定的时间段也是“年”这一层级,表示从年的起点(年初)开始到当前时间为止,求度量值的累计值。
注:
1. 如果某个物理表的字段被映射到了时间逻辑表上,那么这个物理表中的字段不能再映射到其他逻辑表中。
2. 作为时间逻辑表的数据源的物理表,只允许与物理事实表关联。且关联只能基于外键,而不能基于复杂连接。
3. 时间维与普通维度有两处不同。首先,双击维度“Date”节点,在“Dimension”对话框中需要选中“Time Dimension”选项,以表明此维度对象为时间维度。其次,时间维度中需要定义时间序列键(Chronological Key)。时间序列键的作用是表明时间维中具有一组单调增加的时间序列值。定义时间序列时存在以下原则:时间维中,至少一个层级上应定义有时间序列键。物理存储的最细时间粒度上必须定义时间序列键。时间维的同一层级上可以建立多个时间序列键,但只有第一个时间序列键有效。
定义好时间维后,就可以在逻辑事实表中定义使用时间轴函数的逻辑列了。
ago(<measure_expression>, <model_id>.<dimension_id>.<level_id>, <integer_literal>):第一个参数是逻辑字段用于时间轴运算的度量值;第二个参数是逻辑模型时间维的层级,表明回溯的时间单位;第三个参数表示回溯的时间周期,1则为回溯一年,即去年。
todate(<measure_expression>, <model_id>.<dimension_id>.<level_id>):第一个参数是逻辑字段,是用于时间轴运算的度量值;第二个参数是逻辑模型时间维的层级表明累计计算开始自年时间的起点,终止到当前时间。