我有一个日历表,其中有一列存储用于指示日历日期是否为工作日(工作日)的标志。 WorkDay_FL = 0 表示日期是周末或假日。我想创建一个计算列以向给定日期添加 5 个工作日。
因此,如果日期 = 12/30/2020,即 2020 年 12 月 30 日,那么添加 5 个工作日应该得到 1/7/2020(2021 年 1 月 7 日)。
31-Dec-2020 = WeekDay
1-Jan-2021 = Holiday
2-Jan-2021 = Weekend
3-Jan-2021 = Weekend
4-Jan-2021 = WeekDay
5-Jan-2021 = WeekDay
6-Jan-2021 = WeekDay
7-Jan-2021 = WeekDay
DAX 公式或 Power Query 函数都可以。
谢谢
最简单的方法是在日历表中创建一个计算表,其中包含工作日的渐进数字。例如,假设您的 WorkDay_FL 为 1 表示工作日
WorkDayProg =
VAR CurDate = 'Date'[Date]
RETURN CALCULATE( SUM('Date'[WorkDay_FL]), 'Date'[Date] <= CurDate, REMOVEFILTERS('Date') )
并使用 WorkDayProg 计算列仅计算工作日的未来(或过去)日期
FiveWorkingDaysInTheFuture =
VAR CurrentWorkDay =
MAX( 'Date'[WorkDayProg] )
RETURN
CALCULATE(
MIN( 'Date'[Date] ),
'Date'[WorkDayProg] = CurrentWorkDay + 5,
REMOVEFILTERS( 'Date' )
)
我们使用 MIN,因为非工作日的 WorkDayProg 等于最后一个工作日。
我使用了嵌套的if语句没有使用日历或排名函数来解决这个问题。我想在“网站访问结束日期”列中添加 10 个工作日,因此我计算了“结束日期”和“结束日期”+11 之间的网络天数。如果答案是 10 天,那么它将在“结束日期”列中添加 11 天,如果不是,那么在下一步中,我计算“结束日期”和“结束日期”+12 之间的网络天数。同样,如果答案是 10,它将在“结束日期”列中添加 11 天,这实际上给了我 10 个网络天数,如果不是,那么在下一步中,我计算了“结束日期”和“结束日期”之间的网络天数+ 13 并执行相同操作,直到“结束日期”+14 天。因为如果我尝试查找日期 dd/mm/yy 和 dd/mm/yy +15 之间的网络天数,则工作日将始终超过 10,因为两周内(即 14 天)最多可有 4 个假期。这是代码。
WORKINDAY = IF(NETWORKDAYS('监控访问报告_3002'[现场访问结束日期], '监控访问报告_3002'[现场访问结束日期]+11)=10,'监控访问报告_3002'[现场访问结束日期]+11, IF(NETWORKDAYS('监控访问报告_3002'[现场访问结束日期], '监控访问报告_3002'[现场访问结束日期]+12)=10,'监控访问报告_3002'[现场访问结束日期]+12,IF(NETWORKDAYS ('监控访问报告_3002'[现场访问结束日期],'监控访问报告_3002'[现场访问结束日期]+13)=10,'监控访问报告_3002'[现场访问结束日期]+13,'监控访问报告_3002'[现场访问结束日期]+14)))