brunch

You can make anything
by writing

C.S.Lewis

by 시리얼 Sireal Jun 29. 2022

노션, 복잡한 수식 작성하는 법(w. Notion)

쉽게 알려주고 싶은데 도저히 정리가 안돼서 일단 써보는 글

노션에 복잡한 수식 작성하는 법


노션에 복잡한 수식을 입력하고 싶으신가요? 조건이 너무 까다로우시다고요? 아무리 시도해도  안되고 누가 정답을  알려줬으면 좋겠다고요?


저도 그렇게 생각합니다.


그나마 저는 노션 가이드북을 집필하며 노션의 수식의 기초를 공부했습니다. 그래서 까다로운 수식도 다른 사람들보다는 조금 편리하게 작성할 수 있다고 생각해요. 하지만 상대적인 거지 저도 수식을 모두 작성할 수 있는 것은 아니며, 다른 사람이 만들어 둔 수식을 가져오는 경우도 많답니다. 특히 노션 Progress bar는 가져오는 게 최고입니다.


저도 조건이 다양한 수식을 작성할 때는 시간이 정말 많이 걸립니다. 수식이 틀려서 고치느라 시행착오를 정말 많이 겪어요. 수식이 잘못되었다는 건 알겠는데 어디가 어떻게 잘못되었는지는 노션의 설명을 봐도 쉽게 이해가 안 되더라고요.


그래서 이번에는 제가 수식을 작성하는 방법에 대해 정리를 해볼 겸 글을 써보려고 합니다. 순서대로 최대한 쉽게 작성해보았습니다.


이번 예제 수식은 한 노셔너의 질문을 통해 총 4시간 동안 시행착오를 겪으며 만들어졌습니다.




목차

1. 요구 조건 정의

2. 조건 정리

3. 수식 작성

4. 수식 리뷰

5. 데이터베이스 꾸미기




배경 설명을 먼저 해드리면 제가 잘 사용하고 있는 채널톡을 통해 노션 수식에 대해 질문이 들어왔습니다. 질문은 유튜브페이스북 그룹, 네이버 카페, 블로그로만 받는데, 오늘따라 끌리더라고요. 그래서 내용을 읽어봤습니다.  

이걸 해결하면 컨설팅을 받을 필요가 없겠군(?) 이란 생각이 들었지만 오랜만에 까다로운 조건의 문제를 풀어보고 싶다는 도전의식이 들었어요. 산책을 가다가 돌아와서 결국 손을 대고 맙니다.




1. 요구 조건 정의

우선 질문자의 요구 조건을 들어보았습니다. 아래 이미지가 보내주신 조건입니다.

위 조건만 가지고 일단 수식을 풀어서 정리해보았는데 쉽게 정의되지 않았어요. 그래서 질문을 몇 개 더 보내서 조금 더 정리된 형태를 받았습니다.

이렇게 받은 조건을 통해 정리하고 나니 학생의 내신 등급에 의해 큰 차이가 느껴지지 않아 다시 질문을 던졌더니 새로운 조건을 제시해주셨습니다. 조건이 까다로워서 풀어보고 싶었지만 이쯤 되니 너무 어렵더군요..




2. 조건 정리

이렇게 받은 조건들을 한눈에 보기 편하게 정리를 해야 합니다. 한눈에 볼 수 있어야 수식을 작성하기가 편하거든요. 정리하는 방식은 수식을 입력하는 사람이 쉽게 인지할 수 있으면 됩니다.


조건 정리의 가장 중요한 부분 요구 조건 그대로 받아들이는  아니라 노션에서 수식을 작성할  최대한 간결하게 작성할  있도록 구분하는 것입니다.


최대한 단순하게 만들기 위해 일단 코스와 스타일을 분리했습니다. 성적에 따른 코스를 구분하고, 학생들의 태도에 따른 스타일을 따로 작성하여, 나중에 새로운 수식 열에서 합쳐주는 방식을 선택했습니다.


코스에서도 학년을 분리했습니다. 고1, 고2 학생들은 내신등급만 보고, 고3, 재수생, n수생 학생들은 모의고사 등급만 보기 때문에 나중에 함수를 분리해서 작성해줄 수 있을 것 같았죠.

이렇게 정리한 조건들은 질문자에게 보내 다시 내용을 확인합니다. 나중에 수식이 잘못되어 많은 시행착오를 겪기 때문에 조건이라도 명확하게 정의되어야 시행착오를 덜 겪을 수 있습니다.




3. 수식 작성

