본문 바로가기
구글 스프레드시트

구글 스프레드시트 - 초급편 (11) (WEEKNUM 함수 이해하기)

by David Kim 2022. 11. 3.
반응형

구글 스프레드시트에서 날짜 다루기

- 날짜의 주차 확인하기

- 날짜의 주차 활용하기

 

아무도 알려주지 않아서 실무에서 혼자 맨땅에 헤딩하면서 습득한 내용을 다룹니다.
(최적화된 방법보다는 그냥 제가 할 줄 아는 방법을 다룬 것이라 이 블로그에 있는 방법이 가장 효율적인 방법은 아닐 수 있습니다!)

Image from Pixabay

안녕하세요 데이빗입니다.

드디어 길고 길었던 초급 편의 마지막입니다.

부족한 부분이 많지만 그래도 너그럽게 봐주시고 필요한 것들을 얻어가셨으면 좋겠습니다.

 

이번 포스팅에서는 지난 포스팅에 이어서 날짜 다루는 것에 대해서 추가로 알아보도록 하겠습니다.

제가 왜 이렇게 날짜 다루는 것에 집중하는지 궁금하실 수 있는데, 이는 잘 모아진 로우 데이터(Raw Data)를 의미 있는 정보(Information)로 가공하는데 날짜 데이터가 매우 중요한 역할을 하기 때문입니다.

지난 포스팅들을 통하여 날짜 데이터를 연/월/일로 분리하는 방법과 각 날짜의 요일을 확인하는 방법까지 알아보았습니다.

연/월/일로 분리하는 방법을 익혔다는 것은, 날짜가 포함된 로우 데이터(Raw Data)를 얻어냈을 때 연별/월별/일별 데이터를 만들어 낼 수 있다는 것이고, 이는 분기별/반기별 데이터를 만들어 낼 수 있다는 것입니다.

요일을 확인하는 방법을 익혔다는 것은, 날짜가 포함된 로우 데이터(Raw Data)를 얻어냈을 때 평일과 주말의 데이터를 만들어 낼 수 있다는 것입니다.

그렇다면 또 어떤 데이터를 만들어 낼 수 있을까요?

바로 주별 데이터입니다.

실제로 회사에서 많이 활용하는 데이터 중 하나가 주별 데이터이니 이 포스팅의 내용을 잘 익힌다면 유용하게 사용할 수 있을 것입니다.

 

날짜의 주차 확인하기

연/월/일 함수와 마찬가지로 해당 함수 또한 구글이 날짜로 인식을 해야만 정상적으로 적용되기 때문에, 반드시 이전 포스팅의 내용을 숙지하시기 바랍니다.

* 이전 포스팅 내용이 궁금하다면?! >> 구글 스프레드시트 - 초급편 (8)

특정 날짜의 '주'를 확인하는 함수는 바로 WEEKNUM입니다. (WEEK + NUMber로 이해하시면 편합니다.) 

셀(Cell)에 '=WEEKNUM('을 입력하면 아래와 같이 설명이 나옵니다.

Image Captured by David Kim

WEEKNUM 함수는 '날짜'와 '유형'으로 구성되어 있는데, '날짜'에는 날짜를 정확하게 입력하거나, 날짜가 입력된 셀(Cell)을 참조할 경우 해당 날짜 혹은 참조한 셀(Cell)에 입력된 날짜가 몇 번째 주인지 나타내는 숫자를 불러옵니다.

'유형'의 경우 보기에는 조금 복잡할 수 있는데, 최대한 간단하게 설명해 드리도록 하겠습니다. (아래 표는 구글 스프레드시트에서 제공하는 도움말의 일부를 발췌한 것입니다.)

유형 주 시작일 주 종료일 시스템
1 또는 생략 일요일 토요일 1
2 월요일 일요일 1
11 월요일 일요일 1
12 화요일 월요일 1
13 수요일 화요일 1
14 목요일 수요일 1
15 금요일 목요일 1
16 토요일 금요일 1
17 일요일 토요일 1
21 월요일 일요일 2

('유형'은 선택사항으로 입력하지 않을 경우 기본 값은 1로 설정됩니다.)

유형에 대한 대략적인 설명은 아래와 같은데, 저는 마지막 유형인 '21'을 강력하게 추천합니다. (그 이유는 아래 '날짜의 주차 활용하기'에서 다루겠습니다.)

최대한 쉽게 설명하면 아래와 같이 세 개의 파트로 나누어 보시는 것이 좋습니다.
첫 번째 파트 (1, 2)
- 범용적으로 쓰이는 유형을 모아놓은 파트
- 한 주의 시작을 보통 일요일 혹은 월요일로 보기 때문에 둘 중 선택하고 싶을 때 이용
두 번째 파트 (11 ~ 17)
- 모든 요일이 주의 시작이 될 수 있는 유형을 모아놓은 파트
- 한 주의 시작을 내가 원하는 요일로 설정하고 싶을 때 이용
세 번째 파트 (21)
- ISO 8601에 규정된 방법으로, 유럽식 주 번호 시스템
- 자세한 내용은 다음에서 ISO 8601을 검색해 보자 (이하 생략)

 

날짜의 주차 활용하기 (수정됨)

날짜의 주차는 보통 연과 주차를 함께 사용합니다. 

