FineReport学习

一》数组

二》函数

21》日期时间:
DATEDELTA():返回一个日期前后一定天数的日期,同理MONTHDELTA()【月份】和YEARDELTA()【年份】
语法:Datedelta(“日期”,-+数字)【返回-+数字天数后的日期】
DATEINMONTH():返回在某一个月当中第几天的日期,同理DATEINWEEK()和DATEINYEAR()
语法:Dateinmonth(“日期到天数”,±数字)【返回日期月[+]正数的第几天的日期,[-]返回日期月的倒数第几天的日期】【日期不写到天数会识别不到日期参数会出错】
DATESUBDATE():返回两个日期之间的时间差,同理FATADIF()
语法:Datesubdate(“第一个日期”,“第二个日期”,“d”)【返回两个日期之间相差的天数,"h"返回相差的小时】
WEEKDAY():返回某个日期是星期几,星期天为0
语法:weekday(“日期”)

STRFTIME(‘%Y’,订购日期) 取出订购日期中的年份
STRFTIME(‘%m’,订购日期) 取出订购日期中的月份
now():当前时间
month(时间):取出月份
Year(时间):取出年份
22》字符串:
left(‘字符串文本’,个数):根据指定的字符数,返回文本字符串中第一个或前几个字符
FIND():从指定的索引处开始,返回第一次出现的指定子字符串在此字符串中的索引。
语法:Find(“只定的子字符串”,“字符串”,指定的索引)【索引从1开始不是从0开始,没有指定索引默认从1开始】
FORMAT():按指定的规则将对象格式化为字符串
语法:Format(“2011-12-23”,“yyMMdd”)【把2011-12-23格式化为20111223形式的字符串】 Format(“1.07654”,“#0.0元”)【把1.07654格式化为1.1元形式的字符串】
LEN():返回文本字符数或者数组的长度
语法:Len(“fan ruan”)【返回字符串的长度【字符串中有空格也算一个长度】】
SPLIT():分割字符串为数组
语法:Split(“字符串”,“分隔符”)【按照分隔符对字符串进行分割】
Split(12345," ")【空分隔符的话会每一个都分开【1,2,3,4,5】】
REPLACE():用其他文本来代替原始文本中的部分内容
语法:Replace(“原字符串内容”,“被替换的内容”,“替换的内容”)
Replace(“原字符串内容”,被替换的起始索引,被替换的内容的长度,“替换的内容”)

SORT(A1)等同于=COUNT(UNIQUEARRAY(A1[!0]{A1 > $A1})) + 1, 默认降序排列, 如需要升序, 则传递参数false
SEQ():返回数值,在整个报表执行过程中,返回该函数被第几次执行了。

RANK(number,ref,order):返回一个数在一个数组中的秩。(如果把这个数组排序,该数的秩即为它在数组中的序号。)
Number所求秩的数。(可以是Boolean型,true=1,false=0)
Ref可以是数组,引用,或一系列数,非实数的值被忽略处理(接受Boolean型,true=1,false=0)。
Order指定求秩的参数,非零为升序,零为降序
备注
RANK对重复的数返回相同的秩,但重复的数影响后面的数的秩,比如,在一组升序排列的整数中,如果5出现了2次,并且秩为3,那么6的秩为5(没有数的秩是4).
示例
A1:A5=6,5,5,2,4
RANK(A1,A1:A5,1)即6的秩为5.
RANK(3,1,2,“go”,3,4,1)=3,"go"被忽略。

UNIQUEARRAY(array):去掉数组中重复的元素

{A2} 可以获取当前页中 A2 单元格扩展出来的所有值

【23】逻辑函数

IF(): 根据条件是否满足,返回不同结果
语法:if(条件,[满足条件返回的值],[不满足条件返回的值])【可以嵌套】

SEITCH():根据表达式的值返回不同结果
语法:Switch(判断的表达式,表达式的值,“返回的值”,表达式的值,“返回的值”…)

【24】数组函数
GREPARRAY():过滤数组
语法:Greparray([数组],过滤条件)

INARRAY():返回值在数组中的位置
语法:Inarray(“返回值/查找的值”,[数组])

INDEXOFARRAY():返回数组的第N个元素
语法:Indexofarray([数组],N【第几个元素】)

JOINARRAY():将数组以特定分隔符组成字符串
语法:Joinarray([数组],“分隔符”)

MAPARRAY():把数组中的项目以特定规则进行转化
语法:Maparray([数组],规则)

SORTARRAY(array):返回数组array排过序的数组。当数组元素存在类型不一致或者无法比较时,返回原数组。
语法:SORTARRAY([3,4,4,5,1,5,7])返回[1,3,4,4,5,5,7].

item会对数组进行遍历
例如:maparray([123,234,334,455],left(item,1)) 结果是:1,2,3,4
数组中元素是字符串的要加双引号

【25】报表函数
SQL():在公式中调用sql查询函数返回结果
语法:sql(“连接名”,“SQL语句”,列号,行号)【行号也可不写,返回一列的值】

VAIUE():从数据集中查找符合条件的值
语法:value(“数据集的名称”,列号,行号)【行号也可不写,返回一列的值】
value(“数据集的名称”,列号,列号,条件)【例如:value(“FRDemo”,1,2,“牛奶”) 返回该数据集中的第一列,并满足第二列的值为牛奶的第一列的值】
VALUE(tableData,targetCol,orgCol,element)返回tableData中第targetCol列中的元素,这些元素对应的第orgCol列的值为element。
报表函数 map,col,row,fields,tabledatafields,value,tabledatas

1.map
Map(object, string, int, int)
其中四个参数依次为:索引值,数据集的名字,索引值所在列序号,返回值所在列序号。
后面两个参数也可以用列名代替。
功能
根据数据集的名字,找到对应的数据集,找到其中索引列的值为key所对应的返回值。
Map函数首先检索模板数据集,再检索服务器数据集
MAP(A1, “ds1”, “公司名称”, “供应商ID”)返回ds1数据集,“公司名称”列中值为A1那条记录中“供应商ID”列的值。
MAP(A1, “ds1”, 2, 1)返回ds1数据集,第2列中值为A1那条记录中第1列的值。
MAP(“妙生”, “ds1”, “公司名称”, “供应商ID”)返回ds1数据集,“公司名称”列中值为“妙生”那条记录中“供应商ID”列的值。
MAP(“妙生”, “ds1”, 2, 1)返回ds1数据集,第2列中值为“妙生”那条记录中第1列的值。

2.col
COL()返回当前单元格的列号,必须使用于条件属性中
如果当前单元格是A5,在A5中写入"=col()“则返回1。
如果当前单元格是C6,在C6中写入”=col()"则返回3。

3.fields
FIELDS(connectionName,tableName):返回tableName这个表中的所有字段名。
示例:
以我们提供的数据源FRDemo为例:
FIELDS(“FRDemo”,“CUSTOMER”)等于CUSTOMERID,CUSTOMERNAME,CITY,COUNTRY,TEL,DISTRICT

4.tabledatafields
TABLEDATAFIELDS(tableData):返回tableData中所有的字段名。
注: 先从报表数据集中查找,然后再从服务器数据集中查找,返回的是tableData的列名组成的数组。
示例:
以我们提供的数据源FRDemo为例
新建数据集ds1:SELECT * FROM CUSTOMER
TABLEDATAFIELDS(“ds1”)等于CUSTOMERID,CUSTOMERAME,CITY,COUNTRY,TEL,DISTRICT。

5.Value
VALUE(tableData,col,row)返回tableData中行号为row,列号为col的值。 tableData:tableData的名字,字符串形式的。 row:行号。 col:列号。
注: 先从私有数据源中查找,然后再从公有数据源中查找,返回的是tableData的符合条件的值。
示例:
VALUE(“country”,5,3)等于South America。
VALUE(“Simple”,8,3)等于jonnason。
VALUE(tableData,col)返回tableData中列号为col的一列值。
VALUE(tableData,targetCol, orgCol, element)返回tableData中第targetCol列中的元素,这些元素对应的第orgCol列的值为element。

6.tabledatas
TABLEDATAS():返回报表数据集和服务器数据集名字。
示例:服务器数据集有:ds1,ds2,ds3;报表数据集有dsr1,dsr2,则:
TABLEDATAS()等于[dsr1,dsr2,ds1,ds2,ds3]。
而TABLEDATAS(0)返回服务器数据集名字;TABLEDATAS(1)返回报表数据集名字;
TABLEDATAS(0)等于[ds1,ds2,ds3]。
TABLEDATAS(1)等于[dsr1,dsr2]。

注意:

1)字符参数有英文单引号 ‘${adce}’,数字参数没有英文单引号 ${adce}。其中 adce 为参数。
2)参数值的引用格式为参数前面加 $ 符号,如$adce。
3)模板参数与全局参数重名时,采用模板参数。

