場景:有一個簡單的銷售數據分析,可以按照日期,按照商品類型來分析訂單筆數和訂單金額。
目的:用戶可以自定義查看按照不同指標排序的數據,用戶可以查看按照不同指標排名的前N名數據
一:功能及效果展示
效果1:進入報表,顯示按默認指標排名的指定名次的數據(默認顯示按訂單金額排名的前5名)
效果2:改變排名規則,改變排名取值(例如:根據訂單筆數排名,取前6,可以看到數據顯示正常)
效果3:再次改變排名規則,報表自動刷新(例如:按訂單金額排序,排名值不變,可以看到數據顯示正常)
二:報表開發技術重點
重點1:在列表的主查詢中新建 '排名' 數據項
內容如下:
==========================================================
if(?sortmethod?=1)
then
(
rank ( [訂單金額] for report)
)
else
(
rank ( [訂單筆數] for report)
)
==========================================================
下面解釋一下rank函數
rank ( [ distinct ] 表達式 [ ASC|DESC ] { , 表達式 [ ASC|DESC ] } [ <for 選項>] [ prefilter ] )
<for 選項> ::= for 表達式 { , 表達式 }|for report|auto


if(
(ParamDisplayValue('sortmethod'))='1'
or
(ParamDisplayValue('sortmethod'))='按訂單金額排名'
)
then
('按訂單金額排名')
else
(
'按訂單筆數排名'
)
========================================================
解釋一下if中的第一個條件:因為值提示數據來源是靜態選項集合,無法指定使用值和顯示值,但又是
必選的,所以默認值為1,用做查詢中。但是經過測試,報表運行中值提示參數的值其實是顯示值中文
的,所以無論是1還是中文名稱都顯示為中文名稱,第一次默認之后,在以后就按照中文名稱判斷了。
效果就成了報表上方的一句話:
上面部分的紅色字體都來自於:參數值 動態傳參。
重點4:報表是如何實現怎么排序的?
這里也可以說是一個重點,大家可以看到排序的地方就是在新建數據項‘排名’的時候了,有這么一個代碼
rank ( [訂單金額] for report)/rank ( [訂單筆數] for report)
這里對報表進行了排序操作
但是如果想要報表出現排序后的效果,從大到小,從多到少的順序,那么上面的代碼必須被執行,所以必須
讓‘排名’數據項在報表中出現,才可以實現排名,下面我們把排名從報表中移除看一下:
從上面可以看到 ,排序順序變了,可能是按照默認的升序出現了,那么當是海里數據的時候,第一的效果就看不到了。
所以在做按指定指標排序的時候,排序數據項必須拖入報表中,才可以起到排序的作用,當然如果不需要出現排名這一
列的話,隱藏這一列即可。
Cognos reportstudio 中如何隱藏列?請參考:Cognos開發報表如何隱藏列?
效果已實現,文終於此。