PowerBI DAX日期表生成异常:无法稳定输出指定5个工作日
解决PowerBI DAX创建指定工作日日期表的问题
原代码通过固定日期范围+排除特定日期的方式,无法灵活适配不同工作日的需求(比如周一需要往前取到上周的周四、周五,超出了原代码的CurrentDate-4范围),导致结果不符合预期。
预期输出规则
- 今日为周一:上周四、上周五、今日周一、下周二、下周三
- 今日为周二:上周五、上周一、今日周二、下周三、下周四
- 今日为周三:上周一、上周二、今日周三、下周四、下周五
- 今日为周四:上周二、上周三、今日周四、下周五、下周一
- 今日为周五:上周三、上周四、今日周五、下周一、下周二
原错误代码
5 dagen = VAR CurrentDate = TODAY() VAR CustomCalendar = ADDCOLUMNS ( FILTER ( CALENDAR ( CurrentDate - 4, CurrentDate + 4 ), WEEKDAY ( [Date], 2 ) >= 1 && WEEKDAY ( [Date], 2 ) <= 5 && [Date] <> CurrentDate - 3 && [Date] <> CurrentDate + 3 ), "DayOfWeek", WEEKDAY ( [Date], 2 ), "FormattedDateDutch", VAR EngDay = FORMAT ( [Date], "ddd" ) VAR DayOfMonth = DAY ( [Date] ) VAR MonthOfYear = MONTH ( [Date] ) RETURN SWITCH ( TRUE (), EngDay = "Mon", "Ma", EngDay = "Tue", "Di", EngDay = "Wed", "Wo", EngDay = "Thu", "Do", EngDay = "Fri", "Vr", EngDay = "Sat", "Za", "Zo" ) & " " & FORMAT ( DayOfMonth, "00" ) & "-" & FORMAT ( MonthOfYear, "00" ) ) RETURN CustomCalendar
错误输出示例
Date 12-10-2023 00:00:00 16-10-2023 00:00:00 17-10-2023 00:00:00 18-10-2023 00:00:00 20-10-2023 00:00:00
修正后的DAX代码
5 dagen = VAR CurrentDate = TODAY() // 生成前2个工作日的日期列表 VAR PreviousWorkdays = TOPN( 2, FILTER( CALENDAR(CurrentDate - 10, CurrentDate - 1), // 扩大范围确保能取到足够的工作日 WEEKDAY([Date],2) IN {1,2,3,4,5} ), [Date], DESC ) // 生成后2个工作日的日期列表 VAR NextWorkdays = TOPN( 2, FILTER( CALENDAR(CurrentDate + 1, CurrentDate + 10), // 扩大范围确保能取到足够的工作日 WEEKDAY([Date],2) IN {1,2,3,4,5} ), [Date], ASC ) // 合并所有日期并添加格式列 VAR CombinedDates = UNION( PreviousWorkdays, ROW("Date", CurrentDate), NextWorkdays ) RETURN ADDCOLUMNS( CombinedDates, "DayOfWeek", WEEKDAY([Date],2), "FormattedDateDutch", VAR EngDay = FORMAT([Date], "ddd") RETURN SWITCH( EngDay, "Mon", "Ma", "Tue", "Di", "Wed", "Wo", "Thu", "Do", "Fri", "Vr", "Sat", "Za", "Zo" ) & " " & FORMAT(DAY([Date]), "00") & "-" & FORMAT(MONTH([Date]), "00") )
代码说明
- 灵活获取前后工作日:使用
TOPN配合扩大的日期范围,精准筛选出当前日期之前的2个最近工作日和之后的2个最近工作日,避免固定日期范围的局限性。 - 合并日期:通过
UNION将前2个工作日、当前日、后2个工作日合并成完整的5天列表。 - 保留原有格式逻辑:保留了荷兰语日期格式的转换逻辑,确保输出格式符合需求。
内容的提问来源于stack exchange,提问作者Intellar
相关产品推荐
相关产品推荐