35、在分页预览时,想要取得当前页面 可以采用$page_number

1.序号的添加

无论是组内序号还是普通的序号只需在放置序号的单元格中插入公式seq(),接着再为这个单元格设置左父格即可。

2.页内合计与总计

总计:和excel相同,为sum(D2),表式D2单元格内扩展出来的值的总和。

页内合计:sum({D2}),表示对当前页的D2单元格扩展出来的值求和。需设置左父格。

3.隔行变色

把鼠标放在单元格上,右击,选中条件属性,点击“+”号,属性一栏选中背景选项—>,然后再点击选择背景颜色—>再选择当前行。

条件选择为公式:row()%2==0

4.每页显示固定行数

和隔行变色的原理相同,点击条件属性,点击分页选项,然后条件依旧选择为公式:&A5 % 5 = 0

5.参数为空选择全部

只需要在where语句后面加上:SELECT * FROM 表名称 where 1=1 ${if(len(para) == 0,“”,“and column in ('” + para+ “')”)}

IF语句在sql中还是挺好用的,能够解决很多不是正常传參的情况。但是思考怎么用的时候还是比较费脑筋。

6.添加新值

有些总数据库中查询到的字段为空,如果不进行设置的话,运行的时候表格中有一块j空缺总觉得很突兀,这时我们就可以根据需要来赋予值为空的单元格一个新的值。同样右击条件属性,选择新值选项,并在之后的单元格中填入想要赋予的新值,比如‘0’或者‘无数据’。

