再谈Cognos利用FM模型来做同比环比

很早之前已经讲过 《Cognos利用DMR模型开发同比环比》这篇文章里说的是不利用过滤器,而是采用

except (lastPeriods (-9000,[订单数据分析].[日期维度].[日期维度].[日]->?bdate?),lastPeriods (-9000,nextMember ([订单数据分析].[日期维度].[日期维度].[日]->?edate?)))+特殊函数的方式来实现的,下面我们就来采用过滤器来实现一些同比环比.

首先,在数据库设计好标准日期维度(年-季度-月-日),如下图所示

再谈Cognos利用FM模型来做同比环比_第1张图片

其次新建数据项

total([挂号量] within set parallelPeriod([门诊挂号同环比].[年月日].[年月日].[年],1,currentMember([门诊挂号同环比].[年月日].[年月日])))--同比

total([挂号量] within set parallelPeriod([门诊挂号同环比].[年月日].[年月日].[月],1,currentMember([门诊挂号同环比].[年月日].[年月日])))--环比

需要注意的是:添加过滤器

[月键]
between
?b_month?
and
?e_month?

过滤器属性设置为:自动聚合之后

PS:采用了同比环比之后,在过滤器上过多的对日期计算会有一些错误,如下图

Hierarchy expexted only的意思是 :预期只有层次

再谈Cognos利用FM模型来做同比环比_第2张图片

处理办法:由于日期key是20150101这样int类型的,而选择还是日期提示,所以在RS中可以同时使用日期提示和值提示,利用

JS,给值提示赋值,例如20150717为默认值等等,日期提示的作用只是供用户选择,用户选择事件完成后,立刻把选择的起始日

期赋值给值提示,过滤器的参数采用值提示的.过滤中采用datekey between 20150101 and  20150102 或者 monthkey 

201501 and  201502的格式

然后就没什么问题了.

分享选择日期提示后,赋值给值提示的JS:



"">


分享为日期提示,值提示设置默认值的相关代码

var firstDate = new Date();
firstDate.setMonth(firstDate .getMonth()-1);
firstDate.setDate(1); //第一天
var endDate = new Date(firstDate);
endDate.setMonth(firstDate.getMonth()+1);
endDate.setDate(0);
//alert("第一天:"+new XDate(firstDate).toString('yyyy-MM-dd')+" 最后一天:"+new XDate(endDate).toString('yyyy-MM-dd') );
//第一天:2015-05-01  最后一天:2015-05-31
pickerControlb_date.setValue(new XDate(firstDate).toString('yyyy-MM-dd'));
pickerControle_date.setValue(new XDate(endDate).toString('yyyy-MM-dd'));

效果:

再谈Cognos利用FM模型来做同比环比_第3张图片

最后需要补充一点,发布该数据包的时候,请以动态查询方式发布,这里的同比函数可能需要动态查询方式才可以起到作用

再谈Cognos利用FM模型来做同比环比_第4张图片

你可能感兴趣的:(再谈Cognos利用FM模型来做同比环比)