DAX中含IF语句的计算列:如何实现Previous_Week判断逻辑
DAX计算列实现当前周、上周及其他标记
需求:创建计算列,将日期标记为当前周(CW)、上周(PW)或其他(Non)。已有识别当前周的代码,需完善上周的判断逻辑。
现有可用代码(识别当前周/其他)
get_CW = // 正常工作,标记当前周为"CW",其余为"Non" IF( AND( WEEKNUM(TODAY()) = WEEKNUM('Calendar'[Date]), YEAR(TODAY()) = YEAR('Calendar'[Date]) ), "CW", "Non" )
完善后的完整代码(包含上周判断)
需要注意跨年场景(比如当前是新年第一周,上周属于上一年的最后一周),同时统一周的起始规则(用WEEKNUM的第二个参数2表示周一到周日,避免不同规则导致的误差):
get_CW_and_PW = IF( // 判断当前周 AND( WEEKNUM(TODAY(), 2) = WEEKNUM('Calendar'[Date], 2), YEAR(TODAY()) = YEAR('Calendar'[Date]) ), "CW", IF( // 判断上周:包含非跨年和跨年两种情况 OR( // 非跨年:当前周数减1等于日期周数,且年份相同 AND( WEEKNUM(TODAY(), 2) - 1 = WEEKNUM('Calendar'[Date], 2), YEAR(TODAY()) = YEAR('Calendar'[Date]) ), // 跨年:当前是当年第1周,日期属于上一年的最后一周 AND( WEEKNUM(TODAY(), 2) = 1, WEEKNUM('Calendar'[Date], 2) = WEEKNUM(DATE(YEAR(TODAY())-1, 12, 31), 2), YEAR('Calendar'[Date]) = YEAR(TODAY()) - 1 ) ), "PW", "Non" ) )
逻辑说明
- 当前周判断:保持原有逻辑,统一使用周起始参数
2确保一致性 - 上周判断:
- 常规场景:当前周数减1等于日期的周数,且年份一致
- 跨年场景:若当前是当年第1周,则匹配上一年最后一周的日期
内容的提问来源于stack exchange,提问作者symkly
相关产品推荐
相关产品推荐

