报表弥补数据库不足(二)

文 | 帆软数据应用研究院 2010-07-05 14:59:07

上一篇当中我们阐述了在FineReport报表当中如何list出一个连贯的月份,在实际的应用当中,还有一种情况需要使用补足的手段。

例如下面这张考勤表:

职工考勤表

职工考勤表

可以看到这里的日期部分是1到31号的一个list。而在报表当中有两个参数,分别是让用户输入年和月。而每个月的具体的天数又是根据月份不同的,所以需要根据不同的月份来显示对应的天数。

所以这张表就需要一个稍微长一点的公式,作为list的结束数。在该公式当中要调用我们定义的年月参数,作为动态显示天数的根据。

range(1,tointeger(mid(todate(CONCATENATE($year,”-”,tointeger($month)+1,”-”,1))-1,9,2)))
从最里层开始解释一下这个公式:$year,$month是我们在报表参数处定义好的参数名称,类型都是字符串,即用户要输入的年和月。Tointeger是将字符串类型的数据转换为日期,以便能够在月份上面+1。

然后使用CONCATENATE()字符串拼接函数,将($year,”-”,tointeger($month)+1,”-”,1))中的四个字符拼成我们需要的日期格式,例如$year的值是2008,$month的值是3,那么最终我们CONCATENATE($year,”-”,tointeger($month)+1,”-”,1)获取到的是2008-4-1也就是根据输入的参数,获取到了该月份下一个月的第一天。

TODATE的作用,就是将我们拼出的日期,转换为date类型,然后-1,得到的即是当前输入月份的最后一天,例如输入的是2008,3,那么转换之后得到的值就是2008-3-31。

继续是MID函数,该函数和SUBSTR函数的功能相同,即从一个数据当中截取部分长度的字符,mid(todate(CONCATENATE($year,”-”,tointeger($month)+1,”-”,1))-1,9,2)返回的是上面的日期数据当中最后两位数据,即31。

最后range函数是和list功能相同的一个函数,起始值我们设置的1,结束值根据输入的月份不同。

然后下面的出勤数可以从数据库中取,关联的方法和上一章是相同的。

 

免费试用FineReport

阅读次数:1,808


FineReport能满足的需求有:


报表工具: 数据图表生成   企业报表平台   业务定制报表   数据填报报表   数据决策平台   炫酷数据大屏   中国式复杂报表  

功能优势: PC端/手机端    全局业务分析   权限精细管理   开源免费使用   30+种数据源   可整合ERP/OA   数据可视化     

数据分析: 数据分析模型   自助数据分析   业务主题分析   大数据运营      管理驾驶舱      0代码的操作   

行业应用: 地产项目管理   银行数据平台   金融数据中心   精益生产系统   智能制造管理   化工信息系统   零售物流自动化     
行业应用: 用户精准营销   管理信息系统   会员管理系统   销售统计分析   财务报表分析   人力资源系统   医药精细管理   ……

返回顶部