現在的需求是按月份分析不同時期的余額數據,.(報表工具:cognos report;建模工具:FM)
-------------------------------------------------------------------------------------------------------------------------------
實現效果:用戶第一次點擊報表,當前月余額,上一個月余額,去年這個月的余額。
技術點:同比環比,值提示設置默認值
step1:創建提示頁面,給值提示設置默認值,自動提交表單,界面如下
html項目都是為了寫JS
前面html處代碼為 <div style="display:none">,這里不過多描述,就是為了不顯示提示頁面。
后面html處代碼為
<script>
function getcurrentmonth()
{
var dtToday = new Date();
var nowyear=dtToday.getUTCFullYear();
var nowmonth1=dtToday.getMonth()+1;
var nowquarter="";
var nowmonth="";
if(nowmonth1>0&&nowmonth1<4)
{
nowquarter="Q1]";
}
if(nowmonth1>3&&nowmonth1<7)
{
nowquarter="Q2]";
}
if(nowmonth1>6&&nowmonth1<10)
{
nowquarter="Q3]";
}
if(nowmonth1>9&&nowmonth1<13)
{
nowquarter="Q4]";
}
if(nowmonth1>0&&nowmonth1<10)
{
nowmonth=["0",nowmonth1].join("");
}
else
{
nowmonth=nowmonth1;
}
var str1="[Presentation Layer].[報表月份].[報表月份].[月]->[all].[";
var str2= [nowyear,"]"].join("");
var str11= [str1,str2].join("");
var str4= ["[",nowyear].join("");
var str22= [str4,nowquarter].join("");
var str5= ["[",nowyear].join("");
var str6= [nowmonth,"]"].join("");
var str33=[str5,str6].join("");
str7= [str11,"."].join("");
str8= [str7,str22].join("");
str9= [str8,"."].join("");
str10= [str9,str33].join("");
return str10;
}
function init()
{
var form=getFormWarpRequest();
var mylist1= form._oLstChoicesdefaultmonth;//粗體部分為提示頁面中值提示的名稱,而不是參數名稱。
for(var i=0;i<mylist1.length;i++)
{
if(mylist1[i].value==getcurrentmonth())
{
mylist1[i].selected="true";
}
}
promptButtonFinish();
}
</script>
<body onload=" init()">
</body>
</div>
解釋:在getcurrentmonth方法中得到當前日期,獲取當前年,當前月份,然后做了一系列字符串處理,目的是為了得到這樣的值並且返回。
在數據庫中,月份的值為201201,2012年1月這樣的但是這里為什么要這樣呢?這個時候就要看同比環比時候的表達式了。
當前月為基礎對象,根據當前月延伸至上一個月,去年同月(當然也可以做當前日,當前季度,當前周,當前年的一系列分析)
當前月:
[Presentation Layer].[報表月份].[報表月份].[月]-> ?defaultmonth?
參數 ?defaultmonth?來自值提示
[Presentation Layer].[報表月份].[報表月份].[月]這個層級是來自
而不是月份code是number類型的對象,此處是memberUniqueName對象,數據格式為
[Presentation Layer].[報表月份].[報表月份].[月]->[all].[年].[年季度].[年月],所以上面的方法中做了一系列的字符串處理
目的就是利用當前日期得到符合當前月份的“【月】”的memberUniqueName值。
OK 在for循環里面遍歷select,當值相等時默認selected.
需要注意的是當前月中的參數名稱
[Presentation Layer].[報表月份].[報表月份].[月]-> ?defaultmonth?要和值提示的參數名稱保持一致。每次選擇的時候傳遞給當前月。
step2:創建報表頁面
注意頁面中的值提示參數名和提示頁面保持一致。
step3:運行
效果1
效果2
效果3:
總結:看效果1與效果2得到2013年7月和2013年6月環比結果正確,看效果1與效果3得到2013年7月和2012年7月同比結果正確,問題得到解決。