1. 概述
1.1 应用场景
将数据集中的数据列直接拖拽到单元格中使用时,如果想要「条件显示」某些数据列的值,那么可以使用数据集函数。
1.2 注意事项
1)参数面板中不支持使用。
2)不支持在公式编辑器中进行模拟计算。
3)不支持定义了 数据集参数 的数据集。
4)暂不支持文件数据集。
5)决策报表填报事件不支持使用数据集函数。
6)FineVis 数据可视化 插件自 1.14.1 版本起支持数据集函数。
2. tablename.select
1)概述
语法 | tablename.select(colname,筛选条件1&&筛选条件2&&......) | 筛选出数据集某列中符合条件的数据,返回结果是一个数组,相同数据不会合并 注:当仅返回一条数据时,数据类型是「字符串」而不是数组 |
---|---|---|
参数1 | tablename | 表示数据集名称,注意是「报表数据集」或者是「服务器数据集」名,而非数据库中的表名。 注:数据集名称尽量使用纯中文/纯英文,不要使用数字或特殊符号,否则函数可能失效 |
参数2 | colname | 表示列名,不区分大小写。 注:若列名为中英数字混合,建议加上引号,确保正确读取。例如ds1.select("1月产品名称") |
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"))
如果想要进行模糊查询,可通过与 Find 函数 嵌套实现,例如公式:ds1.select(产品名称,FIND("苹果",产品名称)!=0),如下图所示:
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 中不支持该函数。
FVS 可视化看板中仅表格组件支持该函数。
例如数据集 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. 注意事项
7.1 数据集函数返回的数据进行扩展
直接将数据列拖拽到单元格时会自动从上到下扩展。但是使用数据集函数获得数据为一个数组,是显示在一个单元格中的,需要另外给单元格设置扩展属性,数据才会进行扩展。
例如在单元格输入公式=ds1.group(销售员,地区=="华东",true),设置扩展方向为「纵向」,如下图所示:
预览报表如下图所示: