2012/6/29:此文第二种方法有误!
今天有网友提出一个问题,怎样在报表中同时显示当天销量及上月最后一天销量,
如下图所示:
注意几个地方:
1、提示是单选
2、日期字段上有过滤器
怎么实现呢?很简单,直接在上月最后一天销量这个字段里添加如下公式即可:
ago("Base Facts"."1- Revenue",DAYOFMONTH(@{select_date}{CURRENT_DATE}))
然后在仪表盘提示上设置select_date表示变量(注:该提示同样来自于T00 Calendar Date字段,主要是为了保证类型一致,而无需转换)
OK,完成这个之后让我们进一步考虑问题,如果我这个字段不是单选怎么办?用上面的方法还可行吗?
有人说可以,用下面的公式就可以了:
ago("Base Facts"."1- Revenue",DAYOFMONTH("Time"."T00 Calendar Date"))
不过很遗憾这样是不可以的,因为AGO 函数的最后一个参数必须为常数整数。
DAYOFMONTH("Time"."T00 Calendar Date")并非一个常数整数,因为每行可能返回一个不同的值。
那怎么办呢?难道没有办法了吗?
有的,我们可以利用ago、last_period、在基于level的指标来实现。
具体步骤如下:
1、建立日期维度
2、新建一个Last Revenue指标,将其聚合规则按如下设置:
注意:将last设置在其他之后,否则性能会非常差,具体请查看SQL。另外,在11.1.1.5中,我们只有last函数可用,但是11.1.1.6中我们有类似的last_period函数可用
两者的区别就是,last忽略空值,而last_period不忽略。
3、新建一个Last Revenue Mago派生指标,其公式如下:
Ago("01 - Sample App"."F0 Sales Base Measures"."Last Revenue" , "01 - Sample App"."H0 Time"."Month" , 1)
并将其在时间维度的level设置为月
OK,设置完毕,生成报表,如下图所示:
注意:last忽略了空值