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

Power BI中如何创建带计算关系的新列?夏令时年度重置实现

解决方案:基于夏令时日期计算业务年度

步骤1:预处理TableB(可选,用于更严谨的边界判断)

如果TableB仅包含每年的夏令时开始日期(如SummerTimeStartDate列,格式为2023-03-12),先添加计算列获取下一年的夏令时开始日期,明确业务年的结束边界:

下一年夏令时开始日期 = LOOKUPVALUE(
    TableB[SummerTimeStartDate],
    YEAR(TableB[SummerTimeStartDate]),
    YEAR(TableB[SummerTimeStartDate]) + 1
)

注:2050年的该列会返回空白,不影响后续计算。

步骤2:在TableA中创建「业务年度」计算列

无需建立表间固定关系,直接通过DAX动态匹配日期所属业务年度:

业务年度 = 
VAR 当前日期 = TableA[Date]
VAR 当前日期前最近的夏令时开始日期 = 
    CALCULATE(
        MAX(TableB[SummerTimeStartDate]),
        FILTER(TableB, TableB[SummerTimeStartDate] <= 当前日期)
    )
RETURN
    YEAR(当前日期前最近的夏令时开始日期)

逻辑说明

  • 对于TableA中的任意日期:
    1. 找到小于等于该日期的最大夏令时开始日期(即最近一次夏令时切换节点)
    2. 该夏令时日期的年份即为当前日期所属的业务年度
  • 示例:假设2023年夏令时开始于3月12日,2022年开始于3月13日:
    • 2023-01-01 至 2023-03-11:最近的夏令时开始日期是2022-03-13,业务年度为2022
    • 2023-03-12 至 2024-03-11:最近的夏令时开始日期是2023-03-12,业务年度为2023

简化方案(若TableB的年份无重复)

如果TableB中每年仅对应一条夏令时记录,可直接用以下DAX:

业务年度 = 
VAR 当前日期 = TableA[Date]
VAR 当前年份 = YEAR(当前日期)
VAR 当年夏令时开始日期 = LOOKUPVALUE(
    TableB[SummerTimeStartDate],
    YEAR(TableB[SummerTimeStartDate]),
    当前年份
)
RETURN
    IF(当前日期 >= 当年夏令时开始日期, 当前年份, 当前年份 - 1)

内容的提问来源于stack exchange,提问作者Hoy Cheung

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 23:37:39