从SQL方向理解BIEE中的时间序列函数

浏览: 2532

环境:BIEE 11.1.1.7...

背景:

经常有人会有疑惑,不知道BIEE中的时间序列函数的作用机理,其实跟踪其生成的SQL后,就会发现和我们自己写的类似逻辑的SQL是一致的。

举个栗子:求对于2015.10月份的去年的同期销售额。

假设时间维为日月年层级,时间维和事实表关联为日层级。那么写的SQL伪代码类似如下:

select  d.year_month,sum(f.xxx)

from fact_a  f,(select a.year_month,b.date_id from time_d  a,time_d b where a.year=b.year+1)  d

where f.time_id=d.date_Id

group by d.year_month

  • 对于SQL来说就是用辅助表换算出对应关系,然后用辅助表的时间去关联事实表,然后用展示的时间去统计汇总。
  • 对于BIEE来说就是用AGO(销售额,时间维年层级,1) ;其实BIEE也是生成了类似的语句,不过是用CTE来完成的。先生成对应的层级和关联层级的基础表,然后根据层级建立中间关系表,然后事实表和中间关系表和基础表做连接取得结果集。


举第2个栗子:求对于2015.10月的按年累计销售。例如我拖2015.10出来即展示2015.01~2015.10的销售数据。

  • 那么SQL方面我们就会写出类似下面的伪代码:

select  d.year_month,sum(f.xxx)

from fact_a  f,(select a.year_month,b.date_id from time_d  a,time_d b where a.year=b.year and a.month>=b.month)  d

where f.time_id=d.date_Id

group by d.year_month


  • 对于BIEE来说就是用TODATE(销售额,时间维年层级) ;其实BIEE也是生成了类似的语句,不过是用CTE来完成的。先生成对应的层级和关联层级的基础表,然后根据层级建立中间关系表,然后事实表和中间关系表和基础表做连接取得结果集。


那么AGO和TODATE嵌套呢?还是一样的。CTE生成基础表,根据基础表生成对应关系表,然后事实表、关系表、基础表做关联出数据。

那么AGO嵌套TODATE和TODATE嵌套AGO是一样的么?

例如AGO(TODATE(销售额,年),年,1)和TODATE(AGO(销售额,年,1),年)

想一想他们的逻辑,结果应该是一致的。

2015.10 AGO(TODATE(销售额,年),年,1)

先关联出年和月2015.10对应2015.01~2015.10,2014.10对应2014.01~2014.10,然后关系表AGO一年,就是让2015.10对应2014.10对应的2014.01~2014.10.然后和事实表关联出数据。

2015.10 TODATE(AGO(销售额,年,1),年)

先关联出年和月2015.10,2014.10,然后关系表AGO一年的关系表2015.10对应2014.10,然后TODATE逻辑2014.10对应2014.01~2014.10,那么最终的关系表和事实表关联出数据。


其它函数大体也类似,理解了其原理,就再不会有疑惑到底该怎么写公式了。

推荐 0
本文由 百分百 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册