1. 概述
1.1 應用場景
報表預覽時點選列標題,可對該列進行升降排序,而列標題是根據欄位橫向擴展得來的。如下圖所示:
1.2 實現思路
獲取點選列的所有值,然後在銷售員的儲存格屬性中,設定擴展後排序,銷售員根據點選列的所有值進行排序。
2. 範例
2.1 資料準備
建立普通報表,建立資料庫查詢 ds1,輸入 SQL 語句:SELECT * FROM 銷量。
2.2 設計報表
設計表格樣式如下圖所示:
儲存格屬性設定如下表所示:
注:欄位設定為匯總時擴展屬性會自動變為不擴展,可以透過儲存格左上角的灰色箭頭查看儲存格的擴展方向。
儲存格 | 資料集 | 資料欄 | 屬性 |
---|---|---|---|
A2 | ds1 | 銷售員 | 從上到下擴展,置中,其餘預設 |
B1 | ds1 | 產品 | 從左到右擴展,置中,其餘預設 |
B2 | ds1 | 銷量 | 不擴展,資料設定:匯總-求和,置中,其餘預設 |
2.3 新增動態參數
給 B1 儲存格新增一個動態參數類型的超級連結,重新命名為「排序」。
並新增兩個參數 order 和 index,order 的參數值為公式:if($order = 1, -1, 1),index 的參數值為公式:&B1,如下圖所示:
注:index 參數值為 &B1,即點選時設定 index 的值為所點選的儲存格的序號。
2.4 設定擴展後排序
選中 A2 儲存格,點選右邊屬性面板「儲存格屬性>擴展」,設定「擴展後排序」為「升冪」,輸入公式:
if(isnull($index), A2, if($order = 1, EVAL("B2[;B1:" + $index + "]"), EVAL("-1*B2[;B1:" + $index + "]")))
該公式的含義為:
order 為 1 時,按照 EVAL("B2[;B1:" + $index + "]") 獲取到的點選列的值進行升冪排列;order 為 -1 時,將獲取到的點選列的值處理為負數,然後按照負數進行升冪排列。
公式說明如下表:
公式 | 說明 |
---|---|
isnull($index) | 判斷 $index 是否為空字串。$index 在初始化時為空,點選列標題後被指派為 &B1,即所點選的儲存格的序號 注:參數為空時,以 A2 儲存格排序,可提高第一次點選標題排序時的效能 |
"B2[;B1:" + $index + "]" | 傳回 B1 儲存格擴展出來的第 $index 個值對應的 B2 儲存格值,詳情可參考:絕對層次坐标 |
EVAL() | 傳回字串運算式 |
步驟如下圖所示:
2.5 效果預覽
2.5.1 PC 端
儲存範本,點選分頁預覽,排序效果如下圖所示:
2.5.2 行動端
App 與 HTML5 端效果相同,如下圖所示:
3. 範本下載
已完成範本可參見:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\SpecialSubject\OrderReport\橫向擴展列多欄排序.cpt。
點選下載範本:橫向擴充欄多欄排序.cpt