이제 본격적으로 수식을 작성해볼 차례입니다. 위 조건에서 보면 작성에 필요한 수식은 if, and, or 함수입니다.

if : '내가 작성한 조건이 맞으면  A, 틀리면 B로 나타내 줘'라고 말하는 수식입니다. 어릴 때 엑셀에서 if 함수에 대해 배울 때 '조건, 참, 명제, 거짓'이라는 단어로 배웠는데 정말 1도 이해가 안 가서 무작정 외워서 시험을 쳤던 기억이 있습니다. 좀 쉽게 써주지.
and : 'A값과 B값이 모두 일치하면 맞다고 표시해줘'라고 말하는 수식입니다.
예를 들어 '1등급이면서 개념 정리가 잘된 학생을 불러와줘'처럼 사용합니다.
or : 'A값 또는 B값 중에 하나라도 일치하면 맞다고 표시해줘'라고 말하는 수식입니다.
예를 들어 1등급이거나 점수가 80점 이상, 둘 중에 하나라도 맞는 학생을 불러와줘'처럼 사용합니다.


코스 정리 수식부터 작성해보죠. 코스는 총 6개이기 때문에 코드는 5줄이 나와야 합니다.  마지막 코스인 E코스는 수식으로 작성하지 않고 조건이 충족되지 않을 경우 나타나는 값으로 만들어줄 겁니다.

학년 구분은 맨 마지막에 작성합니다. 크게 보면 '고1/고2' 또는 '고3/재수생/n수생'으로 나눠지기 때문에 모든 수식을 작성한 뒤 마지막에 각 조건으로 덮어 씌워주면 되겠단 생각이 들었어요.  

각 코스의 속성과 값을 보면 내신등급, 개념, TEST 결과로 나타납니다.

내신등급 : 1등급, 2등급, 3~4등급, 5등급 이하

개념 : 잘 정리됨,  적당한 수준, 부족함, 매우부족함

TEST결과 : 80점 이상, 70 ~ 80점, 50 ~ 70점, 50점 미만

이렇게 3개의 속성과 값을 볼 수 있죠. 이 값들을 조합해 코스를 매겨주는 겁니다.


A코스에 대한 수식을 먼저 작성해봅니다.

A코스 : 1등급 or 2등급, 잘 정리됨 or 적당한 수준, 80~


수식은 한 문장씩 작성하고, 작성할 때마다 노션 데이터베이스에 수식이 잘 먹히는지 확인해야 합니다.


1. 1등급 or 2등급

1등급 또는 2등급 중에 하나이므로 or 수식을 써줍니다.

or(prop("내신등급") == "1등급", prop("내신등급") == "2등급")


2. 1등급 or 2등급 + 잘 정리됨 or 적당한 수준

1등급 또는 2등급이면서 동시에 '잘 정리됨' 또는 '적당한 수준'이 들어와야 하므로 '잘 정리됨'과 '적당한 수준'은 or을 쓰고,  등급과 개념은 and로 묶어줍니다.

and(or(prop("내신등급") == "1등급", prop("내신등급") == "2등급"), or(prop("개념") == "잘 정리됨", prop("개념") == "적당한 수준"))


3. 1등급 or 2등급 + 잘 정리됨 or 적당한 수준 + 80점 이상

1등급 또는 2등급이면서 동시에 잘 정리됨 또는 적당한 수준이면서 동시에 TEST결과는 80점 초과해야 하므로 등급 간에는 or, 개념 간에 or을 사용하고 등급, 개념, TEST 결과 3개를 동시에 만족시키는 and로 묶어줍니다.

and(and(or(prop("내신등급") == "1등급", prop("내신등급") == "2등급"), or(prop("개념") == "잘 정리됨", prop("개념") == "적당한 수준")), prop("TEST결과") > 80)


위와 같은 방식으로 각 코스별 함수를 모두 작성해줍니다.


B코스

and(and(or(prop("내신등급") == "1등급", prop("내신등급") == "2등급"), prop("개념") == "적당한 수준"), and(prop("TEST결과") <= 80, prop("TEST결과") > 70))


C코스

and(and(or(prop("내신등급") == "1등급", prop("내신등급") == "2등급"), or(prop("개념") == "적당한 수준", prop("개념") == "부족함")), and(prop("TEST결과") <= 70, prop("TEST결과") > 50))


C코스

and(and(prop("내신등급") == "3~4등급", or(prop("개념") == "적당한 수준", prop("개념") == "부족함")), and(prop("TEST결과") <= 80, prop("TEST결과") > 70))


D코스

