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中的任意日期:
- 找到小于等于该日期的最大夏令时开始日期(即最近一次夏令时切换节点)
- 该夏令时日期的年份即为当前日期所属的业务年度
- 示例:假设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
相关产品推荐
相关产品推荐

