|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622 。
您需要 登录 才可以下载或查看,没有帐号?注册
x
在做Report报表时,有两种数据源,一种是从CUBE取数设计报表,第二种是直接从数据库表中取数。但设计上有点区别,在前一种,建议在设计transfermor时做好同比、环比指标。就不要考虑条件选择。
第二种方法处理上考虑建两个子查询是最好的,本月子查询取200809,上月子查询取200808,同期子查询取200709,通过UNION聚合在一个汇总查询中。区分本月、上月、同期指标值。其实Cognos就类似于SQL脚本,语法有自己的解释器。
日期转化:
1)、上月日期转化条件:(传递参数)
cast([iq116].[用户发展分析事实表].[日期标识],VARCHAR(8))=( if (substring(cast(?统计时间?,varchar(8)),5,2)='01') then ( substring(cast(?统计时间?-10000,varchar(8)),1,4)||'1201') else ( cast(?统计时间?-100,varchar(8)) ) )
2)、同期日期转换条件:(传递参数)
[iq116].[用户发展分析事实表].[日期标识]=?统计时间?-10000
或者强制转换:把数值型转换日期型数据,在reportnet验证时,报转换类型出错,但报表可以运行,是强制转换日期。
substring(cast([iq116].[用户发展分析事实表].[日期标识],varchar( 8 )),1,6) = substring(cast(_add_years(cast(?统计时间?,date),-1),varchar( 8 )),1,4)||substring(cast(_add_years(cast(?统计时间?,date),-1),varchar( 8 )),6,2)
3)、把系统日期转化上月日期:
substring(cast([iq116].[收入排名趋势分析].[时间],VARCHAR( 10 )),1,6)=substring(cast(_add_months(current_date,-1),VARCHAR ( 10 )),1,4)||substring(cast(_add_months(current_date,-1),VARCHAR ( 10 )),6,2)
4)、把字符转化成日期:
cast(cast(_add_months(current_date,-2),VARCHAR ( 10 )),date)
或者 cast('2005-09-20',date);
_add_years(cast('20050601',date),-1)
5)、选择日期条件:(传递参数)
substring(cast([iq116].[欠费分析事实表].[日期维ID],VARCHAR ( 10 )),1,6)=substring(cast(?选择日期?,VARCHAR ( 10 )),1,4)||substring(cast(?选择日期?,VARCHAR ( 10 )),5,2)
注意:不能直接把数值转换成日期,如cast(20050920,date);
但可以 substring(cast(_add_years(cast('20050601',date),-1),VARCHAR ( 10 )),1,8)||'01' --2004-06-01
也可以用数值参数:_add_years(cast(?日期参数?,date),-1)
6)、以当前系统时间作为判断
[多元专题分析模型].[日期].[CAL_DATE_ID] < cast(substring(cast(current_date,varchar(10)),1,4)||substring(cast(current_date,varchar(10)),6,2)||substring(cast(current_date,varchar(10)),9,2),integer)
该贴已经同步到 xiaoerp的微博 |
|