예를 들어 2022년 1월 3일부터 2022년 1월 9일 까지를 '2022년 1주'와 같이 표현하는 것이죠.

주의 시작을 일요일 혹은 월요일로 설정하는 경우가 일반적인데 제가 권장하는 방식은 위에서 말씀드렸듯이 유형 21, ISO 8601에 규정된 방법으로 주의 시작을 월요일로 설정하는 것입니다.

연과 주차를 함께 사용하여 표시하고자 하면, 이전에 배운 YEAR 함수와 조금 전 위에서 배운 WEEKNUM 함수를 활용해서 표현할 수 있습니다.

그런데 여기에서 문제가 있습니다.

바로 연말과 연초입니다.

위와 같이 월요일을 주의 시작으로 설정한 경우 일요일이 주의 끝이 되는데, 한 해의 마지막 날이 항상 일요일이지는 않기 때문입니다.

아래 예시와 같이 2022년 연말부터 2023년 연초까지 날짜를 나열하고 각각 YEAR 함수와 WEEKNUM 함수를 활용해서 연과 주차를 표현할 경우, 2022년에서 2023년으로 넘어가는 시점에 데이터가 어긋나게 됩니다.

Image Captured by David Kim

연도(J열) : =YEAR(I2)

주차(K열) : =WEEKNUM(I2,2)

위 이미지에서 보시면, 2022년 12월 31일에서 2023년 1월 1일로 넘어가는 시점에서 주차의 데이터가 53에서 1로 변경됩니다. 

구글 스프레드시트에서는 정확한 값을 출력해 준 것이지만, 데이터를 읽는 사람 입장에서는 정확한 데이터를 얻을 수 없는 것이죠. 

(2022년 53주 데이터는 6일 치 밖에 들어오지 않으며, 2023년 1주 데이터는 1일 치 밖에 들어오지 않으며, 이 둘은 사실 합쳐서 판단해야 하는 것이 맞음)

 

바로 위와 같은 이유 때문에 유형 21, ISO 8601에 규정된 방법을 권장하는 것입니다.

유형 21의 경우 해가 바뀌는 시점에서의 주차 값을 자동으로 넘겨주어 위와 같은 오류를 방지해 줍니다.

아래 이미지는 주차 유형을 21로 변경해 주었을 때의 결과입니다.

Image Captured by David Kim

연도(L열) : =YEAR(I2)

주차(M열) : =WEEKNUM(I2,21)

위와 같이 설정할 경우 2022년 12월 31일에서 2023년 1월 1일로 넘어가는 시점에서 해가 바뀌어도 주차의 데이터가 52에서 바뀌지 않음을 확인할 수 있습니다.

그렇다면 모든 문제가 해결된 것일까요?

안타깝게도 그렇지는 않습니다.

2023년 1월 1일의 경우 주차는 52주이지만 연도가 2023년이기 때문에 결과적으로 2023년 52주 차 데이터로 인식되며 이는 잘못된 데이터가 됩니다.

 

그래서 이를 해결하기 위해서 최종적으로 아래와 같은 방법으로 각각 수식을 변경해 줄 수 있습니다.

Image Captured by David Kim

연도(N열) : =IFS(AND(MONTH(I2)=1,WEEKNUM(I2,21)=53),YEAR(I2)-1,AND(MONTH(I2)=1,WEEKNUM(I2,21)=52),YEAR(I2)-1,WEEKNUM(I2,21)>0,YEAR(I2))
주차 (O열) : =WEEKNUM(I2,21)

조금 복잡하긴 한데, 이해가 어려우신 분들은 그냥 복사 붙여넣기 해서 사용하셔도 됩니다. (단, 날짜를 참조하는 셀 주소는 상황에 맞게 변경해주셔야 합니다. 위 예시에서는 I2)

결론적으로 문제가 되는 경우는 주차가 52주 혹은 53주일 때 연도가 다음 해로 넘어가지 않아야 하기 때문에 이에 대한 설정을 해준 것입니다.

아직 AND 함수에 대해 배우지 않아 어렵겠지만, IFS 함수를 이용해서 아래와 같이 조건을 걸어 주었습니다.

1. 참조하는 날짜의 '월'이 1월이고 주차가 53주일 경우 참조하는 날짜의 '연'에서 1을 뺀다.

2. 참조하는 날짜의 '월'이 1월이고 주차가 52주일 경우 참조하는 날짜의 '연'에서 1을 뺀다.

3. 참조하는 주차의 값이 0 초과일 경우 참조하는 날짜의 '연'을 가져온다. (사실 '그 외 모든 경우'로 이해해 주시면 됩니다.)

이렇게 할 경우 해가 넘어가는 시점의 정보도 데이터를 읽는 사람 입장에서 편하게 활용할 수 있게 해 줍니다.

 

이번 포스팅에서는 날짜의 주차를 확인하고 활용하는 방법에 대해 알아보았습니다. 그리고 미리 말씀드린 대로 이번 포스팅을 마지막으로 초급 편을 마치도록 하겠습니다.

다음 포스팅부터는 중급 편으로 넘어가서 조금 더 심도 있는 내용들을 알아볼 테니 계속해서 지켜봐 주시면 좋겠습니다.

반응형

댓글