反饋已提交

網絡繁忙

多欄動態排序

一、概述

  1. 使用場景:設計報表時,希望有多個欄可以實現點擊變換升冪降冪的功能。

  2. 實現思路:透過新增【動態參數】型別的【A10-00 超連結設定】和在儲存格【擴展後排序】中新增公式來實現,即點擊資料欄標題時,將該資料欄所在儲存格作為參數傳遞過去,在擴展後排序公式中接收該參數,根據參數的不同,實現不同的排序。

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

注2:同樣適用於決策報表。

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

二、範例一

1
資料準備。
  1. 建立資料集 ,新增 SQL 查詢語句:SELECT EMPID,EMPNAME,BIRTHDATE,HEIGHT FROM EMPLOYEE limit 10。如下圖所示。


image.png

 

2
報表設計。
  1. 將 【EMPID 】,【EMPNAME 】,【BIRTHDATE 】,【HEIGHT 】欄位分別拖曳到 【A3:D3】 儲存格,輸入對應標題,表格樣式如下圖所示。


image (1).png

 

3
新增超連結動態參數。
  1. 分別選中 A2、C2、D2 儲存格,選擇右側【超連結】,新增【動態參數】,各儲存格參數設定如下表。步驟如下圖所示。

注:本範例方法中,字串型別的資料無法實現排序。

 

儲存格

參數

值型別

說明

A2

a

公式

if(a==-1,1,-1)

參數 【a】 表示點擊一次超連結就更換一次 【a】 的值,【1】 代表升冪,【-1】 代表降冪 參數 【asc】 表示要排序的儲存格,日期時間型別的資料需要特殊設定。

asc

字串

A3

C2

a

公式

if(a==1,-1,1)

asc

字串

tointeger(format(C3,'yyyyMMddHHmmss')) 注:若時間型別僅包含年月日,則參數為:tointeger(replace(C3,"-",""))

D2

a

公式

if(a==1,-1,1)

asc

字串

D3

 

image (2).png

 

4
設定擴展後排序。
  1. 選中 A3 儲存格,在【儲存格屬性】→【擴展屬性】中選擇擴展後,選中升冪,輸入公式:if(a==1,eval(asc),eval($asc)*-1)。

  2. 公式說明如下表所示。

  3. 步驟如下圖所示。

注:後面儲存格是跟隨第一欄擴展的,只有在頂級的左父格(即最左父格)設定【擴展後排序】才有效。

 

公式

說明

eval(exp) 

傳回表式 【exp】 計算後的結果。【exp】 :一個表式形式字串。

$asc

傳回參數 【$asc】 的值。

if(a==1,eval(asc),eval($asc)*-1)

如果參數 【a】 為 1,則根據 【asc】 的值升冪排序,否則根據 【asc】 的值降冪排序 。

 

image (3).png

 

5
效果預覽。
  1. PC 端:儲存報表,點擊【分頁預覽】,效果如下圖1所示。

  2. 行動端:App 端和 HTML5 端均支援,效果如下圖2所示。


9.gif

 

8.gif

 

三、範例二

  1. 在範例一中,日期時間型別的資料需要特殊設定,字串型別的資料無法實現排序。下面將透過擴展後排序的公式來實現數字、日期、字串的排序。

1
新增超連結動態參數。
  1. 給 A2、B2、C2、D2 儲存格,均新增【超連結】→【動態參數】,參數設定如下表所示。

儲存格

參數

值型別

說明

A2

a

公式

if($a=-1,1,-1)

【if($a=1,-1,1)】 表示點擊一次超連結就更換一次 【a】 的值,【1】 代表升冪,【-1】代表降冪。 參數 【asc】 的值為要排序的儲存格。

asc

字串

A3

B2

a

公式

if($a=1,-1,1)

asc

字串

B3

C2

a

公式

if($a=1,-1,1)

asc

字串

C3

D2

a

公式

if($a=1,-1,1)

asc

字串

D3

 

2
設定擴展後排序。
  1. 選中 A3 儲存格,修改擴展後排序的公式為:INARRAY(EVAL(asc),SORTARRAY(EVAL(asc+"[!0]")))*$a 。公式說明如下表。

注:當資料欄中存在空值時,小數或整數型別的資料排序可能會失效,此時可將公式修改為:INARRAY(EVAL(asc),SORTARRAY(EVAL(asc+"[!0]{len("+asc+")>0}")))*a 。透過 【{len("+$asc+")>0}】 條件過濾出不為空的資料進行排序即可。

 

公式

說明

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

 

image (4).png

 

3
效果預覽。
  1. PC 端:儲存報表,點擊【分頁預覽】,效果如下圖1所示。

  2. 行動端:App 端和 H5 端均支援,效果如下圖2所示。


21.gif

 

1640329029650916.gif

 

四、範本下載

附件列表


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

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

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

不再提示

10s後關閉

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

反馈已提交

网络繁忙