文章目录
- 概要
- 整体架构流程
- 技术名词解释
- 技术细节
- 小结
概要
博主接触FineReport帆软报表有一段时间了,正好前几天做了一个任务日历的需求,把每天完成的任务量直观的展示在日历上,方便管理者更好的监控各业务的完成情况,做完后想着和大家分享一下博主的心得体会。项目整体效果如下图所示:
整体架构流程
项目整体使用 FineReport v11.0 里的决策报表和普通报表进行设计,其中报表数据集的编写可能涉及到数据库 SQL 语句,还有在报表中使用的相关函数。
技术名词解释
如果是刚接触帆软报表的同学可以点击下方链接,查看官方文档说明
- FineReport v11.0
- 决策报表
- 数据集
技术细节
-
添加模板参数
(1)点击“+”添加三个模板参数 a,b,c,参数名字可以按照大家习惯取,默认值分别设置为公式:FORMAT(TODAY(), "yyyy-MM")
,FORMAT(MONTHDELTA(TODAY(),1), "yyyy-MM")
,FORMAT(MONTHDELTA(TODAY(),-1), "yyyy-MM")
,点击确定。
-
打开设计器后,在顶部的导航栏点击"文件"->“新建决策报表(F)”,如下图所示:
-
随后点击"新建空白模板",如下图所示:
-
然后在空白模板上方的功能区找到新建Tab块(空白块->Tab块,鼠标放上去按住左键拖到下方空白处),如下图所示:
-
双击新建好的Tab块页面,进入编辑设计,然后点击上面的"+"添加标题,如下图所示:
-
拖动"新建Tab块"的旁边功能按钮为每个Tab块添加"报表块",其它几个Tab块同样的操作,如下图所示:
-
双击“报表块”,进入报表设计页面,页面设计参考图如下:
将不需要显示的行和列进行隐藏后,最后界面如下:
-
在页面合适位置合并几列单元格用来放年月,然后点击合并后的单元进行如下设置:
-
在年月的左边,我们要设置点击切换到上月的链接,切换下月同理,如图所示:
-
点击编辑进行”条件属性“设置,其中”背景“设置为图片:
-
“超级链接类型"设置为"动态参数”:
参数 | 值 |
---|---|
a | $c |
c | FORMAT(MONTHDELTA($c+“-”+“01”,-1), “yyyy-MM”) |
b | FORMAT(MONTHDELTA($c+“-”+“01”,1), “yyyy-MM”) |
右边单元格的超级链接设置同理,只不过将参数值改成下表:
参数 | 值 |
---|---|
a | $b |
b | FORMAT(MONTHDELTA($b+“-”+“01”,1), “yyyy-MM”) |
c | FORMAT(MONTHDELTA($b+“-”+“01”,-1), “yyyy-MM”) |
-
在星期的上面添加一行,其中B4单元格插入公式:
DAY(DATEINMONTH((E2 + "-01"), -1))
。
右边放上周几对应的数字,方便计算日期:
-
C7单元格插入公式:
IF(WEEKDAY(E2 + "-01") = 1, 1, "")
,这里的主要目的是根据当前月的1日是不是周一,是的话就显示“1”,不是则显示为空。
D7单元格插入公式:IF(LEN(C7) <> 0, C7 + 1, IF(WEEKDAY(E2 + "-01") = 2, 1, ""))
,目的同上。
E7单元格插入公式:IF(LEN(D7) <> 0, D7 + 1, IF(WEEKDAY(E2 + "-01") = 3, 1, ""))
,目的同上。
F7单元格插入公式:IF(LEN(E7) <> 0, E7 + 1, IF(WEEKDAY(E2 + "-01") = 4, 1, ""))
,目的同上。
G7单元格插入公式:IF(LEN(F7) <> 0, F7 + 1, IF(WEEKDAY(E2 + "-01") = 5, 1, ""))
,目的同上。
H7单元格插入公式:IF(LEN(G7) <> 0, G7 + 1, IF(WEEKDAY(E2 + "-01") = 6, 1, ""))
,目的同上。
I7单元格插入公式:IF(LEN(H7) <> 0, H7 + 1, IF(WEEKDAY(E2 + "-01") = 0, 1, ""))
,目的同上。 -
下面C8单元格插入公式:
format(IF(LEN(C7) = 0, "", eval("E" + "2") + "-" + C7), "yyyy-MM-dd")
,目的是计算C7对应的日期,因为下面任务计划全部要根据这个日期进行数据查询。
D8单元格插入公式:format(IF(LEN(D7) = 0, "", eval("E" + "2") + "-" + D7), "yyyy-MM-dd")
,目的同上。
E8单元格插入公式:format(IF(LEN(E7) = 0, "", eval("E" + "2") + "-" + E7), "yyyy-MM-dd")
,目的同上。
F8单元格插入公式:format(IF(LEN(F7) = 0, "", eval("E" + "2") + "-" + F7), "yyyy-MM-dd")
,目的同上。
G8单元格插入公式:format(IF(LEN(G7) = 0, "", eval("E" + "2") + "-" + G7), "yyyy-MM-dd")
,目的同上。
H8单元格插入公式:format(IF(LEN(H7) = 0, "", eval("E" + "2") + "-" + H7), "yyyy-MM-dd")
,目的同上。
I8单元格插入公式:format(IF(LEN(I7) = 0, "", eval("E" + "2") + "-" + I7), "yyyy-MM-dd")
,目的同上。 -
然后最关键的来了,添加你想要监控的任务指标,通过查询数据集结果,然后设置单元格属性和过滤条件(这里C9、C10、C11的过滤日期根据上面C8的值进行对应),目的让该单元格只显示当前日期的任务。其它的同理。
-
下面C12单元格插入公式:
eval("I" + "7") + C4
,目的是根据根据上一行的周日日期加上对应的时间间隔来计算这个日期。后面同理。
-
关键点来了,C27格开始,我们就要判断日期是否结束了,插入公式:
IF((eval("I" + "22") + C4) > eval("B" + "4"), "", (eval("I" + "22") + C4))
,其中C4单元格插入公式为:DAY(DATEINMONTH((E2 + "-01"), -1))
。后面的同理。 -
最后,给每个日期单元格增加一个条件属性,添加一个背景属性,其作用是当前日期显示颜色背景,然后公式条件如下:
FORMAT(E2 + "-" + $$$, "yyyy-MM-dd") = format(TODAY(), "yyyy-MM-dd")
。其它单元格同理。
小结
提示:这里可以添加总结
例如:
提供先进的推理,复杂的指令,更多的创造力。