帆軟報表之 排序(總結) 二


3.4 條件屬性設置

原模板中使用了&來產生序號,會發現重新排序后順序被打亂了,需要使用條件屬性重新生成序號。在序號(A4單元格)中增加新值條件屬性,選擇公式,在公式中輸入:row()-3。如下圖所示:
0
3.5 總結
以上便設置好了,預覽即可看到上圖效果。可以看出,在數據列的高級處進行排序需要進行很復雜的公式進行還原,而用擴展后排序只需要引用對應的單元格即可。
具體的模板設置可參考:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\SpecialSubject\OrderReport\擴展后排序.cpt。
在線查看示例效果請點擊 Order_2.cpt
根據點擊次數奇偶性排序之數值型
 1. 描述
在進行排序的時,很多時候您可能想實現根據點擊的次數進行升降序排序,也就是說點擊第一次點擊標題升序排序,再次點擊就降序,以此類推,而不是通過選擇升序進行升序排列,選擇降序進行降序排列。
2. 思路
擴展后排序可知,可以根據參數值的不同來決定升序還是降序,這里也可以此思路進行實現,定義一個參數,如果參數值為1的時候,就升序,參數值為0的時候,按照數據列的負數進行升序排序,即數據列降序。
注:該方法只適用於排序數據列數據類型為數字型的字段,如果數據類型為字符型,請查看根據 點擊次數奇偶性排序之字符型
下面以兩個簡單示例進行介紹:示例一,模板根據訂單ID進行升序降序排列,第一次點擊訂單ID的時候升序,再次點擊時降序;示例二,同理,模板根據貨運費進行升序降序排列,第一次點擊貨運費的時候升序。
注:不管是按照什么字段進行排序,必須要把排序公式寫在其父格的單元格設置里。
3. 示例一
3.1 打開模板
打開模板:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Primary\DetailReport\Details.cpt。
3.2 超級鏈接設置
選中A1單元格,右鍵選擇超級鏈接,添加一個動態參數,增加一個動態參數a,參數值為公式if($a = 1, 0, 1),如下圖:
0
注:公式的含義是,如果參數a的值為1的時候,點擊該超級鏈接,則將a的值變為0,如果a的值不為1的時候,點擊該超級鏈接,將a的值變為1。
3.3 排序設置
排序設置有兩種設置方式, 高級排序擴展后排序,下面分別介紹着兩種方式的設置方式。
1)方法一:高級排序
雙擊A2單元格,選擇高級,在排序順序處選擇升序,公式值為if($a==1,$$$,-$$$),如下圖:
0
 
注:公式的意義是,如果動態參數值為1,那么就將訂單ID按照訂單ID升序排序,如果不為1,就按照訂單ID的負數進行升序排序,即按照訂單ID進行降序排序,由於只有數值型數據才有負數,字符型數據沒有負數,故該方法只適用於數值型字段排序。
2)方法二:擴展后排序
選中A2單元格,右擊單元格>擴展屬性中的擴展后選擇升序,值為公式=if($a==1,A2,-A2),如下圖:
0
注:公式意義同上,此處是根據單元格進行排序,所以公式中輸入的是單元格,不是數據列名字。
3.4 效果查看
不論是根據高級排序設置,還是擴展后排序設置,設置的效果如下:
0
 
0
已完成模板請參照%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\SpecialSubject\OrderReport\Order_4.cpt
在線查看示例效果請點擊 Order_4.cpt
4. 示例二
4.1 打開模板
打開模板:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Primary\DetailReport\Details.cpt。
4.2 超級鏈接設置
按照運貨費進行排序:選中F1單元格,右鍵選擇超級鏈接,添加一個動態參數,增加一個動態參數a,參數值為公式if($a = 1, 0, 1),如下圖:
0
注:公式的含義是,如果參數a的值為1的時候,點擊該超級鏈接,則將a的值變為0,如果a的值不為1的時候,點擊該超級鏈接,將a的值變為1。
4.3 排序設置
排序設置有兩種設置方式, 高級排序擴展后排序,下面分別介紹着兩種方式的設置方式。
1)方法一:高級排序
雙擊A2單元格,選擇高級,在排序順序處選擇升序,公式值為if($a==1,$運貨費,-$運貨費),如下圖:
0
另:由於此處排序是設置數據列的排序,則公式中輸入的是數據列的名稱。
警告:這里要注意,不管是按照什么字段進行排序,必須要把排序公式寫在其父格的單元格設置里。如:要按照貨運費進行排序,該字段的父格是訂單ID,則需要雙擊訂單ID來進行高級->排列順序的設置 ,這樣才會實現效果,若在各自的單元格上設置是不能實現效果的。
2)方法二:擴展后排序
選中A2單元格,右擊單元格>擴展屬性中的擴展后選擇升序,值為公式=if($a==1,F2,-F2),如下圖:
0
 
