Notion 수식 구문 및 함수 | Notion 도움말 – Notion (노션) 도움말 센터
Notion 수식은 다양한 속성 유형과 함수를 지원하며, 텍스트, 숫자, 날짜, 사람 등 여러 데이터에 대해 연산·논리·조건·문자열·수학·날짜·리스트 처리 등을 수행할 수 있다. 주요 연산자는 +, -, *, % 등이며, if, contains, replace, round, now 등 풍부한 내장 함수가 제공되어 복잡한 로직을 간단히 구현한다.
수식으로 무엇을 하고 싶은지는 알지만 어떻게 작성해야 할지 모르시겠나요? Notion AI를 사용하여 수식을 만들고 편집할 수 있습니다. 자세히 알아보기 여기 →
Notion 수식에서는 다양한 속성과 함수를 사용할 수 있습니다. 아래에서 자세히 설명해 드릴게요.
수식은 거의 모든 속성 유형을 지원해요. 수식 유형은 속성 유형과 다르다는 것을 유의하세요.
| 속성 유형 | 예시 | 수식 유형 |
| 제목 | prop("Title")prop("Title").length() | 텍스트 |
| 텍스트 | prop("Text")prop("Text").length() | 텍스트 |
| 선택 | prop("Priority") == "High" | 텍스트 |
| 다중 선택 | prop("Tags").length()prop("Tags").includes("Finance") | 텍스트(리스트) |
| 체크박스 | prop("Checkbox")not prop("Checkbox") | 부울 |
| 이메일, URL, 전화번호 | !empty(prop("Phone"))!empty(prop("Email"))link("Call", "tel:" + prop("Phone")) | 텍스트 |
| 고유 ID | prop("Task ID").split("-").first() ← Prefixprop("Task ID").split("-").last() ← ID | 텍스트 |
| 생성자, 편집자 | prop("Created By").name()prop("Created By").email() | 사람 |
| 사람 | prop("Person")prop("Person").at(0).name()prop("Person").map(current.email()) | 사용자(리스트) |
| 날짜,생성 일시,최종 편집 일시 | prop("Due Date") > now()dateBetween(prop("Birthday"), now(), "days") | 날짜 |
| 숫자 | prop("Number") / 2pi() * prop("Radius") ^ 2 | 숫자 |
| 관계형 | prop("Tasks").length()prop("Tasks").filter(current.prop("Status") !== "Done") | 페이지(리스트) |
| 롤업 | prop("Purchases").length()prop("Average cost") * 12 | 숫자, 날짜 또는 리스트(유형 무관). 롤업에 따라 달라짐. |
빌트인은 계산을 표기하는 데 도움이 되도록 언어에 기본 제공되는 특정 기호와 값입니다.
| 빌트인 | 예시 |
| 수학 연산자: +, -, *, % | 2 * pi()"hello" + "world" |
| 부울 값: true, false | truefalse |
| 비교 연산자: ==, >, >=, <, <= | 123 == 123 = true"Notion" == "Motion" = false |
| 논리 연산자: and, or, not | and:true and falsetrue && falseand(true, false)or:true or falsetrue || falseor(true, false)not:not true!true |
| 삼항 연산자: ? : | X ? Y : Z는 if(X, Y, Z)와 같음 |
Notion 수식에서는 아래와 같은 함수를 지원합니다.
| 이름 | 설명 | 예시 |
| if | 조건이 TRUE이면 첫 번째 값을 반환하고 FALSE이면 두 번째 값을 반환합니다. | if(true, 1, 2) = 1if(false, 1, 2) = 2prop("Checked") == true ? "Complete" : "Incomplete" |
| ifs | 첫 번째 TRUE 조건에 해당하는 값을 반환합니다. 여러 개의 중첩된 if() 문 대신 사용할 수 있습니다. | ifs(true, 1, true, 2, 3) = 1ifs(false, 1, false, 2, 3) = 3 |
| empty | 값이 비어 있으면 TRUE를 반환합니다. 0, “”, [] 기호는 비어 있는 것으로 간주합니다. | empty(0) = trueempty([]) = true |
| length | 텍스트 또는 리스트 값의 길이를 반환합니다. | length("hello") = 5length([1, 2, 3]) = 3 |
| substring | 시작 색인(포함)부터 끝 색인(선택적, 제외)까지 텍스트에서 하위 문자열을 반환합니다. | substring("Notion", 0, 3) = "Not"substring("Notion", 3) = "ion" |
| 값을 포함하는 데이터 | 값에 검색 문자열이 있으면 TRUE를 반환합니다. | contains("Notion", "ot") = true |
| test | 값이 정규식과 일치하면 TRUE를, 일치하지 않으면 FALSE를 반환합니다. | test("Notion", "Not") = truetest("Notion", "\\d") = false |
| match | 정규식의 모든 일치 항목을 리스트로 반환합니다. | match("Notion Notion", "Not") = ["Not", "Not"]match("Notion 123 Notion 456", "\\d+") = ["123", "456"] |
| replace | 정규식의 첫 번째 일치 항목을 대체할 값으로 바꿉니다. | replace("Notion Notion", "N", "M") = "Motion Notion" |
| replaceAll | 정규식의 모든 일치 항목을 대체할 값으로 바꿉니다. | replaceAll("Notion Notion", "N", "M") = "Motion Motion"replaceAll("Notion 123", "\\d", "") = "Notion" |
| lower | 텍스트를 소문자로 변환합니다. | lower("NOTION") = "notion" |
| upper | 텍스트를 대문자로 변환합니다. | upper("notion") = "NOTION" |
| repeat | 주어진 횟수만큼 텍스트를 반복합니다. | repeat("0", 4) = "0000"repeat("~=", 10) = "~=~=~=~=~=~=~=~=~=~=" |
| link | 레이블 텍스트와 URL에서 하이퍼링크를 만듭니다. | |
| style | 텍스트에 스타일과 색상을 추가합니다. 유효한 서식 스타일: "b"(굵게), "u"(밑줄), "i"(기울임꼴), "c"(코드), "s"(취소선). 유효한 색상: "gray", "brown", "orange", "yellow", "green", "blue", "purple", "pink", "red". 배경색을 설정하려면 색상에 "_background"를 추가하세요. | style("Notion", "b", "u") = "Notion" style("Notion", "blue", "gray_background") |
| unstyle | 텍스트에서 서식 스타일을 제거합니다. 특정 스타일을 지정하지 않으면 모든 스타일이 제거됩니다. | unstyle("Text")unstyle("Text", "b") |
| format | 텍스트 형식으로 값을 반환합니다. | format(1234) = "1234"format(now()) = "August 30, 2023 17:55" |
| add | 두 숫자의 합을 반환합니다. | add(5, 10) = 155 + 10 = 15 |
| subtract | 두 숫자의 차를 반환합니다. | subtract(5, 10) = -55 - 10 = -5 |
| multiply | 두 숫자의 곱을 반환합니다. | multiply(5, 10) = 505 * 10 = 50 |
| mod | 첫 번째 수를 두 번째 수로 나누었을 때 나머지를 반환합니다. | mod(5, 10) = 55 % 10 = 5 |
| pow | 밑수를 지수만큼 거듭제곱한 결과를 반환합니다. | pow(5, 10) = 97656255 ^ 10 = 9765625 |
| divide | 두 숫자를 나눈 몫을 반환합니다. | divide(5, 10) = 0.55 / 10 = 0.5 |
| min | 인수 중 가장 작은 수를 반환합니다. | min(1, 2, 3) = 1min([1, 2, 3]) = 1 |
| max | 인수 중 가장 큰 수를 반환합니다. | max(1, 2, 3) = 3max([1, 2, 3]) = 3 |
| sum | 인수의 합을 반환합니다. | sum(1, 2, 3) = 6sum([1, 2, 3], 4, 5) = 15 |
| 중앙값 | 인수의 중간값을 반환합니다. | median(1, 2, 4) = 2median([1, 2, 3], 4) = 2.5 |
| 평균 | 인수의 산술 평균을 반환합니다. | mean(1, 2, 3) = 2mean([1, 2, 3], 4, 5) = 3 |
| abs | 수의 절댓값을 반환합니다. | abs(10) = 10abs(-10) = 10 |
| round | 숫자를 가장 가까운 정수로 반올림한 값을 반환합니다. 하나 또는 두 개의 인수를 지원합니다. 두 개의 인수를 사용하는 경우, 첫 번째는 값이고 두 번째는 반올림할 소수점 자릿수입니다. | round(0.4) = 0round(-0.6) = -1round(1.234, 0) = 1round(1.234, 2) = 1.23round(1234, -2) = 1200 |
| ceil | 지정한 수보다 크거나 같은 수 중 가장 작은 정수를 반환합니다. | ceil(0.4) = 1ceil(-0.6) = 0 |
| floor | 지정한 수보다 작거나 같은 수 중 가장 큰 정수를 반환합니다. | floor(0.4) = 0floor(-0.6) = -1 |
| sqrt | 수의 양의 제곱근을 반환합니다. | sqrt(4) = 2sqrt(7) = 2.6457513110645907 |
| cbrt | 수의 세제곱근을 반환합니다. | cbrt(9) = 2.080083823051904cbrt(64) = 4 |
| exp | e^x를 반환합니다. 여기서 x는 인수이고, e는 자연로그의 밑인 오일러 상수(2.718…)입니다. | exp(1) = 2.718281828459045exp(-1) = 0.36787944117144233 |
| ln | 수의 자연로그를 반환합니다. | ln(2.718281828459045) = 1ln(10) = 2.302585092994046 |
| log10 | 수의 밑이 10인 로그를 반환합니다. | log10(10) = 1log10(100000) = 5 |
| log2 | 수의 밑이 2인 로그를 반환합니다. | log2(4) = 2log2(1024) = 10 |
| 표지판 | 수가 양수이면 1을, 음수이면 -1을, 0이면 0을 반환합니다. | sign(-10) = -1sign(10) = 1 |
| pi | 원주율을 반환합니다. | pi() = 3.141592653589793 |
| e | 자연로그의 밑을 반환합니다. | e() = 2.718281828459045 |
| toNumber | 텍스트에서 숫자를 구문 분석합니다. | toNumber("2") = 2toNumber(now()) = 1693443300000toNumber(true) = 1 |
| now | 현재 날짜와 시간을 반환합니다. | now() = @August 30, 2023 5:55 PM |
| 오늘 | 시간을 제외한 현재 날짜를 반환합니다. | today() = @2024년 4월 19일 |
| minute | 날짜의 분을 반환합니다(0~59). | minute(parseDate("2023-07-10T17:35Z")) = 35 |
| hour | 날짜의 시간을 반환합니다(0~23). | hour(parseDate("2023-07-10T17:35Z")) = 17 |
| day | 날짜의 요일을 1(월요일)부터 7(일요일)까지의 숫자로 반환합니다. | day(parseDate("2023-07-10T17:35Z")) = 1 |
| date | 날짜의 일을 반환합니다(1~31). | date(parseDate("2023-07-10T17:35Z")) = 10 |
| week | 날짜가 한 해의 몇 번째 주인지 ISO 형식으로 반환합니다(1~53). | week(parseDate("2023-01-02")) = 1 |
| month | 날짜의 월을 반환합니다(1-12). | month(parseDate("2023-07-10T17:35Z")) = 7 |
| year | 날짜의 연도를 반환합니다. | year(now()) = 2023 |
| dateAdd | 날짜에 시간을 추가합니다. 사용 가능한 단위 인수: "years", "quarters", "months", "weeks", "days", "hours", "minutes" | dateAdd(now(), 1, "days") = @August 31, 2023 5:55 PMdateAdd(now(), 2, "months") = @October 30, 2023 5:55 PMdateAdd(now(), 3, "years") = @August 30, 2026 5:55 PM |
| dateSubtract | 날짜에서 시간을 뺍니다. 사용 가능한 단위 인수: "years", "quarters", "months", "weeks", "days", "hours", "minutes" | dateSubtract(now(), 1, "days") = @August 29, 2023 5:55 PMdateSubtract(now(), 2, "months") = @June 30, 2023 5:55 PMdateSubtract(now(), 3, "years") = @August 30, 2020 5:55 PM |
| dateBetween | 두 날짜의 차를 반환합니다. 사용 가능한 단위 인수: "years", "quarters", "months", "weeks", "days", "hours", "minutes" | dateBetween(now(), parseDate("2022-09-07"), "days") = 357dateBetween(parseDate("2030-01-01"), now(), "years") = 6 |
| dateRange | 시작 날짜와 종료 날짜로 구성된 기간을 반환합니다. | dateRange(prop("Start Date"), prop("End Date")) = @September 7, 2022 → September 7, 2023 |
| dateStart | 기간의 시작일을 반환합니다. | dateStart(prop("Date Range")) = @September 7, 2022dateBetween(dateStart(prop("Date Range")), dateEnd(prop("Date Range")), "days") = -365 |
| dateEnd | 기간의 종료일을 반환합니다. | dateEnd(prop("Date range")) = @September 7, 2023dateBetween(dateEnd(prop("Date Range")), dateStart(prop("Date Range")), "days") = 365 |
| timestamp | 1970년 1월 1일 이후로 경과한 시간을 밀리초 단위로 나타내는 현재의 Unix 타임스탬프를 반환합니다. | timestamp(now()) = 1693443300000 |
| fromTimestamp | 주어진 Unix 타임스탬프에서 날짜를 반환합니다. 타임스탬프는 1970년 1월 1일 이후로 경과한 밀리초를 나타냅니다. 참고: 반환되는 날짜에는 초와 밀리초가 포함되지 않습니다. | fromTimestamp(1689024900000) = @July 10, 2023 2:35 PM |
| formatDate | 사용자가 지정한 형식의 문자열로 날짜 형식을 지정합니다. 날짜의 각 부분을 나타내기 위해 연도는 "YYYY", 월은 "MM", 일은 "DD", 시간은 "h" , 분은 "mm" 텍스트를 형식 문자열에 포함할 수 있습니다. | formatDate(now(), "MMMM D, Y") = "August 30, 2023"formatDate(now(), "MM/DD/YYYY") = "08/30/2023"formatDate(now(), "h:mm A") = "17:55 PM" |
| formatNumber | ㅤ | "Revenue: " + formatNumber(prop("Number"), "usd", 0).style("green") |
| parseDate | ISO 8601 표준에 따라 구문 분석된 날짜를 반환합니다. | parseDate("2022-01-01") = @January 1, 2022parseDate("2022-01-01T00:00Z") = @December 31, 2021 4:00 PM |
| name | 사람의 이름을 반환합니다. | name(prop("Created By"))prop("Pioneers").map(name(current)).join(", ") = "Grace Hopper, Ada Lovelace" |
| 이메일 | 사람의 이메일 주소를 반환합니다. | email(prop("Created By"))prop("People").map(email(current)).join(", ") |
| at | 리스트에서 지정된 인덱스의 값을 반환합니다. | at([1, 2, 3], 1) = 2 |
| first | 리스트의 첫 번째 항목을 반환합니다. | first([1, 2, 3]) = 1 |
| last | 리스트의 마지막 항목을 반환합니다. | last([1, 2, 3]) = 3 |
| slice | 제공된 시작 색인(포함)부터 끝 색인(선택적, 제외)까지 리스트의 항목을 반환합니다. | slice([1, 2, 3], 1, 2) = [2]slice(["a", "b", "c"], 1) = ["b", "c"] |
| concat | 여러 리스트의 연결을 반환합니다. | concat([1, 2], [3, 4]) = [1, 2, 3, 4]concat(["a", "b"], ["c", "d"]) = ["a", "b", "c", "d"] |
| sort | 리스트를 정렬된 순서로 반환합니다. | sort([3, 1, 2]) = [1, 2, 3] |
| reverse | 역순의 리스트를 반환합니다. | reverse(["green", "eggs", "ham"]) = ["ham", "eggs", "green"] |
| join | 각 값 사이에 조이너(joiner)를 포함하여 리스트의 값을 반환합니다. | join(["a", "b", "c"], ", ") = "a, b, c"join(["dog", "go"], "") = "doggo" |
| split | 텍스트 입력을 구분 기호로 분할하여 만들어진 값의 리스트를 반환합니다. | split("apple,pear,orange", ",") = ["apple", "pear", "orange"] |
| unique | 입력 리스트에서 고유값의 리스트를 반환합니다. | unique([1, 1, 2]) = [1, 2] |
| includes | 리스트에 지정된 값이 있으면 TRUE를, 없으면 FALSE를 반환합니다. | includes(["a", "b", "c"], "b") = trueincludes([1, 2, 3], 4) = false |
| find | 리스트에서 조건이 TRUE로 계산되는 첫 번째 항목을 반환합니다. | find(["a", "b", "c"], current == "b") = "b"find([1, 2, 3], current > 100) = Empty |
| findIndex | 리스트에서 조건이 TRUE인 첫 번째 항목의 인덱스를 반환합니다. | findIndex(["a", "b", "c"], current == "b") = 1findIndex([1, 2, 3], current > 100) = -1 |
| filter | 리스트에서 조건이 TRUE인 값을 반환합니다. | filter([1, 2, 3], current > 1) = [2, 3]filter(["a", "b", "c"], current == "a") = ["a"] |
| some | 리스트의 항목 중 주어진 조건을 충족하는 항목이 있으면 TRUE를, 없으면 FALSE를 반환합니다. | some([1, 2, 3], current == 2) = truesome(["a", "b", "c"], current.length > 2) = false |
| every | 리스트의 모든 항목이 주어진 조건을 충족하면 TRUE를, 아니면 FALSE를 반환합니다. | every([1, 2, 3], current > 0) = trueevery(["a", "b", "c"], current == "b") = false |
| map | 입력 리스트의 모든 항목에 표현식을 호출한 결과가 채워진 리스트를 반환합니다. | map([1, 2, 3], current + 1) = [2, 3, 4]map([1, 2, 3], current + index) = [1, 3, 5] |
| flat | 리스트의 리스트를 하나의 리스트로 획일화합니다. | flat([1, 2, 3]) = [1, 2, 3]flat([[1, 2], [3, 4]]) = [1, 2, 3, 4] |
| id | 현재 페이지의 ID를 반환합니다. 페이지 ID가 없는 경우, 수식이 있는 페이지의 ID를 반환합니다. | id()id(prop("Relation").first()) |
| equal | 두 값이 같으면 TRUE를, 다르면 FALSE를 반환합니다. | equal(1, 1) = true"a" == "b" = false |
| unequal | 두 값이 같으면 FALSE를, 다르면 TRUE를 반환합니다. | unequal(1, 2) = true"a" != "a" = false |
| let | 변수에 값을 할당하고 해당 변수를 사용하여 표현식을 계산합니다. | let(person, "Alan", "Hello, " + person + "!") = "Hello, Alan!"let(radius, 4, round(pi() * radius ^ 2)) = 50 |
| lets | 여러 변수에 값을 할당하고 해당 변수를 사용하여 표현식을 계산합니다. | lets(a, "Hello", b, "world", a + " " + b) = "Hello world"lets(base, 3, height, 8, base * height / 2) = 12 |
| trim | 텍스트의 시작과 끝에서 공백을 제거합니다. | " notion ".trim() = "notion" |