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

上一篇当中我们阐述了在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,结束值根据输入的月份不同。 然后下面的出勤数可以从数据库中取,关联的方法和上一章是相同的。
立即发现·数据价值

推荐阅读

→ web报表插件领导品牌FineReport → BIRT报表深度解析之BIRT中国企业级用户流失之谜 → 自定义报表之自定义参数界面 → jasperReport+Ireport和FineReport报表的对比 → 3张报表搞定财务分析 → 谈谈数据决策平台搭建的必要性 → 典型数据报表的样式和作用 → 信息化管理系统在企业中的价值 → 怎样用图表分析数据(一) → FineReport报表和水晶报表的比较
版权所有©2017 南京帆软软件有限公司 | 苏ICP备14031611号-3
返回顶部