筛选数据时如何自定义日期的动态范围
自定义动态范围周期
如:21天为一个周期,获取“本21天”日期范围内的数据

获取“本21天”日期范围内的数据,首先需要判断打开报表的当前日期是在哪个21天中
将时间轴划分成多个21天的时间段,比如2022年5月1日-2022年5月21日是其中某一个21天,如果将2022年5月1日-2022年5月21日作为第一个21天,那么2022年5月22日-2022年6月11日是第二个21天,2022年6月12日-2022年7月2日是第三个21天...即需要找到当前日期是在第几个21中,然后找到这个21天中的所有日期
如何找到当前日期是在第几个21中?
可以找到这样的一个规律:
2022年5月1日-2022年5月21日中的每个日期和2022年5月1日相差天数/21的结果是0.?
2022年5月22日-2022年6月11日中的每个日期和2022年5月1日相差天数/21的结果是1.?
2022年6月12日-2022年7月2日中的每个日期和2022年5月1日相差天数/21的结果是2.?
....
通过计算当前日期和2022年5月1日相差天数/21的结果的整数是多少判断在第几个21天中,然后找到计算结果的整数和根据当前日期计算出来的整数相同的所有日期
函数学习:
INT:将数字向下取整
DAYS:返回两个日期字段之间的天数
CYRDATE:返回当前日期
DATE:将数字拼接成为日期
即公式:
INT(DAYS(CURDATE(),DATE(2022,5,1))/21)==INT(DAYS(日期,DATE(2022,5,1))/21)

总结:
不管是以多少天为一个周期,可以将过去某个周期作为第一个周期,通过计算当前日期和第一个周期中第一天的相差天数/周期天数,找到取整结果都相同的日期,即当前周期中的所有日期
自定义“本月”的动态范围
如:当月26日-次月25日为一个月,获取“本月”日期范围内的数据
“本月”这样一个日期范围中包含着两个月的日期,打开报表进行数据筛选时的当前日期处于不同月份中的日期范围时,需要根据不同的规则获取“本月”的日期范围,比如:2022年5月26日-2022年6月25日
如果当前日期是2022年5月26日-2022年5月31日中的某一天,获取规则为:当月26日及之后的日期,或者是次月1-25日的日期;
如果当前日期是2022年6月1日-2022年6月25日中的某一天,获取规则为:上月26日及之后的日期,或者是当月1-25日的日期;
然后判断当前日期是2022年5月26日-31日中的某一天,还是2022年6月1日-25日中的某一天,即当前日期是>=26日,还是<=25日,再根据对应的规则获取“本月”的日期范围
函数学习:
TEXT:将日期时间字段的『 年月日,时分秒 』转化为『 YYYY MM DD,HH mm ss 』的特定格式
YEAR/MONTH/DAY:返回日期中的年份/月份/天
CYRDATE:返回当前日期
公式分析:
1、获取规则:当月26日及之后的日期,或者是次月1-25日的日期

- 当月26日及之后的日期
AND(TEXT(日期),"YYYYMM"==TEXT(CURDATE(),"YYYYMM"),DAY(日期***)>=26):***获取当月26日及之后的日期,需要满足两个条件,一个是当月,即数据中日期的年月==当前日期的年月(如都要是2022年5月),一个是26日及之后的日期,即>=26日,以上条件都需要满足用AND函数
- 次月1-25日的日期
AND(YEAR(日期)==YEAR(CURDATE()),MONTH(日期)==MONTH(CURDATE())+1,DAY(日期***)<=25):***获取次月1-25日的日期,需要满足两个条件,一个是次月,即年份相同,且数据中日期的月份==当前日期月份+1,一个是1-25日的日期,即<=25日,以上条件都需要满足用AND函数
- 当月26日及之后的日期,或者是次月1-25日的日期
OR(AND(TEXT(日期)==TEXT(CURDATE(),"YYYYMM"),DAY(日期)>=26),
AND(YEAR(日期)==YEAR(CURDATE()),MONTH(日期)==MONTH(CURDATE())+1,DAY(日期***)<=25)):***满足一种情况即可,用OR函数
2、获取规则:上月26日及之后的日期,或者是当月1-25日的日期

- 上月26日及之后的日期
AND(YEAR(日期)==YEAR(CURDATE()),MONTH(日期)==MONTH(CURDATE())-1,DAY(日期***)>=26):***需要满足两个条件,一个是上月,即年份相同,且数据中日期的月份==当前日期月份-1,一个是26日及之后的日期,即>=26日,同时满足以上条件用AND函数
- 当月1-25日的日期
AND(TEXT(日期,"YYYYMM")==TEXT(CURDATE(),"YYYYMM"),DAY(日期***)<=25):***需要满足两个条件,一个是当月,即数据中日期的年月==当前日期的年月,一个是1-25日的日期,即<=25日,以上条件都需要满足用AND函数
- 上月26日及之后的日期,或者是当月1-25日的日期
OR(AND(YEAR(日期)==YEAR(CURDATE()),MONTH(日期)==MONTH(CURDATE())-1,DAY(日期)>=26),
AND(TEXT(日期,"YYYYMM")==TEXT(CURDATE(),"YYYYMM"),DAY(日期***)<=25)):***满足一种情况即可,用OR函数
3、当前日期是>=26日,还是<=25日,再根据对应的规则获取“本月”的日期范围
***IF(DAY(CURDATE())>=26,规则1,规则2):***用IF函数判断
