帆软报表如何实现开始时间-结束时间-时间间隔(时,日、周、月、年)分段显示数据

帆软报表如何实现开始时间-结束时间-时间间隔(时,日、周、月、年)分段显示数据

1.效果展示

时间间隔:全部、时、日、周、月、年
帆软报表如何实现开始时间-结束时间-时间间隔(时,日、周、月、年)分段显示数据

按小时
帆软报表如何实现开始时间-结束时间-时间间隔(时,日、周、月、年)分段显示数据

按日
帆软报表如何实现开始时间-结束时间-时间间隔(时,日、周、月、年)分段显示数据

按周

帆软报表如何实现开始时间-结束时间-时间间隔(时,日、周、月、年)分段显示数据

按月

帆软报表如何实现开始时间-结束时间-时间间隔(时,日、周、月、年)分段显示数据

按年

帆软报表如何实现开始时间-结束时间-时间间隔(时,日、周、月、年)分段显示数据

如果这是你想要的,可以继续查看如何实现。

2.实现原理

1)‘时间间隔’是一个下拉框,通过取‘时间间隔’的值,切换‘数据库查询’的数据源,并使用‘关联数据集’关联在一起。

帆软报表如何实现开始时间-结束时间-时间间隔(时,日、周、月、年)分段显示数据

2)数据库查询中,不同的时间间隔使用不同的日期函数,对时间进行处理。

3)对处理后的时间分组,即可得到

3.添加数据库查询

ds0:查询原始数据,不对日期处理。month_id字段表示时间,mysql数据库时间类型为datetime。

帆软报表如何实现开始时间-结束时间-时间间隔(时,日、周、月、年)分段显示数据

select 
sum(phone_service),
sum(net_service),
sum(power_service),
sum(amount),
month_id as 时间
from zk_channel_profess
where month_id>='${user_start}' and month_id<='${user_end}'
group by 时间

ds1-h:小时

select 
sum(phone_service),
sum(net_service),
sum(power_service),
sum(amount),
date_format(month_id,'%Y-%m-%d %H') as 时间
from zk_channel_profess
where month_id>='${user_start}' and month_id<='${user_end}'
group by 时间

ds2-d:

select 
sum(phone_service),
sum(net_service),
sum(power_service),
sum(amount),
date_format(month_id,'%Y-%m-%d') as 时间
from zk_channel_profess
where month_id>='${user_start}' and month_id<='${user_end}'
group by 时间

ds3-w:周。concat()拼接函数,DATE_FORMAT()日期格式化函数,date_sub()日期减函数。由于需求,上周5到这周6为一个周。可以调整加减DAY的大小调整周开始星期数,如:+5 DAY,-1 DAY则是从星期1到星期日。

select 
sum(phone_service),
sum(net_service),
sum(power_service),
sum(amount),
concat(DATE_FORMAT(date_sub(month_id, INTERVAL dayofweek(month_id)+ 0 DAY ),'%Y-%m-%d'),'至',DATE_FORMAT(date_sub(month_id, INTERVAL dayofweek(month_id)- 6 DAY ),'%Y-%m-%d')) as 时间
from zk_channel_profess
where month_id>='${user_start}' and month_id<='${user_end}'
group by 时间;

ds4-m:月

select 
sum(phone_service),
sum(net_service),
sum(power_service),
sum(amount),
date_format(month_id,'%Y-%m') as 时间
from zk_channel_profess
where month_id>='${user_start}' and month_id<='${user_end}'
group by 时间

ds5-y:年

select 
sum(phone_service),
sum(net_service),
sum(power_service),
sum(amount),
date_format(month_id,'%Y-%m') as 时间
from zk_channel_profess
where month_id>='${user_start}' and month_id<='${user_end}'
group by 时间

4.添加关联数据集

1)如图顺序点击

帆软报表如何实现开始时间-结束时间-时间间隔(时,日、周、月、年)分段显示数据

2)如图顺序:①选中‘数据库查询’,②取‘时间间隔’下拉框(timescp)的值,给‘数据库查询’赋值条件,③点刷新按钮出现timescp,给timescp设置默认值为ds0,即查询全部数据的‘数据库查询’。最后点确定

帆软报表如何实现开始时间-结束时间-时间间隔(时,日、周、月、年)分段显示数据

5.添加时间间隔

时间间隔属性:

帆软报表如何实现开始时间-结束时间-时间间隔(时,日、周、月、年)分段显示数据

数据字典设置

帆软报表如何实现开始时间-结束时间-时间间隔(时,日、周、月、年)分段显示数据

6.给单元格赋值

点击Multil给单元格赋值,由于每种类型的month_id都 as 时间,在Multil这里时间就可以根据‘数据库查询’的不同,来给时间赋值。

帆软报表如何实现开始时间-结束时间-时间间隔(时,日、周、月、年)分段显示数据

单元格赋值
帆软报表如何实现开始时间-结束时间-时间间隔(时,日、周、月、年)分段显示数据

7.建表语句

CREATE TABLE `zk_channel_profess` (
  `phone_service` int(60) DEFAULT NULL COMMENT '电话',
  `net_service` int(60) DEFAULT NULL COMMENT '网络',
  `power_service` int(60) DEFAULT NULL COMMENT '智能',
  `amount` int(60) DEFAULT NULL COMMENT '总量',
  `month_id` datetime DEFAULT NULL COMMENT,
  KEY `index_name` (`month_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='业务统计'

8.总结

通过关联数据集的方式实现了对时间间隔的不同做出动态筛选。

如果对你有用,欢迎讨论。

上一篇:Jzoj if语句 部分代码(共20题)


下一篇:【leetcode-sql】569-571、574、577-579