4.4 效果查看
不論是根據高級排序設置,還是擴展后排序設置,設置的效果如下:
0
 
0
根據點擊次數奇偶性排序之字符型
1. 描述
在進行排序的時,很多時候您可能想實現根據點擊的次數進行升降序排序,而不是通過選擇升序進行升序排列,選擇降序進行降序排列,如果是數值型字段,可根據 根據點擊次數奇偶性排序之數值型中的方法實現,那么如果是字符型字段呢,又該如何實現?
2. 思路
通過超級鏈接實現升序降序兩張模板之間的相互調用,每點擊一次就切換到另一張模板。
下面以一個簡單示例進行介紹。
也可以在一張模板里實現,具體參考 字符型數據動態排序
3. 示例
3.1 打開模板
打開模板:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Primary\DetailReport\Details.cpt。
3.2 修改數據集
升序模板
將原來的數據集修改為:SELECT * FROM 訂單 order by 客戶ID,根據字符型字段客戶ID對數據進行升序排序,另存為Order_A.cpt:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\SpecialSubject\OrderReport\字符型數據升序排序.cpt。
降序模板
將原來的數據集修改為:SELECT * FROM 訂單 order by 客戶ID desc,根據客戶ID對數據進行降序排序,另存為Order_B.cpt:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\SpecialSubject\OrderReport\字符型數據降序排序.cpt。
3.3 超級鏈接設置
右擊客戶ID表頭所在單元格B1,選擇超級鏈接,點擊網絡報表,在網絡報表的路徑處選擇模板,字符型數據升序排序.cpt和字符型數據降序排序.cpt的設置分別如下:
字符型數據升序排序.cpt:
0
注:鏈接打開於處選擇當前窗口
字符型數據降序排序.cpt:
0
注:鏈接打開於處選擇當前窗口
3.4 效果查看
打開字符型數據升序排序.cpt,點擊分頁預覽,看到的是按照客戶ID的升序排序,直接點擊客戶ID,則會按照客戶ID進行降序排序,再次點擊客戶ID,則會又按照客戶ID進行升序排序。
0
 
已完成模板,可參見:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\SpecialSubject\OrderReport\字符型數據升序排序.cpt和
%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\SpecialSubject\OrderReport\字符型數據降序排序.cpt。
在線查看示例效果請點擊 Order_A.cpt
多列排序
1. 描述
上一節中介紹了點擊數據列標題實現升序降序排序,那么,如果有多個列想實現這樣的升序降序功能呢。
即點擊訂單ID是根據訂單ID升序排序,再點擊訂單ID則根據訂單ID降序排序,接着點擊運貨費則根據運貨費升序排序,以此類推。
2. 思路
由上一節的擴展后排序來實現,即點擊數據列標題時,將該數據列所在單元格作為參數傳遞過去,在擴展后排序公式中接收該參數,根據參數的不同,實現不同的排序,下面詳細介紹。
3. 示例
3.1 數據准備
添加數據庫查詢,SQL語句為:SELECT EMPID,EMPNAME,BIRTHDATE,HEIGHT FROM EMPLOYEE limit 10,如下圖所示:
0
3.2 報表設計
報表設計如下,將EMPID,EMPNAME,BIRTHDATE,HEIGHT字段分別拖到A3,B3,C3,D3單元格,如下圖:
0
3.3 超級鏈接參數設置
1)選中A2單元格,右鍵,選擇超級鏈接,添加一個動態參數,增加2個參數,如下圖:
0
參數a的意義在於,點擊一次超級鏈接就替換一次a的值,那么在下面進行排序就可以根據a的值來決定是升序還是降序。
參數asc是要排序的單元格,注意:它的值類型是字符串
2)選中D2單元格,進行相同操作,如下圖:
0
3)選中C2單元格,因為C3是時間類型的原因,因此動態參數設置如下:
0
其中asc參數為:tointeger(format(C3,'yyyyMMddHHmmss'))
若是時間類型僅包含年月日,則參數為:tointeger(replace(C3,"-",""))
注:此處雖然填的是公式,但參數類型仍是字符串
第二列是字符串類型,無法動態排序
3.4 擴展后排序
選中A3單元格,在單元格屬性>擴展屬性中選擇擴展后,選中升序,輸入公式if($a==1,eval($asc),eval($asc)*-1),如下圖:
0
 
