FineReport第一次接触

报表应用学习路径

使用 FineReport 设计器设计模板,首先需要了解 FineReport 模板制作的思路,沿着其思路来了解 FineReport 报表中的所有功能。

FineReport 报表制作流程如下图所示:
在这里插入图片描述

1)新建数据连接:在制作模板之前首先要确保设计者知道存储数据的数据库类型、数据库地址、访问数据库的用户名密码,然后在 FineReport 设计器中新建一个数据连接,建立数据库与设计器的交互桥梁。

2)新建模板与数据集:数据连接创建好之后,就需要进行模板的添加了,数据连接是用于整个工程的,并没有实质的将数据从数据库中取出来,故还需要在特定模板中新建数据集,通过数据连接从数据库中取数。

3)模板设计:数据准备完成之后,就是进行模板的设计了,模板设计是 FineReport 学习过程中的重中之重,我们将模板设计分为报表设计、参数设计、图表设计和填报设计四个部分,这四个部分是 FineReport 模板的几大使用方式,报表设计是纯粹的数据展示,参数设计是动态查询数据,图表设计是使用图表来展示数据,填报设计是录入数据,将数据写入数据库中,根据实际情况确定使用哪一种使用方式,或者联合使用哪几种使用方式。

4)模板预览:模板设计完成之后,保存模板至工程目录下面,即可预览,在 Web 端查看模板效果

常用时间函数

常用时间函数

当年第一天:DATEINYEAR(TODAY(), 1)
当年最后一天:DATEINYEAR(TODAY(), -1)
 
当月第一天:DATEINMONTH(TODAY(),1) 
当月最后一天:DATEINMONTH(TODAY(),-1) 
上月最后一天:DATEINMONTH(TODAY(),1)-1
下月第一天:DATEINMONTH(TODAY(),-1)+1
 
当前日期的年份:year(today())
当前日期的月份:month(today())
当前日期的日:day(today())
 
 
当前日期前一天:datedelta(today(),-1)
当前日期的上一月:monthdelta(today(),-1)
当前日期的上一年:yeardelta(today(),-1)

格式化日期

#获得上个月年月日期:

FORMAT(DATEINMONTH(TODAY(),1)-1,'yyyy-MM')
#计算年龄公式
cast(strftime('%Y','now') as int)-cast(strftime('%Y',出生日期) as int)+1 AS 年龄

本月日期:
year(today()) + "-" + (month(today()))

上月日期:
year(today()) + "-" + (month(today()) - 1)
year(monthdelta(today(),-1)) + "-" + month(monthdelta(today(),-1))
同比:

TODATE(CONCATENATE('202301','01'),'yyyyMMdd')

ps :202309

to_char(concat('202309','01')::date - INTERVAL '1 month','yyyyMM') 
202308




参数为空实现全部查询

预期效果
使用参数进行报表数据查询时,希望当参数值为空时,点击查询后,显示报表中的全部数据。即在没有筛选条件的时候,显示报表所有内容,相当于不选值就不过滤。

1.数据集方式
因为定义数据集参数时,支持使用 FineReport 所有内置函数,所以就可以通过 IF 函数来构造判断;参数为空如何判断呢,参数为空即参数值长度为 0,所以就可以使用 Len 函数来判断参数是否为空。

组合起来,定义数据集参数的SQL语句如下:

在定义数据集参数时给它设置条件来实现参数为空选全部的效果,新建数据集 ds1,输入数据库查询语句:SELECT * FROM 订单 WHERE 1=1 ${if(len(area) == 0,“”,“and 货主地区 = '” + area + “'”)} ,此时数据集参数为「area」,设置参数默认值为华北,如下图所示:

公式中语句的注释如下:

where 1=1 表示条件永真,防止没有参数条件时,where 后面没有有效内容导致出错。

len(area)==0 表示参数「area」为空。

“and 货主地区='”+area+“'” 中间的「area」表示取参数值,‘+’ 为字符串拼接符号。

${if(len(area) == 0,“”,“and 货主地区 = '” +area + “'”)} 表示:

当参数「area」为空时,查询语句相当于:SELECT * FROM 订单

当参数「area」不为空时,查询语句相当于:SELECT * FROM 订单 WHERE 1=1 and 货主地区=‘${area}’
2.模板参数
可以通过 IF 函数来构造判断;参数为空可以使用 Len 函数来判断,参数长度为 0 时参数即为空,FineReport 过滤条件中,nofilter 表示不过滤,如此结合则得到过滤条件:

if(len( a r e a ) = = 0 , n o f i l t e r , area)==0,nofilter, area)==0,nofilter,area)

3.参数控件实际值和显示值

数据集
在这里插入图片描述
在这里插入图片描述

实际值为
实际值

显示值为
显示值

实现方式:
实际值:
在这里插入图片描述

显示值公式

VALUE("账套类型",2,4,$$$,1)+" "+ VALUE("账套类型",3,4,$$$,1)

动态分行

选中 A5 单元格,添加「条件属性」,属性选择「分页」>「行后分页」。公式条件类型选择公式,点击「定义按钮」输入公式:&A5 % $pageSize = 0。

&A5为该单元格数据的序号, p a g e S i z e 为下拉框的值,此条件表示序号为 pageSize 为下拉框的值,此条件表示 序号为 pageSize为下拉框的值,此条件表示序号为pageSize 的整数倍时行后分页,即每$pageSize行分页。步骤如下图所示:

注1:条件属性必须设置在「最左父格」上。

注2:「pageSize」需要与「下拉框控件」中「控件名称」保持一致。

在这里插入图片描述

动态列

https://blog.csdn.net/u012190388/article/details/122049834

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值