反馈已提交

网络繁忙

报表端-公式实现根据时间间隔取数

  • 文档创建者:zsh331
  • 历史版本:4
  • 最近更新:Catqiu 于 2022-10-09
  • 1. 概述

    1.1 问题描述

    当数据库中某张表有时间字段,且几乎每分每秒都会有一条数据生成,为减少报表显示数据量,可以通过时间间隔来筛选数据,仅显示部分数据。

    例如:在「开始时间」和「结束时间」控件内里面输入时间查询起始&结束范围,在 时间间隔 控件里输入间隔数 3600,按 3600秒(1小时)时间间隔筛选数据,如下图所示:

    1.2 实现思路

    通过帆软内置的函数运算,返回符合条件的内容扩展显示。

    公式参考:=MAPARRAY(range(DATETONUMBER($starttime) / 1000, DATETONUMBER($endtime) / 1000, $jg), format(TODATE(item * 1000), "yyyy-MM-dd HH:mm:ss"))

    2. 示例

    2.1 新建报表

    新建「开始时间」和「结束时间」控件,控件名分别是「starttime」「endtime」,返回值类型为时间型(yyyy-MM-dd HH:mm:ss),时间间隔控件名 jg

    如图所示:

    2.2 单元格公式设置

    在 A1 单元格输入公式:=MAPARRAY(range(DATETONUMBER($starttime) / 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]

    2.3 效果预览

    保存设置,分页预览。

    2.3.1 PC 端

    详情参见本文 1.1 节。

    2.3.2 移动端

    如下图所示:

    附件列表


    主题: 报表专题
    已经是第一篇
    已经是最后一篇
    • 有帮助
    • 没帮助
    • 只是浏览
    中文(简体)

    鼠标选中内容,快速反馈问题

    鼠标选中存在疑惑的内容,即可快速反馈问题,我们将会跟进处理。

    不再提示

    10s后关闭

    联系我们
    在线支持
    获取专业技术支持,快速帮助您解决问题
    工作日9:00-12:00,13:30-17:30在线
    页面反馈
    针对当前网页的建议、问题反馈
    售前咨询
    采购需求/获取报价/预约演示
    或拨打: 400-811-8890 转1
    qr
    热线电话
    咨询/故障救援热线:400-811-8890转2
    总裁办24H投诉:17312781526
    提交页面反馈
    仅适用于当前网页的意见收集,帆软产品问题请在 问答板块提问前往服务平台 获取技术支持