反饋已提交

網絡繁忙

當前為10.0版本文檔,更多實例內容將在最新幫助文檔中展現,點選跳轉至 最新版幫助文檔

多列排序

1. 概述

1.1 预期效果

根据点击次数奇偶性排序之数值型 这篇文档中中介绍了点击数据列标题实现升序降序排序,那么,如果有多个列想实现这样的升序降序功能呢。如下图所示:

1610957591887966.gif

1.2 实现思路

通过添加「动态参数」类型的超级链接和在单元格扩展后排序中添加公式来实现,即点击数据列标题时,将该数据列所在单元格作为参数传递过去,在扩展后排序公式中接收该参数,根据参数的不同,实现不同的排序。

注:同样适用于决策报表。

2. 示例一

2.1 数据准备

新建数据集 ds1 ,添加 SQL 查询语句:SELECT EMPID,EMPNAME,BIRTHDATE,HEIGHT FROM EMPLOYEE limit 10

222

2.2 报表设计

将 EMPID EMPNAME BIRTHDATE HEIGHT 字段分别拖到 A3~D3 单元格,输入对应标题,表格样式如下图所示:

222

2.3 超级链接参数设置

分别选中 A2、C2、D2 单元格,选择右侧「超级链接」,添加「动态参数」,各单元格参数设置如下表:

注:本示例方法中,字符串类型的数据无法实现排序。

单元格
参数值类型说明
A2a公式if(a==-1,1,-1)

参数 a 表示点击一次超级链接就替换一次 a 的值,1 代表升序,-1 代表降序

参数 asc 表示要排序的单元格,日期时间类型的数据需要特殊设置

asc字符串A3
C2a公式if(a==1,-1,1)
asc字符串

tointeger(format(C3,'yyyyMMddHHmmss'))

注:若时间类型仅包含年月日,则参数为:tointeger(replace(C3,"-",""))

D2a公式if(a==1,-1,1)
asc字符串D3

步骤如下图所示:

1610960711505808.png

2.4 扩展后排序

选中 A3 单元格,在「单元格属性>扩展属性」中选择扩展后,选中升序,输入公式if($a==1,eval($asc),eval($asc)*-1)

公式说明如下表:

公式
公式说明

eval(exp) 

返回表达式 exp 计算后的结果。exp :一个表达式形式字符串

$asc返回参数 $asc 的值
if($a==1,eval($asc),eval($asc)*-1)如果参数 a 为 1,则根据 asc 的值升序排序,否则根据 asc 的值降序排序 

步骤如下图所示:

1606470304899284.png

注:后面单元格是跟随第一列扩展的,只有在顶级的左父格设置「扩展后排序」才有效。

2.5 效果预览

PC 端

保存报表,点击「分页预览」,效果同 1.1 节预期效果一致。

移动端

移动端查看报表的方式参见 报表移动端预览。App 端和 H5 端均支持,效果如下图所示:

222

3. 示例二

在示例一中,日期时间类型的数据需要特殊设置,字符串类型的数据无法实现排序。那么该如何实现数字、日期、字符串都能排序呢?

以示例一模板为例,区别主要在于扩展后排序的公式,下面进行简单讲解。

3.1 超级链接参数设置

给 A2、B2、C2、D2 单元格,均添加「超级链接>动态参数」,参数设置如下表:

单元格参数值类型说明
A2a公式if($a=-1,1,-1)

if($a=1,-1,1) 表示点击一次超级链接就替换一次 a 的值,1 代表升序,-1 代表降序

参数 asc 的值为要排序的单元格

asc字符串A3
B2a公式if($a=1,-1,1)
asc字符串B3
C2a公式if($a=1,-1,1)
asc字符串C3
D2
a公式if($a=1,-1,1)
asc字符串D3

3.2 扩展后排序

选中 A3 单元格,修改扩展后排序的公式为:INARRAY(EVAL($asc),SORTARRAY(EVAL($asc+"[!0]")))*$a

1582623512656800.png

公式说明如下表:

公式
公式说明

EVAL(exp) 

返回表达式 exp 计算后的结果。exp :一个表达式形式字符串

$asc+"[!0]"返回拼接后的字符,如参数 $asc 的值为 A3,则返回 A3[!0],即 A3 单元格扩展出来的所有值
SORTARRAY(array)

返回排过序的 array 数组

注:当数组元素存在类型不一致或者无法比较时,返回原数组。

INARRAY(co,array)返回 co 在数组 array 中的位置,如果 co 不在 array 中,则返回 0
INARRAY(EVAL($asc),SORTARRAY(EVAL($asc+"[!0]")))*$a

先用 SORTARRAY 对获取的单元格扩展的所有值进行排序,再用 INARRAY 返回当前单元格的值在排序后的所有值中的位置,再乘以参数 $a 进行升序、降序的排序。

3.3 效果预览

PC 端

保存报表,点击「分页预览」,效果如下图所示:

1610961145233650.gif

移动端

App 端和 H5 端均支持,效果如下图所示:

9FAA54A8-2864-4AF5-BF3B-FB458A228A2A.GIF

4. 模板下载

已完成模板可参见:

%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Primary\GroupReport\多列排序示例一.cpt

%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Primary\GroupReport\多列排序示例二.cpt

多列排序示例一.cpt

多列排序示例二.cpt

5. 注意事项

5.1 不支持数据为空

当字段的存储类型为整数、小数等数据类型时,不支持数据为空,否则会出现排序无效的情况,如下图所示:

1608100457502755.png

1608100457523631.gif

5.2 决策报表暂不支持 Tab 块多 Tab 动态排序

在决策报表中,当 Tab 块中多 Tab 均使用报表块设置动态排序,只有第一个 Tab 页有效,后面的 Tab 页点击排序,刷新时会返回第一个 Tab 页。效果如下图:

1608103118918748.gif

附件列表


主題: 原简体文档
  • 有幫助
  • 沒幫助
  • 只是瀏覽
  • 圖片不清晰
  • 用語看不懂
  • 功能說明看不懂
  • 操作說明太簡單
  • 內容有錯誤

文 檔回 饋

滑鼠選中內容,快速回饋問題

滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。

不再提示

10s後關閉