1. 概述编辑
当数据库中某张表有时间字段,且几乎每分每秒都会有一条数据生成,为减少报表显示数据量,我们可以通过时间间隔来筛选数据,仅显示部分数据。
例如:在 开始时间 和 结束时间 控件内里面输入时间查询起始&结束范围,在 时间间隔 控件里输入间隔数 3600,按 3600秒(1小时)时间间隔筛选数据;
效果所示(一):
2. 实现思路编辑
通过帆软内置的函数运算,返回符合条件的内容扩展显示。
公式参考:=MAPARRAY(range(DATETONUMBER($strattime) / 1000, DATETONUMBER($endtime) / 1000, $jg), format(TODATE(item * 1000), "yyyy-MM-dd HH:mm:ss"))
3. 示例编辑
3.1 新建报表,定义控件。
新建“开始时间,结束时间”控件,控件名分别是“strattime,endtime”,返回值类型为时间型(yyyy-MM-dd HH:mm:ss)。时间间隔控件名 jg
如图所示:
3.2 单元格公式设置。
在A1单元格输入公式:=MAPARRAY(range(DATETONUMBER($strattime) / 1000, DATETONUMBER($endtime) / 1000, $jg), format(TODATE(item * 1000), "yyyy-MM-dd HH:mm:ss")),扩展方向:纵向
如图所示:
公式思路:先将“开始时间&结束时间”通过DATETONUMBER()函数转换成时间戳格式(毫秒级),在将结果除以1000(精确到秒级)后,用range()以固定的时间间隔(数字)展示过滤出麻烦条件的值,最后将结果以“yyyy-MM-dd HH:mm:ss”返回。
函数 | 解释 | 示例 |
---|---|---|
DATETONUMBER(date) | 返回自1970年1月1日00:00:00GMT经过的毫秒数 | DATETONUMBER("2008-08-08")等于1218124800000 |
RANGE(from,to,step) | 函数表示从整数from开始,以step为每一步的大小,直到整数to的一个数字序列。 | RANGE(0,5,1)返回[0,1,2,3,4,5] |
MAPARRAY(array,fn) | 把一个数组中的项目转换到另一个数组中 | MAPARRAY([3,4,2,3,6,8,7],item!=3)等于[false,true,true,false,true,true,true] |
3.3 效果预览。
保存设置,分页预览。
PC端如图(一)
移动端预览: