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