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 表达式 { , 表达式 } ] [  ] [ prefilter ] )
rank ( [ distinct ] 表达式 [ ASC|DESC ] { , 表达式 [ ASC|DESC ] } [ ] [ prefilter ] )
::= for 表达式 { , 表达式 }|for report|auto返回选定数据项的排名值。排序顺序为可选;在默认情况下,采用降序(DESC)。如果两个或更多行排名相同,那么排名值的序列中会有一个缺值(也称为 Olympic 排名)。“”定义函数的作用域。“at”选项定义聚合级别,只能在关系数据源上下文中使用。Distinct 是与产品的较早版本兼容的替换表达式。空值排名最末。此函数出现在“GO 数据仓库(分析)”数据包中的“2005 年排名前 10 位的零售商”示样报表中。重点2:在列表的主查询中新建一个明细过滤器 注意:过滤器应用于自动聚合之后(自动聚合是指报表会根据维度自动的汇总当前的度量值)   表达式内容为========================================================

if(
(ParamDisplayValue('sortmethod'))='1'
or
(ParamDisplayValue('sortmethod'))='按订单金额排名'
)
then
('按订单金额排名')
else
(
'按订单笔数排名'
)

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

必选的,所以默认值为1,用做查询中。但是经过测试,报表运行中值提示参数的值其实是显示值中文

的,所以无论是1还是中文名称都显示为中文名称,第一次默认之后,在以后就按照中文名称判断了。

效果就成了报表上方的一句话:

 上面部分的红色字体都来自于:参数值 动态传参。重点4:报表是如何实现怎么排序的?这里也可以说是一个重点,大家可以看到排序的地方就是在新建数据项‘排名’的时候了,有这么一个代码rank ( [订单金额] for report)/rank ( [订单笔数] for report)这里对报表进行了排序操作但是如果想要报表出现排序后的效果,从大到小,从多到少的顺序,那么上面的代码必须被执行,所以必须让‘排名’数据项在报表中出现,才可以实现排名,下面我们把排名从报表中移除看一下:从上面可以看到 ,排序顺序变了,可能是按照默认的升序出现了,那么当是海里数据的时候,第一的效果就看不到了。所以在做按指定指标排序的时候,排序数据项必须拖入报表中,才可以起到排序的作用,当然如果不需要出现排名这一列的话,隐藏这一列即可。Cognos  reportstudio 中如何隐藏列?请参考: 效果已实现,文终于此。  

相关内容推荐