惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
量子位
大猫的无限游戏
大猫的无限游戏
Hugging Face - Blog
Hugging Face - Blog
S
SegmentFault 最新的问题
Blog — PlanetScale
Blog — PlanetScale
月光博客
月光博客
Google DeepMind News
Google DeepMind News
小众软件
小众软件
WordPress大学
WordPress大学
宝玉的分享
宝玉的分享
MongoDB | Blog
MongoDB | Blog
B
Blog RSS Feed
博客园 - Franky
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
B
Blog
博客园 - 聂微东
The GitHub Blog
The GitHub Blog
Recent Announcements
Recent Announcements
Y
Y Combinator Blog
Microsoft Security Blog
Microsoft Security Blog
雷峰网
雷峰网
Jina AI
Jina AI
酷 壳 – CoolShell
酷 壳 – CoolShell

博客园 - 冯东

Oracle问题诊断过程常用SQL Cognos10 RedHat5.4 X64 安装记录 不用JavaScript实现列表排序(利用钻取实现) 从命令行启动Cognos的方法 如何使导出的excel和报表分页设置不一样 基于Oracle触发器的报表版本保存工具 Cognos重建CSK JS屏蔽Cognos报表右键菜单 - 冯东 - 博客园 利用JS重写Cognos右键菜单 Cognos亲和力解释 Java中Split函数的问题 - 冯东 - 博客园 修改Oracle数据库的字符集 Oracle锁定选出的结果集 面试题 北漂,真的来了 通过修改Linux服务自动启动指定应用程序 Oracle自动启动(解决了Failed to auto-start Oracle Net Listene和Message 1053 not found错误) 由于系统时间修改导致Oracle启动失败 - 冯东 - 博客园 Oracle中删除包含物化视图的表空间的方法
如何让列表实现任意字段类型的排序
冯东 · 2010-11-05 · via 博客园 - 冯东

在第一次参加报表比赛时用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