[Notion] 노션으로 간단한 투표 시스템 만들기

노션의 replaceAll, length 함수를 응용해 Person 속성(Property)에 추가한 Member(사람) 숫자만큼 통계를 내어 간단한 투표 시스템을 만들 수 있다. 이를 이용해 아이디어, 장소 투표 등 다양한 상황에서 활용할 수 있다.
🔎 투표 시스템 완성본 예시

🔎 설정 방법
- Table 포맷의 Database 생성 (
/table입력) - 투표 항목(Name), 예산(Number), 투표자(People), 득표수(Formula) 속성 추가
- 득표수(Formula)에 아래 수식 복사 → 붙여 넣기
if(empty(prop("투표자")), "❗️투표해주세요!", format(length(replaceAll(prop("투표자"), "[^,]", "")) + 1))
✏️ Formula(함수) 설명
노션 Formula(함수)는 한 가지 방법만 사용해선 원하는 속성(Property) 값을 직접 반환할 수 없다. 투표자의 인원수를 노션의 함수를 이용해 통계 낼 수 있는 방법은 없는 걸까? 일단 득표수 속성을 만들어 함숫값을 prop("투표자")로 입력해 보자. 그럼 아래와 같은 결과 값을 얻는다.

3명의 멤버가 투표했을 때: Member A, Member B, Member C
2명의 멤버가 투표했을 때: Member A, Member B
1명의 멤버가 투표했을 때: Member A
멤버와 멤버 사이에 콤마(,)가 들어가 있다. 3명의 투표자라면 2개의 콤마가, 2명의 투표자라면 1개의 콤마가 생성된다. 만약 100명의 투표자라면 99개의 콤마가 생길 것이다. 이 콤마의 개수를 합한 것에 1을 더한 값이 바로 투표한 인원수가 된다. 그럼 어떤 함수를 사용해야 콤마를 숫자로 반환할 수 있을까? 바로 replaceAll() 함수다.
✏️ replaceAll 함수 설명

replaceAll은 말 그대로 뭔가를 Replace(대체) 해주는 함수다. 노션의 Formula 설명을 보면 일치하는 모든 항목을 새로운 값으로 대체해 준다고 적혀있다. 이렇게만 봐선 무슨 말인지 잘 모르겠다. 아래 예제를 조금만 살펴보면 이해하기 쉽다.
replaceAll("1-2-3", "-", "!") == "1!2!3"
1-2-3 값에 있는 하이픈(-)을 모두 느낌표(!)로 대체하라는 뜻이다. 그럼 1!2!3 결괏값이 나온다. replaceAll 함수를 득표수 수식(Formula) 속성에 적용해 보면 아래 이미지와 같은 값을 얻는다.
replaceAll(prop("투표자"), ",", "!")

득표수 Formula에 prop("투표자")만 입력했을 땐 Member A, Member B 이런 식으로 멤버와 멤버 사이에 콤마(,)가 생기지만, replaceAll 함수를 사용하면 콤마(,)를 모두 느낌표(!)로 대치시킨다.
이제부터 [^abc] "정규 표현식"이라는 것을 활용해야 한다. 정규 표현식은 regexp로도 불리는데 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 언어(라고 되어있)다. 더 자세한 내용은 링크를 참조하면 된다. 간단히 말하면 투표자 속성의 값을 정규 표현식을 사용하여 표현한다는 것이다. 득표수 속성에 아래 수식을 입력해 보자.
replaceAll(prop("투표자"), "[^,]", "!")
그럼 아래와 같은 값을 얻는다. 정규 표현식으로 표현한 투표자 이름이 모두 느낌표로 대체됐다.

투표한 인원수를 구하려면 몇 개의 콤마가 있는지만 알면 되므로, 결과값에 콤마만 나오면 된다. 대체할 값에 넣었던 느낌표를 지워 아래 같이 입력해 준다.
replaceAll(prop("투표자"), "[^,]", "")

드디어 우리가 원하는 콤마 값만 반환했다. 이제 이 콤마가 몇 개인지 계산해 주는 일만 남았다.
✏️ 콤마 개수 구하기
length 함수는 속성의 길이를 계산(반환)하는 함수다. 이 length 함수를 사용하면 간단하게 콤마의 개수를 구할 수 있다. 득표수 수식에 아래와 같이 입력해 준다.
length(replaceAll(prop("투표자"), "[^,]", ""))

드디어 콤마의 개수를 구했다. 만약 투표자가 2명이라면 Member A와 Member B 사이에 콤마 1개가 생성되므로 우리가 원하는 값 보다 1이 더 적다. 따라서 아래처럼 1을 더해줘야 한다.
length(replaceAll(prop("투표자"), "[^,]", "")) + 1
✏️ IF 함수 추가
기존 수식은 결과값에 항상 1을 더하기 때문에 아무도 투표하지 않은 항목의 득표수도 1로 표시된다. if 함수를 활용하면 이 문제를 해결할 수 있다. 아래 함수를 복사/붙여넣어 보자.
if(empty(prop("투표자")), "❗️투표해주세요!", format(length(replaceAll(prop("투표자"), "[^,]", "")) + 1))

이 수식은 투표자 속성 값이 비어 있으면 "❗️투표해주세요!" 문구를 표시하고, 값이 있으면 투표자 인원수(콤마 개수 + 1)를 표시한다는 뜻이다. 조건이 참(true)일 때 반환하는 "❗️투표해주세요!"가 텍스트 형식이므로, 조건이 거짓(false)일 때 반환하는 length(replaceAll(...)) + 1 역시 텍스트 형식으로 맞춰야 오류가 발생하지 않는다. 이를 위해 숫자 결과를 텍스트 포맷으로 변환하는 format 함수로 감싸준 것이다.
'⌚️ Productivity' 카테고리의 다른 글
| [Notion] 노션 여러개의 페이지를 하나로 합치는 방법 (2) | 2020.02.27 |
|---|---|
| [Mac OS] 맥 마우스 우클릭 메뉴를 윈도우처럼 사용하기 - iRightMouse (5) | 2020.02.27 |
| [Notion] 노션으로 빠르게 메모하는 방법 (6) | 2020.02.15 |
| Apple 애플의 온라인 박물관 — The Apple Archive (4) | 2020.02.11 |
| [Notion] 노션으로 앱, 소프트웨어 구독 관리하기 (17) | 2020.02.05 |
댓글
이 글 공유하기
다른 글
-
[Notion] 노션 여러개의 페이지를 하나로 합치는 방법
[Notion] 노션 여러개의 페이지를 하나로 합치는 방법
2020.02.27 -
[Mac OS] 맥 마우스 우클릭 메뉴를 윈도우처럼 사용하기 - iRightMouse
[Mac OS] 맥 마우스 우클릭 메뉴를 윈도우처럼 사용하기 - iRightMouse
2020.02.27 -
[Notion] 노션으로 빠르게 메모하는 방법
[Notion] 노션으로 빠르게 메모하는 방법
2020.02.15 -
Apple 애플의 온라인 박물관 — The Apple Archive
Apple 애플의 온라인 박물관 — The Apple Archive
2020.02.11