如何将一周天数从7天扩展为8天?DAX日期表调整需求
解决方案:适配8天周的周末归属调整
DAX 端实现方案
核心逻辑
将每周周期定义为周一至下周一(共8天),但把第8天(下周一)划归到前一周的周末范围。通过计算「周结束日」来统一归属,确保2023年8月28日(周一)被纳入8月27日(周日)的周末组。
具体代码
假设你的日期表名为DateTable,已有Date列,新增以下计算列:
周结束日 = VAR 当前日期 = 'DateTable'[Date] VAR 周起始日 = DATE(YEAR(当前日期), MONTH(当前日期), DAY(当前日期) - WEEKDAY(当前日期, 2) + 1) // 周一为周起始 VAR 是否为第8天 = WEEKDAY(当前日期, 2) = 1 // 判断是否是周一(8天周的第8天) RETURN IF(是否为第8天, 周起始日 - 1, 周起始日 + 6) // 第8天归到上周日,其余日期归到当周周日
再新增列标记周末:
周末标记 = IF( 'DateTable'[Date] = 'DateTable'[周结束日] || WEEKDAY('DateTable'[Date], 2) = 1, "WE", "工作日" )
执行后,2023年8月28日会被标记为WE,且归属到8月27日的周结束日范围内。
Power Query 端实现方案
步骤1:计算周结束日
在Power Query中加载日期表后,添加自定义列:
let 当前日期 = [Date], 星期序号 = Date.DayOfWeek(当前日期, Day.Monday), // 周一为0,周日为6 周结束日 = if 星期序号 = 0 then Date.AddDays(当前日期, -1) else Date.AddDays(当前日期, 6 - 星期序号) in 周结束日
步骤2:标记周末
再添加自定义列完成周末标记:
if [Date] = [周结束日] or Date.DayOfWeek([Date], Day.Monday) = 0 then "WE" else "工作日"
最后关闭并上载,即可得到符合业务需求的日期表。
内容的提问来源于stack exchange,提问作者Rolly V
相关产品推荐
相关产品推荐

