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 数据仓库(分析)” 数据包中的“ 年排名前 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开发报表如何隐藏列?
效果已实现,文终于此。
posted on -04-03 16:40 kingstudy 阅读(...) 评论(...) 编辑 收藏