3.5 效果查看
點擊分頁預覽,效果如下:
0
已完成模板,詳情可參照:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Primary\GroupReport\多列排序.cpt
4. 移動端效果
app效果:
0
h5效果:
0
橫向擴展列多列排序
1. 描述
當模版要實現多列點擊排序,而多列的列名是根據字段橫向擴展出來的,使用 擴展后排序中的方法分別設置order參數的值無法實現橫向擴展列中的點擊列排序。
0
2. 實現方法
獲取點擊列的所有值,然后在銷售員的單元格屬性中,設置擴展后排序,銷售員根據點擊列的所有值進行排序。
3. 示例
3.1 綁定數據列
將數據列拖拽至單元格,並設置單元格的屬性,設置位置及方法如下圖:
0
按照上圖方法,將下表中對應數據列拖入到單元格中(擴展設置在右下面板的【擴展方向】,數據設置在右上面板【數據設置】):
注:字段設置為匯總時擴展屬性會自動變為不擴展,可以通過單元格左上角的灰色箭頭查看單元格的擴展方向。
單元格
數據集
數據列
屬性
A2
ds1
銷售員
  從上到下擴展,居中,其余默認
B1
 ds1 
產品
  從左到右擴展,居中,其余默認
B2
ds1
銷量
  不擴展,數據設置:匯總|求和,居中,其余默認
3.2 超級鏈接設置
給B1單元格,添加超級鏈接-動態參數,新增1個動態參數為“排序”,並添加兩個參數名order和index,order的參數值為公式:if($order == 1, 0, 1),index的參數值為公式:&B1,如下圖所示:
0
注:超級鏈接-動態參數中的index為&B1,即點擊時設置index的值為所點擊的單元格的序號。
3.3 排序方法的設置
右擊銷售員所在列(A2單元格),右擊單元格>擴展屬性,在設計器右側下方的單元格屬性面板中設置擴展后排序為升序並且公式為:if($order == 1, EVAL("B2[;B1:" + $index + "]"), EVAL("-B2[;B1:" + $index + "]")) 。如下圖所示:
0
注:該公式的含義為:order為1時,按照EVAL("B2[;B1:" + $index + "]")獲取到的點擊列的值進行升序排列;order為0時,將獲取到的點擊列的值處理為負數,然后按照負數進行升序排列。
具體的模板設置可參考:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\SpecialSubject\OrderReport\橫向擴展列多列排序.cpt。
在線查看示例效果請點擊 Order_6.cpt
非純數字擴展列亂序排列的解決方案
1. 描述
報表的展示效果直接關乎到用戶的體驗和使用!比如一張月報表,如果是按照1月-12月的順序展示出來,用戶查閱便一目了然,但有時候卻事與願違。遇到這種非純數字的擴展表頭時,使用原值排序就會導致錯亂。此時,我們可以使用公式排序, 如圖所示:
原值排序:
0
公式排序:
0
2. 實現思路
我們可以通過有關公式(函數)對表頭進行處理后再排序!
例如:INT(REPLACE($$$,'',''))或 SWITCH($$$,'','')
3. 解決方案
新建數據集ds1: SQL為SELECT * FROM sale_month where type ='實際' 
選中B1單元格,選擇單元格屬性表-擴展屬性,擴展方向為橫向,擴展后選擇升序並輸入公式,有兩個公式可選:
0
公式①:INT(REPLACE($$$,'月','')) ,將單元格內容中的'月'替換成'',再將其轉換成整型。比如:10月變成10
公式②:SWITCH($$$,'1月',1,'2月',2,'3月',3,'4月',4,'5月',5,'6月',6,'7月',7,'8月',8,'9月',9,'10月',10,'11月',11,'12月',12) 
SWITCH()函數的用法,這里就不詳述了,請參考 Switch函數
設置完成后,單元格的字符串值就被轉換成了整型數據,再排序的話就會按照設置的從大到小(從小到大)有序排列了!
保存模板,預覽效果如上。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM