날짜:
영화
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
노션 데이터베이스를 연결해서 쓰다 보면 관계형(Relation) 속성의 한계에 부딪히는 순간이 반드시 옵니다. 단순히 연결된 페이지의 개수를 세거나 합계를 구하는 건 롤업(Rollup)으로 가능한데, 특정 조건에 맞는 데이터만 쏙 뽑아오고 싶을 때는 롤업 버튼이 회색으로 비활성화되어 있어 답답했던 경험, 다들 있으실 거예요.
오늘은 노션 함수 2.0의 꽃이자, 관계형 데이터를 자유자재로 주무를 수 있게 해주는 map()과 filter() 함수에 대해 깊이 있게 파헤쳐 보겠습니다!
우리는 흔히 프로젝트 DB와 할 일 DB를 연결해서 사용합니다. 그리고 프로젝트 페이지에서 완료된 할 일의 개수만 보고 싶어 하죠. 하지만 롤업 기능을 켜보면 다음과 같은 답답한 상황에 직면하게 됩니다.
많은 분들이 이 단계에서 포기하고 그냥 눈으로 숫자를 세거나, 수동으로 입력을 하곤 해요. 하지만 map()과 filter()를 알면 이 문제를 단 한 줄의 수식으로 해결할 수 있습니다.
제가 컨설팅할 때 가장 반응이 좋았던 기능이니 꼭 집중해 주세요!
map() 함수는 쉽게 말해 리스트의 각 항목을 변환해 주는 함수입니다. 관계형 속성으로 연결된 데이터는 사실 하나의 리스트(List) 덩어리입니다. map()은 이 리스트 안으로 들어가서 우리가 원하는 특정 속성값만 쏙쏙 뽑아서 새로운 리스트로 만들어줍니다.
기본 구조와 작동 원리는 다음과 같습니다.
예를 들어 프로젝트와 연결된 할 일들의 작업 시간을 모두 가져오고 싶다면 이렇게 작성해 보세요.
map()이 데이터를 가져오는 역할이라면, filter()는 가져온 데이터 중에서 조건에 맞는 것만 남기는 거름망 역할을 합니다. 이 함수가 바로 롤업이 못하는 조건부 계산을 가능하게 해주는 핵심 열쇠입니다.
사용 방법은 map()과 매우 유사하지만, 결과가 참(True)인 것만 남긴다는 점이 다릅니다.
이 filter() 함수를 거치고 나면, 수십 개의 연결된 데이터 중 내가 보고 싶은 알짜배기 데이터만 리스트에 남게 됩니다.
이제 두 함수를 조합해서 실무에서 진짜 필요한 지표를 만들어볼게요. 가장 많이 요청하시는 기능인 특정 조건의 달성률 구하기를 예로 들어보겠습니다. 전체 할 일 중에서 완료된 할 일의 비율을 구하고 싶다면 다음과 같은 논리로 수식을 짜야 합니다.
이걸 응용하면 다음과 같은 고급 대시보드 구현이 가능해집니다.
이 강력한 함수들을 사용할 때 90%가 겪는 시행착오가 있습니다. 수식 창에서 에러가 뜬다면 다음 사항들을 먼저 체크해 보세요.
특히 관계형 속성이 비어있는 경우, 분모가 0이 되어 에러가 날 수 있습니다. 지난 포스팅에서 배운 empty()나 if() 함수를 섞어서 예외 처리를 해주면 훨씬 안정적인 시스템을 만들 수 있어요.
처음에는 current니 prop이니 하는 용어들이 낯설어서 어렵게 느껴질 수 있습니다. 하지만 이 map()과 filter()야말로 노션을 단순한 메모장에서 데이터베이스 관리 툴로 격상시켜 주는 일등 공신입니다.
오늘 당장 여러분의 프로젝트 페이지에 들어가서 죽어있는 롤업 속성들을 이 함수들로 교체해 보세요. 데이터가 살아 움직이는 것을 느끼실 수 있을 거예요!
댓글
댓글 쓰기