然后条件依旧选择公式并输入:len($$$) = 0代表当前单元格值的长度为0

7.添加链接并传递参数

为了更加方便直观的分析数据,经常进行由总到分的查看方式,比如我统计了某个时间段内每天注册了多少个用户,但是我又想知道这一天内注册的用户主要分布在那个地方,这个时候就可以添加超链接,将当前的日期传过去,就可以看到想看的内容了。

实现的步骤为:在想要添加超链接的单元格右击选择超级链接,然后选择你要跳转的报表或者网页,接着选择打开方式(新窗口或者当前窗口),然后再下面的参数名称后面填上对应的值($$$代表当前单元格的值)即可。

8.参数生成控件问题

当进入报表上方的控件区域时,右面的参数面板会自动检测到你的sql语言中包含哪几个参数,并以标签的形式展现出来,只要点击相应的标签就会自动生成对应的表单和控件,所有的参数都在一个表单中。

控件的类型可以在生成之后选择,如果选择错了也没关系,把名称改掉之后,右面的参数面板又会自动生成改动之前的参数。如果想为参数生成的控件添加数据,来源可选择数据集或者单元格,也可以自定义显示值和实际值。

9.几个花费较长时间写的sql

9.1 生成一个参数,可根据参数筛选出某项为空的列表、值不为空的列表和全部列表

纠结了半天,用的if判断传入的参数 0代表为空 1代表不为空 2代表全部,sql语句如下:

SELECT * ,DATE_FORMAT(create_date,‘%Y-%m-%d’) dd FROM gb_wx_log WHERE

1=1 ${IF(status == 0,“and( ex3 IS NULL or ex3 =‘’) “,””)}

${IF(status==1 ,“and ex3 IS NOT NULL AND ex3!=‘’”,“”)}

${IF(status==2 ,“”,“”)}

9.2 根据某个字段含有的内容来统计这个内容有多少条记录,并将内容显示出来,sql语句如下:

SELECT COUNT(1) ,

(${IF(len(content)=0,“content”,“'”+content+“'”)}) as name ,

DATE_FORMAT(create_date,‘%Y-%m-%d’) dd

FROM gb_user_sel_history WHERE content IS NOT NULL

AND 1=1 ${IF(len(content)=0,“”," and content like ‘“+content+”%’")

GROUP BY

${IF(len(content)=0,“content”,“'”+content+“'”)}

ORDER BY COUNT(content) DESC LIMIT 100 ;

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值