Cognos開發自定義排序規則的報表和自定義排名報表


場景:有一個簡單的銷售數據分析,可以按照日期,按照商品類型來分析訂單筆數和訂單金額。

目的:用戶可以自定義查看按照不同指標排序的數據,用戶可以查看按照不同指標排名的前N名數據

一:功能及效果展示

效果1:進入報表,顯示按默認指標排名的指定名次的數據(默認顯示按訂單金額排名的前5名)

效果2:改變排名規則,改變排名取值(例如:根據訂單筆數排名,取前6,可以看到數據顯示正常)

效果3:再次改變排名規則,報表自動刷新(例如:按訂單金額排序,排名值不變,可以看到數據顯示正常)

 

 二:報表開發技術重點

重點1:在列表的主查詢中新建 '排名' 數據項

 

內容如下:

==========================================================

if(?sortmethod?=1)
then
(
rank ( [訂單金額] for report)
)
else
(
rank ( [訂單筆數] for report)
)

==========================================================

下面解釋一下rank函數

rank ( 表達式 [ ASC|DESC ] { , 表達式 [ ASC|DESC ] } [ at 表達式 { , 表達式 } ] [ <for 選項> ] [ prefilter ] )
rank ( [ distinct ] 表達式 [ ASC|DESC ] { , 表達式 [ ASC|DESC ] } [ <for 選項>] [ prefilter ] )
<for 選項> ::= for 表達式 { , 表達式 }|for report|auto
返回選定數據項的排名值。排序順序為可選;在默認情況下,采用降序(DESC)。如果兩個或更多行排名相同,那么排名值
的序列中會有一個缺值(也稱為 Olympic 排名)。“<for 選項>”定義函數的作用域。“at”選項定義聚合級別,只能在關系數
據源上下文中使用。Distinct 是與產品的較早版本兼容的替換表達式。空值排名最末。此函數出現在“GO 數據倉庫(分析)”
數據包中的“2005 年排名前 10 位的零售商”示樣報表中。
重點2:在列表的主查詢中新建一個明細過濾器
 
注意:過濾器應用於自動聚合之后(自動聚合是指報表會根據維度自動的匯總當前的度量值)
重點3:友情提示的地方采用文本,文本值來源自參數值,隨着變化而變化
新建文本,選擇文本來源
 
  表達式內容為
========================================================

if(
(ParamDisplayValue('sortmethod'))='1'
or
(ParamDisplayValue('sortmethod'))='按訂單金額排名'
)
then
('按訂單金額排名')
else
(
'按訂單筆數排名'
)

========================================================

解釋一下if中的第一個條件:因為值提示數據來源是靜態選項集合,無法指定使用值和顯示值,但又是

必選的,所以默認值為1,用做查詢中。但是經過測試,報表運行中值提示參數的值其實是顯示值中文

的,所以無論是1還是中文名稱都顯示為中文名稱,第一次默認之后,在以后就按照中文名稱判斷了。

效果就成了報表上方的一句話:

 上面部分的紅色字體都來自於:參數值 動態傳參。

重點4:報表是如何實現怎么排序的?

這里也可以說是一個重點,大家可以看到排序的地方就是在新建數據項‘排名’的時候了,有這么一個代碼

rank ( [訂單金額] for report)/rank ( [訂單筆數] for report)

這里對報表進行了排序操作

但是如果想要報表出現排序后的效果,從大到小,從多到少的順序,那么上面的代碼必須被執行,所以必須

讓‘排名’數據項在報表中出現,才可以實現排名,下面我們把排名從報表中移除看一下:

從上面可以看到 ,排序順序變了,可能是按照默認的升序出現了,那么當是海里數據的時候,第一的效果就看不到了。

所以在做按指定指標排序的時候,排序數據項必須拖入報表中,才可以起到排序的作用,當然如果不需要出現排名這一

列的話,隱藏這一列即可。

Cognos  reportstudio 中如何隱藏列?請參考:Cognos開發報表如何隱藏列?

效果已實現,文終於此。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM