冯东的博客

每天学一点,不断进取
  博客园  :: 首页  :: 新随笔  :: 订阅 订阅  :: 管理

如何让列表实现任意字段类型的排序

Posted on 2010-11-05 15:16  冯东  阅读(880)  评论(0编辑  收藏  举报

在第一次参加报表比赛时用JavaScript实现了列表基于数值型字段的排序
http://www.cognoschina.net/home/space.php?uid=652&do=blog&id=547
针对数值字段排序就是将列表中的一个数据项设置为升序,根据参数判断如果是升序就直接显示数值,如果是降序则执行-1*数值。
数据项的表达式为
IF ( ?sorttype? = 'UP' ) THEN
(
[职工人数]
)
ELSE
( -1*[职工人数] )
上述思路只能对数值型字段进行排序,而字符型的排序却无能为力,后来有网友也讨论过如何对字符型进行排序,那个网友得出用两个数据项来实现,本来想把讨论的帖子贴出来给大家分享的,可今天翻了半天之前的帖子,没有找到。
我这里来说一下实现思路
两个数据项在列表中分别设置为升序、降序。升序数据项的表达式思路如下:
IF ( ?sorttype? = 'UP' ) THEN
(
//根据参数判断要展现的列,比如 IF ( ?sortcol? = 'A' ) THEN([人员姓名])ELSE([职工人数])
)
ELSE ( null )
降序数据项的表达式思路如下:
IF ( ?sorttype? = 'DOWN' ) THEN
(
//根据参数判断要展现的列,比如 IF ( ?sortcol? = 'A' ) THEN([人员姓名])ELSE([职工人数])
)
ELSE ( null )
所以当传递的参数是UP时,起决定性作用的是升序的数据项,因为降序的数据项为null
当传递的参数为DOWN时,起决定性作用的是降序的数据项,因为升序的数据项为null

 

思路明白了后我们来看如何在ReportStudio中实现排序
我们基于Cognos式样的GO 数据仓库 (查询)包创建一个简单的list报表如下图所示:
 

其中年份、组织名称(级别3)是字符型数据,工资是数值型
切换到查询资源管理器,为列表所用查询增加两个数据项升序、降序
升序的表达式为
IF ( ?sorttype? = 'UP' ) THEN
(
IF ( ?sortcolumn? = 'A') THEN
    ( [年份] )
ELSE
    ( IF ( ?sortcolumn? = 'B' ) THEN
    ( [组织名称(级别 3)] )
ELSE
    ( [工资] ) )
)
ELSE
( null )
降序的表达式为:
IF ( ?sorttype? = 'DOWN' ) THEN
(
IF ( ?sortcolumn? = 'A') THEN
    ( [年份] )
ELSE
    ( IF ( ?sortcolumn? = 'B' ) THEN
    ( [组织名称(级别 3)] )
ELSE
    ( [工资] ) )
)
ELSE
( null )

将升序和降序放到列表中,将升序所在列设置排序操作为升序,降序所在列排序操作为降序,如下图所示:
 

为了方便演示,我们分别为sorttype和sortcolumn创建下拉框,并为其设置静态值,运行效果如下图所示:

操作视频录像上传到论坛中,下载地址http://www.cognoschina.net/club/thread-10265-1-1.html