反饋已提交

網絡繁忙

多欄動態排序

1. 概述

1.1 預期效果

設計報表時,希望有多個列可以實現點選變換升冪降冪的功能。即點選第一欄,則根據第一欄升冪或降冪排列;點選第二列,則根據第二列升冪或降冪排列。預期效果如下圖所示:

3.gif


1.2 實現思路

透過新增「動態參數」類型的 超級連結 和在儲存格 擴展後排序 中新增公式來實現,即點選資料列標題時,將該資料列所在儲存格作為參數傳遞過去,在擴展後排序公式中接收該參數,根據參數的不同,實現不同的排序。

注1:當有字串類型欄位需要一起排序時,擴展後排序的公式會有所不同。文檔用兩個範例分別進行講解。

注2:在FVS視覺化看板中可使用「當前頁面物件」、決策報表中請使用「當前決策報表物件」超級連結。

注3:當資料過多分頁時,或者在決策報表 Tab 塊中多 Tab 頁使用動態排序時,因為動態參數會重新整理整個頁面,在其他頁點選排序會重新整理跳轉回第一個頁面。

注4:擴展後排序 也可以实现多列排序,但扩展后排序有主要/次要排序之分,本文方式无主要/次要排序之分 。

2. 範例一

2.1 資料準備

建立資料集 ds1 ,新增 SQL 查詢語句:SELECT EMPID,EMPNAME,BIRTHDATE,HEIGHT FROM EMPLOYEE limit 10

2.2 報表設計

將 EMPID , EMPNAME , BIRTHDATE , HEIGHT 欄位分別拖到 A3~D3 儲存格,輸入對應標題,表格樣式如下圖所示:

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

步驟如下圖所示:


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 的值降冪排序 

步驟如下圖所示:


注:後面儲存格是跟隨第一欄擴展的,只有在頂級的左父格設定「擴展後排序」才有效。

2.5 效果預覽

2.5.1 PC 端

儲存報表,點選「分頁預覽」,效果同 1.1 節預期效果一致。

2.5.2 行動端

App 端和 HTML5 端均支援,效果如下圖所示:

4.gif

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 单元格,修改扩展后排序的公式为:IF(OR(ISNULL($asc),$asc=""),$$$,INARRAY(EVAL($asc),SORTARRAY(EVAL($asc+"[!0]")))*$a)

公式说明如下表:

公式
说明

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 进行升序、降序的排序。

OR(ISNULL($asc),$asc="")

判断参数是否为 NULL 或者空字符串

IF(OR(ISNULL($asc),$asc=""),$$$,INARRAY(EVAL($asc),SORTARRAY(EVAL($asc+"[!0]")))*$a)参数为空时返回 $$$(单元格原值),否则根据参数 $asc 指定的字段,计算当前值在该字段整列中的排名,并支持升/降序控制

注:當資料列中存在空值時,小數或整數類型的資料排序可能會失效,需要先進行過濾後在進行排序。


3.3 效果預覽

3.3.1 PC 端

儲存報表,點選「分頁預覽」,效果如下圖所示:

5.gif


3.3.2 行動端

App 端和 H5 端均支援,效果如下圖所示:

6.gif


4. 範本下載

已完成範本可參見:

%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doctw\SpecialSubject\OrderReport\多列動態排序範例一.cpt

%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doctw\SpecialSubject\OrderReport\多列動態排序範例二.cpt

點選下載範本:

多欄動態排序範例一.cpt

多欄動態排序範例二.cpt



附件列表


主題: 報表專題
  • 有幫助
  • 沒幫助
  • 只是瀏覽
  • 圖片不清晰
  • 用語看不懂
  • 功能說明看不懂
  • 操作說明太簡單
  • 內容有錯誤
中文(繁體)

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

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

不再提示

10s後關閉

獲取幫助
線上支援
獲取專業技術支援,快速幫助您解決問題
工作日9:00-12:00,13:30-17:30在线
頁面反饋
針對當前網頁的建議、問題反饋
售前咨詢
業務咨詢
電話:0933-790886或 0989-092892
郵箱:taiwan@fanruan.com
頁面反饋
*問題分類
不能為空
問題描述
0/1000
不能為空

反馈已提交

网络繁忙