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),设置扩展方向为「纵向」,如下图所示:
预览报表如下图所示: