如何将LASTMONTH函数返回的上月数据拆分为三个时段?
嘿,这个需求很常见嘛!LASTMONTH确实只能拿整月数据,但我们可以通过日期区间筛选来拆分这三个时段,我给你分不同工具场景整理了具体实现方法:
拆分上月数据为三个时段的实现方案
一、Power BI/DAX 场景
既然提到了LASTMONTH函数,先重点说DAX的实现方式,核心是用CALCULATE配合日期筛选逻辑,替代单纯的LASTMONTH:
上月1日-10日:
CALCULATE( [你的业务度量值], MONTH('日期表'[日期]) = MONTH(TODAY()) - 1, DAY('日期表'[日期]) >= 1 && DAY('日期表'[日期]) <= 10 )或者用更严谨的日期区间写法,避免跨年时月份计算出错:
CALCULATE( [你的业务度量值], DATESBETWEEN( '日期表'[日期], STARTOFMONTH(DATEADD(TODAY(), -1, MONTH)), DATE(YEAR(TODAY()), MONTH(TODAY())-1, 10) ) )上月11日-20日:
CALCULATE( [你的业务度量值], MONTH('日期表'[日期]) = MONTH(TODAY()) - 1, DAY('日期表'[日期]) >= 11 && DAY('日期表'[日期]) <= 20 )上月21日至月末:
这里推荐用ENDOFMONTH自动获取上月末,不用手动算不同月份的天数:CALCULATE( [你的业务度量值], DATESBETWEEN( '日期表'[日期], DATE(YEAR(TODAY()), MONTH(TODAY())-1, 21), ENDOFMONTH(DATEADD(TODAY(), -1, MONTH)) ) )
二、Excel 场景
如果是在Excel里处理数据,有两种简单的实现方式:
自定义筛选法:
给日期列添加筛选后,选择「日期筛选」→「自定义筛选」,分别设置:- 上月1日-10日:日期 ≥
EOMONTH(TODAY(),-2)+1且 ≤EOMONTH(TODAY(),-2)+10 - 上月11日-20日:日期 ≥
EOMONTH(TODAY(),-2)+11且 ≤EOMONTH(TODAY(),-2)+20 - 上月21日至月末:日期 ≥
EOMONTH(TODAY(),-2)+21且 ≤EOMONTH(TODAY(),-1)
- 上月1日-10日:日期 ≥
公式分类法:
在新列插入公式,自动给每条数据打时段标签,之后就能按标签汇总:=IFS(DAY(A2)>=1 && DAY(A2)<=10,"上月1-10日",DAY(A2)>=11 && DAY(A2)<=20,"上月11-20日",DAY(A2)>=21,"上月21日至月末")
三、SQL 场景
如果是从数据库提取数据,用WHERE子句锁定上月后按日筛选即可(以下以MySQL为例,其他数据库语法略有调整):
上月1日-10日:
SELECT * FROM 你的数据表 WHERE DATE_FORMAT(日期列, '%Y-%m') = DATE_FORMAT(CURRENT_DATE - INTERVAL 1 MONTH, '%Y-%m') AND DAY(日期列) BETWEEN 1 AND 10;上月11日-20日:
SELECT * FROM 你的数据表 WHERE DATE_FORMAT(日期列, '%Y-%m') = DATE_FORMAT(CURRENT_DATE - INTERVAL 1 MONTH, '%Y-%m') AND DAY(日期列) BETWEEN 11 AND 20;上月21日至月末:
SELECT * FROM 你的数据表 WHERE DATE_FORMAT(日期列, '%Y-%m') = DATE_FORMAT(CURRENT_DATE - INTERVAL 1 MONTH, '%Y-%m') AND DAY(日期列) >= 21;
内容的提问来源于stack exchange,提问作者IJ76
相关产品推荐
相关产品推荐

