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

DAX函数如何处理2023年12月31日的年份与周数?

解决DAX中2023年12月31日周数与年份匹配问题

当然可以实现,核心是根据你的周归属规则调整DAX计算逻辑,以下是两种适配方案:

方案一:遵循ISO周标准(推荐)

ISO周标准规定一周从周一开始,且每年的第一周必须包含该年的第一个周四。对于2023年12月31日(周日),ISO标准会将其归为2024年第1周,正好匹配你的需求。

使用DAX的ISOWEEKNUM和自定义年份计算即可实现:

-- 计算日期所属的ISO年份
ISO_Year = 
VAR CurrentDate = 'Calendar'[Date]
VAR WeekNum = ISOWEEKNUM(CurrentDate)
RETURN
    IF(
        WeekNum = 1 && MONTH(CurrentDate) = 12,
        YEAR(CurrentDate) + 1,
        IF(
            WeekNum >= 52 && MONTH(CurrentDate) = 1,
            YEAR(CurrentDate) - 1,
            YEAR(CurrentDate)
        )
    )

-- 计算日期所属的ISO周数
ISO_WeekNum = ISOWEEKNUM('Calendar'[Date])

方案二:自定义周日为周起始的规则

如果你需要严格保留“周日为一周起始”的设定,仅针对年末最后一天的周日调整归属,可以用以下自定义逻辑:

-- 自定义年份(年末周日归为下一年)
Custom_Year = 
VAR CurrentDate = 'Calendar'[Date]
VAR IsYearEndSunday = 
    CurrentDate = DATE(YEAR(CurrentDate), 12, 31) && WEEKDAY(CurrentDate, 1) = 1
RETURN
    IF(IsYearEndSunday, YEAR(CurrentDate) + 1, YEAR(CurrentDate))

-- 自定义周数(年末周日归为下一年第1周)
Custom_WeekNum = 
VAR CurrentDate = 'Calendar'[Date]
VAR IsYearEndSunday = 
    CurrentDate = DATE(YEAR(CurrentDate), 12, 31) && WEEKDAY(CurrentDate, 1) = 1
RETURN
    IF(IsYearEndSunday, 1, WEEKNUM(CurrentDate, 1))

注:WEEKDAY函数参数1表示周日为一周的第1天,和你当前使用的WEEKNUM默认规则一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 17:14:56