有一个问题在论坛里频繁出现:Framework Manager里的时间维度排序显示正确,但用lag,lead取出的结果顺序是乱的,如下图
这个问题的根源就出在日期维度的最底层day,很多时候开发人员喜欢用date格式的day做 _business key、并排序。
解决方法如下:
1、数据格式:采用字符串格式的 Day_key、Month_key和Year_key为主键、也作为first排序键
如 (20120215,201202,2012),对应的属性为 (Feb 15,2012 12:00:00AM,02,2012年)
至于怎么转换,可根据数据库类型的函数来处理,如oracle用 to_char(cur_date,'yyyymmdd')即可得到day_key
2、维度year设置:
month设置
day设置,这里day_date是日期格式,role不设置,Day_key为_business key/_memberCaption
3、排序是最关键的一步,请看图中红色部分:Always Olap commpatible,Day_key一定要设置为 First,month_key同理。
将Key设置为First
6、RS运行的效果,取2005年的后一年,即2006年
结果显示是正确的。
一般情况下,在tree里显示是正确的,也许有些开发人员没有主意到这个问题。但我们用lag,lead等多维函数计算同比、环比、累计运算的时候,就会出现数据问题。希望这个小知识点能给大家带来帮助,欢迎发表观点,Thank you!