2017-02-07 9 views
0

조건이 충족되면 3 일 영업일에을 추가하는 사용자 정의 열을 Power Query에 추가하려고합니다. 그렇지 않으면 2 영업일을 추가하십시오.사용자 정의 열의 날짜에 x 일을 추가하십시오.

조건부로 문제없이 날짜를 추가 할 수 있지만 근무일을 추가하는 데 문제가 있습니다. =IF X = 1,WORKDAY([REFERENCE],3),WORKDAY([REFERENCE],2)을 사용하여 Excel에서이 작업을 쉽게 수행 할 수 있습니다.하지만 쿼리 편집기에서 사용자 지정 열과 동일한 작업을 수행하려면 어떻게해야합니까?

=if [REF]="1" then Date.AddDays([ETA],3) else Date.AddDays([ETA],2)

답변

1

해결책 2 개 구성 요소로 아래로 휴식하는 것입니다 :

  1. 초기 조건에 따라, 2를 추가 아래

    내가 주말을 포함하여 일을 수행하는 무슨이다 또는 3 일
  2. 토요일 또는 일요일에 끝나는 경우 2 일을 더하여 주말을 건너 뜁니다.

이미 1 단계를 구현했습니다.

이제 2 단계를 구현하면됩니다. 필요한 경우 2 일을 추가하면됩니다. DayOfWeek 함수를 사용하여 시작 지점을 결정하여 추가 2 일이 필요한지 결정할 수 있습니다.

영업일 기준으로 3 일을 추가하는 경우 첫 날 수요일, 목요일 또는 금요일입니다 : 당신이이 일을 추가하는 경우

if Date.DayOfWeek([ETA], Day.Wednesday) <= 2 then {Add 2 more days} 

것은, 당신은 초기 일 목요일 또는 금요일 인 경우 추가로 2 일을 추가해야합니다 :

if Date.DayOfWeek([ETA], Day.Thursday) <= 1 then {Add 2 more days} 

당신에게 이를 초기 진술에 포함시킬 수 있습니다.

+0

마이클, 귀하의 코드가 잘못된 솔루션을 제공합니다. 1 일, 수요일 + 2 영업일 = ​​금요일. 2nd, Date.DayOfWeek ([ETA], Day.Wednesday) <= 3은 * wendesday - saturday *를 의미합니다. 셋째, 2 ~ 3 일을 추가해야하는 경우가 있는데, 이는 다른 처리가 필요합니다. – Eugene

+0

나는 내 대답을 분명히했습니다. 주말을 처리해야하는 경우 2 일을 추가 할 수있는 솔루션을 제공하고있었습니다. 또한 OP가 추가 사례에 대한 코드 수정을 처리 할 수 ​​있다고 가정했습니다. 그들은 OP가 이미 개발 한 코드 라인을 추가하기 만하면됩니다. – Michael

+0

유일한 문제는 아니었다. 'Date.DayOfWeek (#date (2017,2,15), Day.Wednesday)는 0과 같습니다. 'Date.DayOfWeek (#date (2017,2,18), Day.Wednesday)는 3과 같습니다. 두 경우 모두 Date.DayOfWeek ([ETA], Day.Wednesday) <= 3' 인 조건을 충족시킵니다. – Eugene

1

공휴일도 고려하지 않으면이 문제를 해결하는 사용자 지정 함수를 작성했습니다. 조금 보편적인데, 그것은 2 또는 200 또는 2000 일 추가되었습니다. Excel에서 =WORKDAY(date;days) 함수와 같습니다. 여기

그것이 :

(startDate, days) => 
    let 
     Step1 = List.Dates(Date.AddDays(startDate, 1), days + Number.RoundUp(days/7*3+4,0), #duration(1,0,0,0)), //provision list of added days with 3 more days per each added week, starting from startDate + 1 day 
     Step2 = List.Select(Step1, (item) => Date.DayOfWeek(item, Day.Monday) < 5), // select only workdays 
     Step3 = List.FirstN(Step2, days), //select required number of workdays 
     Output = if days <= 0 then startDate else List.Last(Step3) 
    in 
     Output 

쿼리, 그것은, 말, AddWorkdays, 그리고이로 사용할 이름으로 저장할 수 있습니다 :

YourStepName = Table.AddColumn(yourTable, "CustomColumnName", 
        each AddWorkdays([ETA], if [REF]="1" then 3 else 2) 
        //note that [REF]="1" filters a text value, not number! 

그렇지 않으면 당신이이 기능을 삽입 할 수 있습니다 코드로

fnAddWorkdays = (startDate, days) => 
let 
    Step1 = List.Dates(Date.AddDays(startDate, 1), days + Number.RoundUp(days/7*3+4,0), #duration(1,0,0,0)), //provision list of added days with 3 more days per each added week, starting from startDate + 1 day 
    Step2 = List.Select(Step1, (item) => Date.DayOfWeek(item, Day.Monday) < 5), // select only workdays 
    Step3 = List.FirstN(Step2, days), //select required number of workdays 
    Output = if days <= 0 then startDate else List.Last(Step3) 
in 
    Output,