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
相关产品推荐
相关产品推荐

