历史版本2 :报表端-公式实现根据时间间隔取数 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

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端如图(一)

移动端预览: