同环比时间范围计算说明
这份文档用于说明系统在计算“同比、环比、周环比、季度环比”时,如何确定本期、同期、上期的时间范围。文档只描述业务口径,不涉及具体代码实现。
1. 先确定“本期”时间范围
同环比计算的第一步,不是直接找上期,而是先把“本期”定准。
1.1 如果用户问的是明确日期段
例如:
- 2024年1月1日到2024年1月31日
- 2024年6月9日到2024年6月13日
这类场景,本期就直接采用用户给出的时间范围。
1.2 如果用户问的是“今年 / 本月 / 本季度 / YTD / MTD / QTD”
这类场景,本期通常不会机械地取到自然结束日,而是会结合数据实际更新到哪一天来确定。
例如,假设今天是 2025年9月10日,数据实际只更新到 2025年9月9日:
- “今年”按 2025年1月1日 到 2025年9月9日 计算
- “本月”按 2025年9月1日 到 2025年9月9日 计算
- “YTD”也按 2025年1月1日 到 2025年9月9日 计算
- “MTD”也按 2025年9月1日 到 2025年9月9日 计算
这样做的目的,是保证同环比比较的是“已经有数据的天数”,避免把未来还没有发生的数据算进本期。
1.3 “今年”和“YTD”并不总是一样
如果某些表本身就存在未来日期的数据,例如全年目标表,那么:
- “今年”可以是 2025年1月1日 到 2025年12月31日
- “YTD”仍然只到当前可比较日期,例如 2025年9月9日
可以理解为:
- “今年”强调自然年份口径
- “YTD”强调“截至当前已发生进度”的口径
2. 同比如何确定“同期”
同比的核心规则很简单:
- 默认把本期整体向前平移 1 年
- 平移后,尽量保持“起止位置一致”
2.1 完整自然周期的同比
例1:本期是完整自然月
- 本期:2024年3月1日 到 2024年3月31日
- 同期:2023年3月1日 到 2023年3月31日
例2:本期是完整自然年
- 本期:2024年1月1日 到 2024年12月31日
- 同期:2023年1月1日 到 2023年12月31日
2.2 不完整周期的同比
例3:本期是月初到某一天
- 本期:2024年6月1日 到 2024年6月23日
- 同期:2023年6月1日 到 2023年6月23日
例4:本期是某一天
- 本期:2024年1月2日
- 同期:2023年1月2日
2.3 闰年处理
如果本期结束在月末,则同期也按上一年对应月份的月末处理。
例5:
- 本期:2024年2月1日 到 2024年2月29日
- 同期:2023年2月1日 到 2023年2月28日
这条规则的目的,是保证“整月对整月”。
3. 环比如何确定“上期”
环比的规则比同比更复杂,因为“上期”并不总是简单减一个月。系统会优先判断本期是不是一个“自然周期口径”。
3.1 本期是完整自然周期时
如果本期刚好是完整的年、季、月、周、日,那么上期取上一个完整自然周期。
例1:完整自然月
- 本期:2024年1月1日 到 2024年1月31日
- 上期:2023年12月1日 到 2023年12月31日
例2:完整自然周
- 本期:2023年3月6日 到 2023年3月12日
- 上期:2023年2月27日 到 2023年3月5日
例3:完整自然日
- 本期:2022年1月2日
- 上期:2022年1月1日
3.2 本期从自然周期起点开始,但没有走完整个周期时
如果本期是“从月初开始,到月中某一天结束”,或者“从周初开始,到周中某一天结束”,那么上期不是简单按天数回退,而是要保持同样的周期位置。
月度场景
例4:月初到某一天
- 本期:2022年2月1日 到 2022年2月27日
- 上期:2022年1月1日 到 2022年1月27日
这里的关键不是“27天”,而是“都取到各自月份的第27天结束”。
周度场景
例5:周初到周中某一天
- 本期:2026年6月8日 到 2026年6月13日
- 上期:2026年6月1日 到 2026年6月6日
这里保持的是“同样的周内位置”。
3.3 本期不是从自然周期起点开始的自定义区间
如果本期本身就是一个自由定义的时间段,不是从月初、周初、季初开始,那么上期按“等长平移”处理。
例6:
- 本期:2026年6月9日 到 2026年6月13日
- 上期:2026年6月4日 到 2026年6月8日
这类场景的理解方式是:
- 本期有 5 天
- 上期也取紧邻之前的 5 天
3.4 跨多个月的自定义时间段
如果本期本身覆盖多个完整月份,上期就整体向前平移相同的月数。
例7:
- 本期:2024年2月1日 到 2024年3月31日
- 上期:2023年12月1日 到 2024年1月31日
可以理解为:
- 本期覆盖 2 个完整月份
- 上期也取紧邻之前的 2 个完整月份
4. 周环比和季度环比
4.1 周环比
周环比本质上是和上一周比较。
例1:
- 本期:2024年2月11日 到 2024年2月17日
- 上期:2024年2月4日 到 2024年2月10日
需要注意的是,周的起始日要跟项目口径一致:
- 有些项目按周一开始
- 有些项目按周日开始
只要本期和上期采用同一套起始规则即可。
4.2 季度环比
季度环比本质上是和上一个季度的对应时间段比较。
例2:
- 本期:2024年7月1日 到 2024年8月3日
- 上期:2024年4月1日 到 2024年5月3日
如果本期是完整季度,则上期也是完整上一季度。
5. 按时间粒度分组展示时,比较口径要跟分组一致
报表如果按年、季、月、周等粒度展示,系统会优先让比较口径和展示粒度对齐。
5.1 按月展示同比
例1:
- 查询范围:2024年1月1日 到 2024年12月31日
- 展示方式:按月展示
那么实际比较关系是:
- 2024年1月 对 2023年1月
- 2024年2月 对 2023年2月
- ...
- 2024年12月 对 2023年12月
5.2 按月展示环比
例2:
- 查询范围:2024年1月1日 到 2024年1月31日
- 展示方式:按月展示
那么比较关系是:
- 2024年1月 对 2023年12月
如果查询范围本身跨了多个月,则“上期”也会整体向前挪相同的月数。
6. 实施时最容易混淆的几个点
6.1 “环比”不等于“减一个月”
只有当本期本来就是月度口径时,环比才表现为“上个月”。
如果本期是:
- 一天,则上期是前一天
- 一周,则上期是前一周
- 自定义 5 天,则上期是前一个 5 天区间
- 月初到某日,则上期是上个月月初到对应日期
6.2 “同比”优先保持同位置,而不是同天数
例如:
- 本期:2024年6月1日 到 2024年6月23日
- 同期:2023年6月1日 到 2023年6月23日
这里强调的是“同一月份中的同一进度”,而不是简单地找一个 23 天区间。
6.3 “今年”和“YTD”要区分
尤其是在目标表、预算表这类可能包含未来日期的数据中:
- “今年”可能是全年
- “YTD”只能到当前已发生的日期
6.4 月末、季末、年末要按完整周期理解
例如:
- 9月1日到9月30日,是完整自然月
- 1月1日到12月31日,是完整自然年
这类场景在取上期或同期时,都应该优先按完整周期对齐,而不是按简单天数平移。
7. 一句话总结
可以把系统的同环比时间计算理解为三步:
- 先确定本期真实可比较的时间范围
- 再判断本期属于“完整自然周期”“从周期起点开始的不完整周期”还是“自由定义区间”
- 最后按“同位置对齐”或“等长平移”得到同期/上期
如果实施时拿不准,优先用下面这个判断顺序:
- 先看本期是不是完整年、季、月、周、日
- 再看本期是不是从周期起点开始
- 如果都不是,就按等长平移处理

