當前為10.0版本文檔,更多實例內容將在最新幫助文檔中展現,點選跳轉至 最新版幫助文檔

數據集參數實現動态列

1. 概述

1.1 預期效果

使用函數實現動态列 報表需要取出所有的數據,然後來實現動态列報表,當數據量大且所選列不是很多的情況下性能就慢了。

本文介紹另一種動态列制作方法,該方法在數據量大時可以實現 層式報表分頁查詢,從而提高報表性能。如下圖所示:

1578296538359623.gif

1.2 實現思路

通過定義數據集參數,直接選出需要展示的列,将數據列拖入到單元格中即可。

2. 示例

2.1 準備數據

新建普通報表

1)新增數據集 ds1,SQL 語句爲:SELECT ${col} FROM 銷量。設置數據集參數 「col」,默認值爲字符串類型「*」,即查詢出所有數據。如下圖所示:

1606702603363859.png

2)新增數據集 ds2,SQL 語句爲:SELECT * FROM 銷量 limit 1。通過查詢一條數據,來獲取表當中的所有字段名稱。如下圖所示:

Snag_1e38e468.png

2.2 設計報表

2.2.1 表樣設計

由於不确定用戶選擇的字段個數,因此制作模板時需要拖入所有的 6 個字段。

1)表頭行

在 A1-F1 單元格插入公式,将 $col 參數轉換成數組,A1-F1 單元格分别返回數組裏的第 1-6 個的值。

公式内容如下表所示:

單元格
公式公式說明
A1INDEXOFARRAY(split($col,","),1)

INDEXOFARRAY(array,index):返回數組array的第index個元素。

SPLIT(String1,String2):返回由String2分割String1組成的字符串數組。

注:此處參數 $col 默認值爲字符串類型,因此需要先轉換成數組才能返回正确的值。

B1INDEXOFARRAY(split($col,","),2)
C1INDEXOFARRAY(split($col,","),3)
D1INDEXOFARRAY(split($col,","),4)
E1INDEXOFARRAY(split($col,","),5)
F1INDEXOFARRAY(split($col,","),6)

操作步驟如下圖所示:

1606959492585231.png

2)表内容

在 A2-F2 單元格插入「數據列」,數據集選擇 ds1,「數據列」分别爲 #1、#2、#3、#4、#5、#6,「數據設置」爲「列表」,「擴展方向」爲「縱向」,如下圖所示:

注:「# 數字」代表數據對應的第幾列,#1 表示第一列的數據。

1606703547991884.png

2.2.2 設置報表邊框

分别選中 A2-F2 單元格,點擊右側「條件屬性」,點擊添加條件,設置「邊框屬性」爲「外部邊框」;選擇公式條件類型爲「公式」,公式内容爲:len($$$)!=0,即單元格有數據的話顯示邊框。如下圖所示:

1606959379946928.png

2.2.3 設置表頭背景

給 A1-F1 增加「條件屬性」,選擇「背景屬性」,設置爲「藍色」;選擇「邊框屬性」,設置爲「外部邊框」;選擇條件類型爲「公式」,公式内容爲:len($$$)!=0,即單元格有數據的話顯示背景和邊框。操作步驟同 2.2.2 ,設置界面如下圖所示:

Snag_1e17aacb.png

注:公式 len($$$)!=0 中,如果單元格數據類型爲字符串,則公式應爲 len('$$$')!=0 。

2.3 設置參數

點擊參數面板,點擊「全部添加」,參數面板出現可選擇的控件,選擇「下拉複選框控件」,如下圖所示:

1606706211151307.png

選中「下拉複選框控件」,控件值類型爲「字符串」,默認值爲空,數據字典類型爲「公式」,實際值輸入公式:TABLEDATAFIELDS("ds1"),如下圖所示:

1606706634270402.png

注:參數面板中下拉複選框控件的默認值必須爲空,否則無法獲取所有列。

2.4 設置點擊事件

參數爲空時,點擊「查詢按鈕」,默認查詢全部列。

點擊參數面板「查詢按鈕」,新增「點擊事件」,設置參數「a」,值爲公式TABLEDATAFIELDS("ds2"),獲取所有字段名稱。添加 JavaScript 代碼。如下圖所示:

1606707212423407.png

JavaScript 代碼如下:

var Widget = this.options.form.getWidgetByName("col"); 
var value =Widget.getValue(); //獲取控件實際值 
if(value==''||value==null){
/*獲取參數面板中的文本控件,判斷後賦*/
var area2=contentPane.parameterEl.getWidgetByName("col");
area2.setValue(a);
_g().parameterCommit();
}
else{
_g().parameterCommit();
}

2.5 效果預覽

1)PC 端

點擊「分頁預覽」,當選擇對應的一些數據列,點擊查詢就展示對應選擇列的數據,效果如下圖所示:

1606707632739771.gif

2)移動端

APP 端和 H5 端均支持,效果如下圖所示:


33333.gif

3. 已完成模板

已完成模板請參見:%FR_HOME%\webroot\WEB-INF\reportlets\doc\Parameter\DynamicCol\數據集參數實現動态列.cpt

點擊下載模板:數據集參數實現動态列.cpt

附件列表


主題: 原簡體文檔
  • 有幫助
  • 沒幫助
  • 只是瀏覽

文 檔回 饋

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

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

不再提示

9s後關閉

反饋已提交

網絡繁忙