zoukankan      html  css  js  c++  java
  • 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开发报表如何隐藏列?

    效果已实现,文终于此。

  • 相关阅读:
    android自定义TabView实现圆角列表
    自己封装的android客户端http网络框架
    android中无限循环滑动的gallery实例
    Android软键盘遮挡布局的那些事
    Android开发艺术2之Activity的启动模式
    各位Coder看过来
    Android开发艺术1之Activity的生命周期
    H5与Android之间的交互
    Android中那些有你不知道的事
    Xmpp实现简单聊天系列 --- ②用户注册和登陆
  • 原文地址:https://www.cnblogs.com/wxjnew/p/3643382.html
Copyright © 2011-2022 走看看