排序常見問題

1. 概述

本文將介紹各類排序使用程式中遇到的問題和解決方案。

2. 排序時數值類型欄位存在空值時報錯

問題描述

若對「數值類型欄位」設定了排序,而欄位中存在空值,那麼在預覽或點選標題排序時就會出現報錯。

例如在「訂單 ID」列設定了點擊某一欄標題改變排序,其擴展後排序公式為:if($a=1,$$$,-$$$),表示根據當前列的值進行排序。如下圖所示:

此時預覽報表,點選「訂單 ID」標題,出現報錯如下圖所示:

解決方案

在排序公式中對空值指派後參與排序。

將公式寫為:if($a=1,if(len($$$)=0,min(ds1.select(訂單ID))-1,$$$),if(len($$$)=0,-(min(ds1.select(訂單ID))-1),-$$$)) 。即當欄位為空時,給其指派為(訂單 ID最小值-1),參與排序。

公式說明如下表:

公式
說明
len($$$)=0當前儲存格值為空
min(ds1.select(訂單ID))-1獲取資料集 ds1 中「訂單ID」(排序欄位)的(最小值-1)
-(min(ds1.select(訂單ID))-1) 獲取資料集 ds1 中「訂單ID」(排序欄位)的 -(最小值-1)

注:資料集函式使用方法參考資料集函式

修改公式後,點選預覽報表,效果如下圖所示:

範本下載

已完成範本可參見:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\SpecialSubject\OrderReport\數值類型欄位排序有空值.cpt

點選下載範本:數值型別欄位排序有空值.cpt

3. 非純數字橫向擴展列亂序排列

問題描述

製作一張月報表時,期望將「月份」資料欄拖入儲存格使用橫向擴展得出,但如果遇到 1月、2月 這種非純數位的擴展表頭時,使用原值排序就會導致錯亂。如下圖所示:

解決方案

使用公式 INT(REPLACE($$$,'月','')) 將「月」更換為空字串,再將字串轉換為 INT 類型。

設定完成後,儲存格的字串值就被轉換成了整數型態資料,再排序的話就會按照設定的升冪或降冪排序了,如下圖所示:

範本下載

已完成範本可參見:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\SpecialSubject\OrderReport\非純數字擴展列亂序排列的解決方案.cpt

點選下載範本:非純數字擴展欄亂序排列的解決方案.cpt

4. 排序資料中含有字串

問題描述

使用者的資料庫表預先對資料進行了處理,當有空資料時,欄位值為--;但出現了異常現象:含有字串的待排序資料,進行擴展後排序時,升冪時,--於零和負數上方;降冪時,--位於零和負數之間。

如下圖所示:

解決方案

建議先在 SQL 中對字串值進行處理,可選擇置 0 。

5. 範本資料量大造成點選排序時頁面卡頓

問題描述

參考點選 點擊某一欄標題改變排序 進行排序時,每次點選排序都需要進行頁面重新整理,若頁面資料量較大,則每次重新整理所需時間較長。

解決方案

思路:用 JS 實現不重新整理頁面進行排序功能。

若無凍結行,則可參考:JS實現不重新整理頁面進行排序功能

6. 對中文內容按照拼音排序

問題描述

對中文進行排序時,預設是按照 ASCII 碼值進行排序,使用者希望按照中文的拼音先後順序。

解決方案

需先使用 StringPinyin 函式(函式集合插件)將中文轉換成拼音,再利用擴展後排序實現。

7. 報表預覽報錯 Comparison method violates its general contract!

問題描述

使用者報表報錯Comparison method violates its general contract!,無法預覽。

問題原因

資料量過大+設定了擴展後排序導致的。

解決方案

儲存格擴展排序,資料量大會引起排序邏輯衝突的問題,會出現報錯:Comparison method violates its general contract!,建議使用進階排序。

如果資料做了匯總,沒辦法直接改成進階排序,建議把匯總放在 SQL 裏面處理,然後排序再換成進階排序。

8. 圖表分類排序

問題描述

儲存格和資料源中資料已排序,而圖表分類坐標軸資料排布亂序。

原因分析

初步定位為圖表分類坐標軸製圖時為了避免中間存在斷點,所以對優先排布系列中均存在的分類,而後排布部分序列中不存在的分類。
解決方案

將每個系列中的分類補全。

9. MySQL 中文排序無效

解決方案

如果 MySQL 資料庫無法實現按中文拼音首字母排序,需要看一下表欄位是否使用的是 UTF-8 編碼,如果使用的是 UTF-8 編碼,則需要使用 MySQL 的 convert 方法轉換成 GBK 編碼進行排序。且前提是 MySQL 安裝了 GBK 字元集,不然會報錯。

SQL 語句如下:

升冪:SELECT * FROM 銷量 order by convert(英文簡稱 using gbk)

降冪:SELECT * FROM 銷量 order by convert(英文簡稱 using gbk) desc

附件列表


主題: 報表專題
已經是第一篇
已經是最後一篇
  • 有幫助
  • 沒幫助
  • 只是瀏覽
中文(繁體)

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

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

不再提示

6s后關閉

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

反馈已提交

网络繁忙

反饋已提交

網絡繁忙