and(and(prop("내신등급") == "3~4등급", prop("개념") == "부족함"), and(prop("TEST결과") <= 70, prop("TEST결과") > 50))


각 코스 별로 수식이 작동하는지 모두 확인한 후 정리하면 아래와 같습니다.


이제 각 조건에 맞는 코스 이름이 들어가도록 if수식을 넣어줍니다. if수식은 2가지 형태가 존재합니다.

A : if(조건, 참, 거짓)
B : 조건 ? 참 : 거짓

이해하기 쉬운 것은 A 형태이지만 작성하기 쉬운 것은 B 형태이므로 저는 B형태를 선호합니다. A코스부터 순차적으로 B형태에 대입해봅니다.


위에서 작성한 A코스 수식에서 색깔이 칠해져 있는 부분만 추가하면 수식이 적용되는지 확인할 수 있습니다.

and(and(or(prop("내신등급") == "1등급", prop("내신등급") == "2등급"), or(prop("개념") == "잘 정리됨", prop("개념") == "적당한 수준")), prop("TEST결과") > 80) ? "A코스" : "빈칸"



같은 방식으로 A코스에 B코스 수식을 더해봅시다. 위에 작성된 "빈칸"이라는 내용을 지우고 B코스 수식을 추가하면 됩니다. 아래와 같은 방식으로 말이죠.


주황색 수식은 B코스에 대한 수식이고, 청록색 수식은 B코스에 대한 if 수식입니다.

and(and(or(prop("내신등급") == "1등급", prop("내신등급") == "2등급"), or(prop("개념") == "잘 정리됨", prop("개념") == "적당한 수준")), prop("TEST결과") > 80) ? "A코스" : and(and(or(prop("내신등급") == "1등급", prop("내신등급") == "2등급"), prop("개념") == "적당한 수준"), and(prop("TEST결과") <= 80, prop("TEST결과") > 70)) ? "B코스" : "빈칸"


같은 방식으로 C, D코스를 모두 추가해줍니다. 마지막에는 빈칸 대신에 E코스를 넣어주면 앞에서 작성한 조건이 해당되지 않을 때는 모두 E코스로 표시됩니다.


and(and(or(prop("내신등급") == "1등급", prop("내신등급") == "2등급"), or(prop("개념") == "잘 정리됨", prop("개념") == "적당한 수준")), prop("TEST결과") > 80) ? "A코스" : (and(and(or(prop("내신등급") == "1등급", prop("내신등급") == "2등급"), prop("개념") == "적당한 수준"), and(prop("TEST결과") <= 80, prop("TEST결과") > 70)) ? "B코스" : (and(and(or(prop("내신등급") == "1등급", prop("내신등급") == "2등급"), or(prop("개념") == "적당한 수준", prop("개념") == "부족함")), and(prop("TEST결과") <= 70, prop("TEST결과") > 50)) ? "C코스" : (and(and(prop("내신등급") == "3~4등급", or(prop("개념") == "적당한 수준", prop("개념") == "부족함")), and(prop("TEST결과") <= 80, prop("TEST결과") > 70)) ? "C코스" : (and(and(prop("내신등급") == "3~4등급", prop("개념") == "부족함"), and(prop("TEST결과") <= 70, prop("TEST결과") > 50)) ? "D코스" : "E코스"))))


4. 수식 리뷰

이렇게 수식을 작성하다 보면 수식에 반드시 오류가 발생합니다. ')'를 빼먹었다던가, ','를 빼먹었다던가, and 수식에 인수가 너무 적다거나 하는 방식 등 말이죠. 그럴 때는 내가 작성한 수식을 리뷰할 수 있어야 합니다. 수식을 리뷰할 때는 코드 블록을 만들어 노션 데이터베이스에 있는 수식을 복사+붙여 넣기 하는데, 그냥 붙여 넣으면 코드가 쭉 이어져 있어서 한눈에 보기 어렵습니다.


그래서 아래와 같이 특정 구간에서 엔터를 쳐서 수식을 끊어주면 어떤 부분에서 수식이 잘못됐는지 쉽게 파악할 수 있습니다.


조건과 수식을 나란히 두고 하나씩 대조해보면 어떤 부분에서 잘못됐는지 파악할 수 있습니다.




5. 데이터베이스 꾸미기

아래 표처럼 원하는 수식을 모두 넣고 나면 원하는 방식으로 데이터베이스를 추가해주시면 데이터를 파악하기 훨씬 편리해집니다.





조직의 업무 효율 향상을 위한 강의, 컨설팅, 콘텐츠를 제작합니다.
강의 및 컨설팅 문의 : https://sireal.co
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari