1. 概述
1.1 應用場景
将數據集中的數據列直接拖拽到單元格中使用時,如果想要「條件顯示」某些數據列的值,那麽可以使用數據集函數直接将數據集中的部分數據取至報表模板中。
1.2 注意事項
在使用數據集函數時,數據集名稱不能出現特殊符号,例如 - 。
參數面板中不支持使用數據集函數。
決策報表填報事件不支持使用數據集函數。
2. tablename.select
1)概述
語法 | tablename.select(colname,篩選條件1&&篩選條件2&&......) | 篩選出數據集某列中符合條件的數據,返回結果是一個數組,相同數據不會合并。 注:當僅返回一條數據時,數據類型是「字符串」而不是數組。 |
---|---|---|
參數1 | tablename | 表示數據集名稱,注意是「報表數據集」或者是「服務器數據集」名,而非數據庫中的表名。 注:數據集名稱盡量使用純中文/純英文,不要使用數字或特殊符号,否則函數可能失效。 |
參數2 | colname | 表示列名,不區分大小寫。 |
2)注意事項
篩選條件中的判斷既可以使用單等号,也可以使用雙等号;
字符串也同時可以使用單引号或者是雙引号,對結果均沒有影響;
tablename.select() 與 sql() 的區别主要在於 tablename.select() 是從數據集取數,sql() 是從數據庫取數,不需要先定義一個數據集。詳情參見 SQL 函數
在公式中,以 0 開頭的字符串在匹配判斷時,例如:ds1.select(colname,ID="003") 結果會返回對應 ID 爲 0、03、003…… 的結果。若只希望返回 003 ,可以使用 EXACT 來做匹配判斷。例如:ds1.select(colname,exact(ID,"003"))
3)示例
例如數據集 ds1 取出内置 FRDemo 數據庫中的「S産品」表,分别在單元格中輸入以下公式:
公式 | 結果 |
---|---|
在 A2 單元格中輸入=ds1.select(産品名稱) | 返回數據集 ds1 産品名稱列中的所有産品名稱。 |
在 B2 單元格中輸入=ds1.select(産品名稱,庫存量>20&&訂購量 > 30) | 返回數據集 ds1 庫存量大於 20 且訂購量大於 30 的産品。 |
在 C2 單元格中輸入=ds1.select(産品名稱,供應商="1"||庫存量>30) | 返回數據集 ds1 供應商爲1或者庫存量大於 30 的産品。 |
3. tablename.group
1)概述
語法 | tablename.group(colname,篩選條件 1 && 篩選條件 2,升降序) | 篩選出數據集某列中符合條件的數據,若相鄰數據相同則進行合并,還可以按照該列進行升降序排列。 |
---|---|---|
參數1 | tablename | 表示數據集名稱,注意是「報表數據集」或者是「服務器數據集」名,而非數據庫中的表名。 |
參數2 | colname | 表示列名,不區分大小寫。 |
參數3 | 升降序 | 爲布爾值,true 表示升序,false 表示降序。 注:若使用升降序參數,那麽必須寫篩選條件參數,若沒有篩選條件,可以用 true 或者空格代替:例如=ds1.group(銷售員,true,false)或者=ds1.group(銷售員, ,false) |
如數據集 ds1 取出内置 FRDemo 數據庫中的「銷量」表:
公式 | 說明 |
---|---|
在單元格中輸入=ds1.group(銷售員) | 返回數據集 ds1 銷售員列中的值,并且相鄰數據若相同會進行合并。 |
在單元格中輸入=ds1.group(銷售員,地區 = "華東"&&銷量 > 200) | 返回數據集 ds1 華東地區銷售總額超過 200 的銷售員,并且相鄰數據若相同會進行合并。 |
在單元格中輸入=ds1.group(銷售員,true,false)或=ds1.group(銷售員,,false) | 返回數據集 ds1 銷售員列中的值,并且其中只要數據相同就會進行合并,結果爲降序排列,中間的參數爲過濾條件,若沒有條件,可以用空替代或者使用 true 。 |
在單元格中輸入=ds1.group(銷售員,地區=="華東") | 返回數據集 ds1 華東地區的銷售員,并且相鄰數據若相同會進行合并。 |
在單元格中輸入=ds1.group(銷售員,地區=="華東",true) | 返回數據集 ds1 華東地區的銷售員,并且會合并所有相同項,結果爲升序排列。 |
4. tablename.select(#數字)
1)概述
語法 | tablename.select(#數字) | 返回數據集中的行号或者對應列數據 |
---|---|---|
參數1 | tablename | 表示數據集名稱,注意是「報表數據集」或者是「服務器數據集」名,而非數據庫中的表名。 |
參數2 | 數字 | 表示列号。 如果tablename.select(#0)則輸出數據表行号數組(數據條數) tablename.select(#1)則輸出數據庫表中第一列的數組數據 |
2)注意事項
填報場景下 ds1.select(#0) 這個公式如果聯動計算有異常,需要檢查父子格關系。例如出現下圖所示的計算結果時:
remoteEvaluate(String) 方法不支持 tablename.select 函數。
3)示例
例如數據集 ds1 取出内置 FRDemo 數據庫中的「銷量」表:
公式 | 結果 |
---|---|
在單元格中輸入=ds1.select(#0) | 返回數據集中的行号 |
在單元格中輸入=ds1.select(#1) | 返回數據集中對應列數據 |
5. tablename.value(row,col/colname)
1)概述
語法 | tablename.value(row,col/colname) | 獲取數據集 ds1 中某行某列的值。 |
---|---|---|
參數1 | tablename | 表示數據集名稱,注意是「報表數據集」或者是「服務器數據集」名,而非數據庫中的表名。 |
參數2 | row | 表示行号 |
參數3 | col/colname | 表示列号或者列名 |
2)注意事項
報表的圖表标題不支持該函數。
決策報表裏的圖表塊不支持該函數。
JavaScript 中不支持該函數。
例如數據集 ds1 取出内置 FRDemo 數據庫中的「銷量」表:
公式 | 說明 |
---|---|
在單元格中輸入=ds1.value(3,2) | 返回數據集 ds1 中第 3 行第 2 列的值 |
在單元格中輸入=ds1.value(3,"銷售員") | 返回數據集 ds1 中第 3 行銷售員列的值 |
6. 應用
6.1 根據不同條件選擇使用哪個字段
在單元格中輸入如下公式:
=if(條件,ds1.group(customerid),ds2.group(customerid))
并設置其擴展屬性爲從上到下。
公式說明:
公式 | 說明 |
---|---|
=if(條件,ds1.group(customerid),ds2.group(customerid)) | 條件爲真,單元格使用數據集 ds1 中的 customerid 列,否則使用 ds2 中的 customerid 列 。 |
6.2 對數據集函數返回的數據再進行運算
在單元格輸入公式=sum(ds1.select(銷量)),返回數據集 ds1 銷量列的總和。
sum 求和公式也可以換用其他如 count、max 等。
7. 對數據集函數返回的數據進行擴展
直接将數據列拖拽到單元格時會自動從上到下擴展。但是使用數據集函數獲得數據爲一個數組,是顯示在一個單元格中的,需要另外給單元格設置擴展屬性,數據才會進行擴展。
例如在單元格輸入公式=ds1.group(銷售員,地區=="華東",true),設置擴展方向爲「縱向」,如下圖所示:
預覽報表如下圖所示: