帆软报表如何实现开始时间-结束时间-时间间隔(时,日、周、月、年)分段显示数据
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.总结
通过关联数据集的方式实现了对时间间隔的不同做出动态筛选。
如果对你有用,欢迎讨论。