You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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)
  • 公式分类法:
    在新列插入公式,自动给每条数据打时段标签,之后就能按标签汇总:

    =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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:14:59