1. 概述
1.1 版本
報表伺服器版本 | 功能變更 |
---|---|
11.0 | - |
1.2 預期效果
使用函式實現動態欄 報表需要取出所有的資料,然後來實現動態欄報表,當資料量大且所選欄不是很多的情況下效能就慢了。
本文介紹另一種動態欄製作方法,該方法在資料量大時可以實現 層式報表分頁查詢,進而提高報表效能。如下圖所示:
1.3 實現思路
透過定義資料集參數,直接選出需要展示的欄,將資料欄拖入到儲存格中即可。
2. 範例
2.1 準備資料
建立普通報表
1)新增資料集 ds1,SQL 語句為:SELECT ${col} FROM 銷量。設定資料集參數 「col」,預設值為字串類型「*」,即查詢出所有資料。如下圖所示:
2)新增資料集 ds2,SQL 語句為:SELECT * FROM 銷量 limit 1。透過查詢一筆資料,來獲取表當中的所有欄位名稱。如下圖所示:
2.2 設計報表
2.2.1 表樣設計
由於不確定使用者選擇的欄位個數,因此製作範本時需要拖入所有的 6 個欄位。
1)表頭行
在 A1-F1 儲存格插入公式,將 $col 參數轉換成陣列,A1-F1 儲存格分別傳回陣列裏的第 1-6 個的值。
公式內容如下表所示:
儲存格 | 公式 | 公式說明 |
---|---|---|
A1 | INDEXOFARRAY(split($col,","),1) | INDEXOFARRAY(array,index):傳回陣列 array 的第 index 個元素。 SPLIT(String1,String2):傳回由 String2 分割 String1 組成的字串陣列。 由於參數 $col 預設值為字串類型,因此需要先轉換成陣列才能傳回正確的值。 |
B1 | INDEXOFARRAY(split($col,","),2) | |
C1 | INDEXOFARRAY(split($col,","),3) | |
D1 | INDEXOFARRAY(split($col,","),4) | |
E1 | INDEXOFARRAY(split($col,","),5) | |
F1 | INDEXOFARRAY(split($col,","),6) |
操作步驟如下圖所示:
2)表內容
在 A2-F2 儲存格插入「資料欄」,資料集選擇 ds1,「資料欄」分別輸入 #1、#2、#3、#4 、#5 、#6 ,「資料設定」為「列表」,「擴展方向」為「縱向」,如下圖所示:
注:「# 數字」代表資料對應的第幾欄,#1 表示第一欄的資料。
2.2.2 設定報表邊框
分別選中 A2-F2 儲存格,點選右側「條件屬性」,點選新增條件,設定「邊框屬性」為「外部邊框」。選擇公式條件類型為「公式」,公式內容為:len($$$)!=0,即儲存格有資料的話顯示邊框。如下圖所示:
2.2.3 設定表頭背景
給 A1-F1 增加「條件屬性」,選擇「背景屬性」,設定為「藍色」;選擇「邊框屬性」,設定為「外部邊框」。選擇條件類型為「公式」,公式內容為:len($$$)!=0,即儲存格有資料的話顯示背景和邊框。操作步驟同 2.2.2 節,設定介面如下圖所示:
2.3 設定參數
點選參數面板,點選「全部新增」,參數面板出現可選擇的元件,選擇「下拉複選框元件」,如下圖所示:
選中「下拉複選框元件」,元件值類型為「字串」,預設值設定為空,資料字典類型為「公式」,實際值輸入公式:TABLEDATAFIELDS("ds2"),如下圖所示:
注:參數面板中下拉複選框元件的預設值必須為空,否則無法獲取所有欄。
2.4 設定點選事件
參數為空時,點選「查詢按鈕」,預設查詢全部欄。
點選參數面板「查詢按鈕」,新增「點選事件」,設定參數a,值為公式TABLEDATAFIELDS("ds2"),獲取所有欄位名稱。新增 JavaScript 程式碼。如下圖所示:
JavaScript 程式碼如下:
2.5 效果查看
1)PC 端
點選「分頁預覽」,當選擇對應的一些資料欄,點選查詢就展示對應選擇欄的資料,效果如下圖所示:
2)行動端
APP 端和 HTML5 端均支援,效果如下圖所示:
3. 已完成範本
點選下載範本:資料集參數實現動態欄.cpt