이런 식입니다. 그런데, 이 수식에는 몇 가지 문제가 있습니다.
영업일을 반영하려면, 주말인 토요일, 일요일을 일단 계산에서 제외해야
합니다. 그래도 문제가 있습니다. 주말은 아니지만, 공휴일, 소위 말하는
빨간 날을 제외해야 제대로 된 영업일 기준의 날짜 계산을 해줍니다. 그냥
수동으로 업무를 처리할 때에는, 그 정도는 사람이 감안해서 미리미리 처리해주면
되겠지만, 모든 것이 자동으로 처리되는 대량의 데이터 시스템에서는, 이런
계산을 대충 하게 되면 큰일 납니다.
시간대, 영업일을 고려한 날짜 차이 계산식
따라서 다음과 같이 보완을 해줍니다.
첫째, 시간대를 반영해서, Airtable 현재 시스템 시간에 DATEADD
함수를 이용해
9시간을 더합니다.
DATEADD(NOW(), 9, 'hours')
둘째, 구해진 시간을
한국 시간대로 설정해줍니다. SET_TIMEZONE
함수는 첫 번째 파라미터의 시간을 두 번째 파라미터에서 표시한 시간대로 표시해
시간값을 리턴해줍니다.
시간대별 표시자(identifier) 목록을 참고하십시오. (Airtable 필드 형식(Formatting) 설정에서 시간대를 바꿔주는
옵션이 있습니다만, 이것은 손대지 않는다고 가정합니다.) 추가로, 편의상 DATESTR 함수를 써서 일정 표시를
ISO 8601 날짜 표현방식에 따라, YYYY-MM-DD로 바꿔주겠습니다.
DATESTR(SET_TIMEZONE(DATEADD(NOW(), 9, 'hours'), 'Asia/Seoul'))
셋째, 이렇게 구한 현재 날짜/시간과 {시작일} 필드값을 비교해야 합니다.
그런데, 위에서 썼던 DATETIME_DIFF
함수를 쓰면, 주말이나 공휴일을 고려하지 않고,
날짜 차이를 계산합니다. 약간 주의할 점은, 시작일과 끝일을 모두 포함하여 계산하니, 양수인 경우 +1이, 음수인 경우 -1을 더한 값이 나옵니다.WORKDAY_DIFF
라는 영업일 계산 함수를 써서, 일단 주말을 고려하여 날짜 차이를 계산합니다.
WORKDAY_DIFF(
DATESTR(SET_TIMEZONE(DATEADD(NOW(), 9, 'hours'), 'Asia/Seoul')),
{시작일}
)
이렇게 하면, 시작일에서 현재일 사이에 영업일이 며칠 있는지 계산해줍니다. 그 값이 마이너스이면, 시작일이 이미 지났다는 뜻이고, 양수이면 시작일이 미래라는 뜻입니다. 결과가 0이면 영업일이 하나도 없으니, 시작일과 현재일이 모두 휴일이라는 뜻입니다. 1 또는 -1이면 시작일이나 현재일 둘 중의 하나가 영업일이라는 뜻입니다.
넷째, WORKDAY_DIFF 함수에서 세 번째 파라미터에 주말이 아닌
공휴일을 추가합니다.
2024년 기준 대한민국 공휴일을 참조하여, 마지막으로 공휴일 목록을 하나의 문자열로 묶어서 넣습니다.
WORKDAY_DIFF(
DATESTR(SET_TIMEZONE(DATEADD(NOW(), 9, 'hours'), 'Asia/Seoul')),
{시작일},
'2023-01-23, 2023-01-24, 2023-03-01, 2023-05-05, 2023-06-06, 2023-08-15, 2023-09-28, 2023-09-29, 2023-10-02, 2023-10-03, 2023-10-09, 2023-12-25, 2024-01-01, 2024-02-09, 2024-03-01, 2024-05-15, 2024-06-06, 2024-08-15, 2024-09-16, 2024-09-17, 2024-09-18, 2024-10-03, 2024-10-09, 2024-12-25'
)
다섯째, 다시 SWITCH 조건문에서 위의 값을 검사하여, 전전날, 전날, 오늘, 다음날, 담담날을 표시해주도록 합니다.
SWITCH(
WORKDAY_DIFF(DATESTR(SET_TIMEZONE(DATEADD(NOW(), 9, 'hours'), 'Asia/Seoul')), {시작일}, '2023-01-23, 2023-01-24, 2023-03-01, 2023-05-05, 2023-06-06, 2023-08-15, 2023-09-28, 2023-09-29, 2023-10-02, 2023-10-03, 2023-10-09, 2023-12-25, 2024-01-01, 2024-02-09, 2024-03-01, 2024-05-15, 2024-06-06, 2024-08-15, 2024-09-16, 2024-09-17, 2024-09-18, 2024-10-03, 2024-10-09, 2024-12-25'),
-3,'전전날',
-2,'전날',
-1,'(지난)오늘',
0, '휴일',
1,'(올)오늘',
2,'다음날',
3,'담담날'
)
실제 베이스 예시: 행사 운영 관리
아래에
예시로 만들어놓은 '행사운영관리'라는 베이스를 살펴보십시오. {시작일}이 오늘인지, 전날인지, 다음 날인지 판단하여 {영업일 기준}이라는 필드에서 결과를 보여줍니다. 시작일 하루 전에는 '사전 안내'를 반드시 해야 하고, 당일은 '현장 진행'을 해야 하고, 하루가 지나면 '해피콜'을 반드시 해야 한다고 합시다. 그런 업무를 체크리스트로 만들어놓고, 전날 일정, 오늘 일정, 다음날 일정 등만 따로 볼 수 있는 뷰(View)를 만들어놓으면, 누락이 없는 업무 관리 시스템이 됩니다. 또 거기에 전날, 오늘, 다음날 해야 하는 일들을 자동화(automation)로 걸어놓으면, 업무 담당자의 반복적인 업무가 획기적으로 줄어들겠죠? 이런 이야기는 다음 기회에...