當前為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後關閉

反饋已提交

網絡繁忙