Skip to main content
지식 관리·옵시디언

옵시디언 Bases 요약: 그룹별 합계와 빈값 개수를 검산하는 법

표의 숫자 합계가 맞아도 비어 있는 금액은 남을 수 있습니다. 다섯 노트의 실제 원본·Obsidian Desktop 1.14.4 화면을 비교해 Sum, 값 있는 행과 빈 행, 그룹별 범위를 검산합니다. 다른 볼트나 회계 정확성까지 보장하지 않습니다.

GTGem.tipsPublished
읽는 시간 : 약 7분 소요
두 그룹의 노트 다섯 장을 원본 표와 대조해 합계와 채워진 값의 수를 별도로 확인하는 개념 그림

옵시디언 Bases 표의 합계가 맞아 보여도 금액이 빈 노트가 있을 수 있습니다. 예를 들어 다섯 노트의 cost_demo가 12000, 8000, 빈값, 5000, 0이라면 이번 격리 실습의 전체 Sum은 25000이지만 cost_demo Filled는 4, Empty는 1이었습니다. 파일명 열의 Filled 5를 금액이 채워진 노트 다섯 개로 읽으면 빈값을 놓칩니다. 포함된 파일 목록 → 숫자 원문 → Sum/Filled/Empty → 그룹/뷰 범위 순서로 대조해 보세요.

이 수치는 2026년 10월 6일 KST, Obsidian Desktop 1.14.4의 별도 프로필·별도 볼트에서 코어 Bases Table로 확인한 시험값입니다. Sync와 Publish를 사용하지 않았고 사용자 볼트는 건드리지 않았습니다. 작은 다섯 행과 하나의 project 그룹에서 확인한 결과이므로 다른 버전·모바일·큰 볼트·결과 제한·회계 업무의 정확성을 보장하지 않습니다. Obsidian 공식 도움말은 Table의 열 요약이 현재 뷰에 보이는 행을 대상으로 하며 요약 설정은 뷰에 속한다고 설명합니다. Table view 도움말

합계와 ‘값이 있는 노트 수’는 왜 다른가요?

Sum은 숫자형 열의 합계, Filled는 그 열에 값이 있는 행의 개수, Empty는 값이 없는 행의 개수입니다. 어느 열을 요약하는지도 중요합니다. 이번 실습에서 file.name Filled는 표의 파일명 다섯 개를 세지만, cost_demo Filled는 금액이 채워진 네 개만 셉니다. 숫자 0은 빈값이 아닙니다. C의 cost_demo:처럼 키만 있고 값이 없으면 금액은 비어 있습니다. 이는 Obsidian Table 요약 정의와 시험 노트 원문·앱 화면을 함께 대조한 결과입니다.

격리 Obsidian Bases 전체 Filled 뷰에서 A부터 E까지 다섯 행, C의 빈 금액, E의 0, 이름 Filled 5와 cost_demo Filled 4가 보이는 실제 화면
실제 격리 앱의 전체 Filled 뷰. 이름 열은 5행이지만 금액 열은 값이 있는 4행입니다. C는 비어 있고 E의 0은 값으로 셉니다. 2026-10-06 앱 검증 캡처의 주변 여백만 잘랐습니다.

실측 화면 원본 크기로 보기

격리 Obsidian Bases 전체 Empty 뷰에서 C 금액 칸만 비고 E는 0으로 표시되며 cost_demo Empty 1이 보이는 실제 화면
같은 다섯 행의 실제 Empty 뷰에서 비어 있는 금액은 1개입니다. 0은 빈값이 아닙니다. 원본 캡처에서 표 영역만 잘랐습니다.

실측 화면 원본 크기로 보기

숫자 속성과 빈값·0은 어떻게 준비하나요?

예제를 본인 자료에 맞추려면 노트 폴더 경로, 그룹 키, 숫자 키를 바꿔야 합니다. 기존 볼트의 동명 속성 타입을 임의로 바꾸지 말고 별도 시험 볼트에서 시작하세요. Obsidian은 같은 이름의 속성에 볼트 전체에서 같은 타입을 사용합니다. 실습의 project는 Text, cost_demo는 Number로 앱에서 확인했습니다. Number 값에는 수식이 아니라 숫자 리터럴을 넣습니다. Properties 도움말

Cases 폴더 안에 A~E 다섯 Markdown 노트를 만들고 각각 맨 위 속성을 다음처럼 둡니다. C는 숫자 0이 아니라 빈 키로 유지합니다. 아래는 실제 격리 실습의 최초 원본을 간략히 표시한 것입니다. 파일명·폴더·속성 철자를 그대로 맞춰야 뒤의 설정이 같은 행을 찾습니다.

파일 project (Text) cost_demo (Number) 읽는 법
Cases/A.md A 12000 값 있음
Cases/B.md A 8000 값 있음
Cases/C.md A cost_demo: 뒤가 비어 있음 빈값
Cases/D.md B 5000 값 있음
Cases/E.md B 0 값 있는 숫자 0
원본 노트 다섯 장에서 포함 필터를 거쳐 세 장과 두 장의 두 그룹으로 나눈 뒤 요약 항목을 따로 보는 개념 흐름도
원본 노트와 포함 행을 먼저 대조하고 그룹·열 요약을 확인합니다. 범위 밖의 노트 한 장은 제외한 설명용 그림이며 실제 Bases 화면이나 수치 증거가 아닙니다.

예를 들면 C의 파일 첫머리는 다음과 같습니다.

---
project: A
cost_demo:
---

대조군 Other/control.md에는 project: A, cost_demo: 999999를 두었습니다. 실습 당시 이 파일도 있었지만 Cases 밖에 있어 표에는 포함되지 않았습니다. Summary.base는 Cases 폴더 밖에 두었습니다. 이 한 건이 합계에 섞여 들어가면 뒤의 표와 맞지 않으므로 범위 필터부터 점검하세요. Bases syntax 도움말

열 요약을 붙이고 프로젝트별로 어떻게 묶나요?

Obsidian 도움말의 UI 방식은 Table 열 머리글에서 Summarize…를 선택해 해당 열의 요약 함수를 고르는 것입니다. 그룹은 뷰의 Sort 메뉴에서 한 속성으로 묶을 수 있습니다. 다만 이번 재현 파일은 UI에서 열 머리글을 하나씩 클릭해 만든 것이 아니라, 아래 .base 설정을 작성한 다음 실제 앱에서 아홉 Table 뷰를 열어 행과 요약을 검증했습니다. 수동 YAML을 쓰지 않아도 같은 범위·열·함수·그룹을 UI로 구성할 수 있지만, 이 글은 UI 설정 과정을 전부 클릭 시험한 기록은 아닙니다. Table view · Views · Bases syntax

다음은 검증된 Summary.base의 설정 전문입니다. 전체/그룹/A 전용에서 각각 Sum·Filled·Empty를 비교하도록 서로 다른 아홉 뷰로 나누었습니다. 한 cost_demo 열에 세 요약을 동시에 붙인 설정은 아닙니다. file.name: Filled는 Filled 뷰에서만 따로 셉니다.

filters:
  and:
    - file.inFolder("Cases")
    - file.ext == "md"
views:
  - type: table
    name: 전체
    order:
      - file.name
      - project
      - cost_demo
    summaries:
      note.cost_demo: Sum
  - type: table
    name: 전체 Filled
    order:
      - file.name
      - project
      - cost_demo
    summaries:
      note.cost_demo: Filled
      file.name: Filled
  - type: table
    name: 전체 Empty
    order:
      - file.name
      - project
      - cost_demo
    summaries:
      note.cost_demo: Empty
  - type: table
    name: 그룹 Sum
    groupBy:
      property: note.project
      direction: ASC
    order:
      - file.name
      - project
      - cost_demo
    summaries:
      note.cost_demo: Sum
  - type: table
    name: 그룹 Filled
    groupBy:
      property: note.project
      direction: ASC
    order:
      - file.name
      - project
      - cost_demo
    summaries:
      note.cost_demo: Filled
      file.name: Filled
  - type: table
    name: 그룹 Empty
    groupBy:
      property: note.project
      direction: ASC
    order:
      - file.name
      - project
      - cost_demo
    summaries:
      note.cost_demo: Empty
  - type: table
    name: A Sum
    filters:
      and:
        - 'project == "A"'
    order:
      - file.name
      - project
      - cost_demo
    summaries:
      note.cost_demo: Sum
  - type: table
    name: A Filled
    filters:
      and:
        - 'project == "A"'
    order:
      - file.name
      - project
      - cost_demo
    summaries:
      note.cost_demo: Filled
      file.name: Filled
  - type: table
    name: A Empty
    filters:
      and:
        - 'project == "A"'
    order:
      - file.name
      - project
      - cost_demo
    summaries:
      note.cost_demo: Empty

표를 열어 전체에서 A~E 다섯 행이 보이는지 먼저 확인하세요. 그룹 Sum 등에서는 project별 A·B 묶음의 상단에 각 그룹 요약이 보이고, 표 전체 합계는 하단에 보입니다. 두 위치를 혼동하면 그룹 A의 20000을 전체 금액으로 잘못 읽습니다. Table view 도움말

격리 Obsidian Bases 그룹 Sum 뷰에서 project A 상단 20000, project B 상단 5000, 전체 하단 25000이 보이는 실제 화면
실제 그룹 Sum 뷰. A 그룹 상단 20000, B 그룹 상단 5000과 표 전체 하단 25000은 서로 다른 범위의 합계입니다. 원본 캡처에서 표 영역만 잘랐습니다.

실측 화면 원본 크기로 보기

전체·그룹·A 전용 뷰에서 무엇을 대조하나요?

아래 ‘원문 검산’은 최초 다섯 노트에서 별도로 더하고 센 값이고, ‘앱 관측’은 1.14.4 화면에서 읽은 값입니다. 단위는 설명용 숫자이며 실제 비용/통화가 아닙니다. 각 값을 보기 전에 포함 파일부터 확인합니다.

범위 포함 파일 원문 검산: Sum / cost Filled / cost Empty / name Filled 앱 관측: 같은 순서
전체 A·B·C·D·E 25000 / 4 / 1 / 5 25000 / 4 / 1 / 5
project A 그룹 A·B·C 20000 / 2 / 1 / 3 20000 / 2 / 1 / 3
project B 그룹 D·E 5000 / 2 / 0 / 2 5000 / 2 / 0 / 2
A 전용 뷰 A·B·C 20000 / 2 / 1 / 3 20000 / 2 / 1 / 3

A 그룹의 파일은 셋이지만 C의 금액이 비어 있어 file.name Filled 3과 cost_demo Filled 2가 다릅니다. B의 E에는 숫자 0이 들어 있어 cost_demo Filled 2에 포함되고 Sum에는 0을 더합니다. 대조군 999999는 어느 행에도 없습니다. 설정에서 전체 Base 필터는 Cases와 Markdown에 적용하고, A 전용 뷰는 여기에 project == "A" 조건을 덧붙입니다. 실제 재열기 뒤 전체(5행/25000) → A Sum(3행/20000) → 전체(5행/25000)로 전환해 다시 확인했습니다. 화면 전환 직후 이전 행이 잠깐 남는 프레임은 결과로 세지 않았습니다. Views 도움말 · Bases syntax 도움말

값을 바꾼 뒤 원본과 요약을 어떻게 확인하나요?

격리 앱 표에서 C의 빈 cost_demo 셀에 3000을 입력하자 Cases/C.md 원본이 cost_demo: 3000으로 저장됐습니다. 앱에서 전체 Sum 28000 / cost Filled 5 / Empty 0, A 그룹 Sum 23000 / Filled 3 / Empty 0이 관측됐고 B 그룹은 5000 / 2 / 0으로 유지됐습니다. 즉 셀의 값 변경은 노트 원본을 바꾸는 작업입니다. 반면 이 실습에서 뷰별 요약 설정을 변경·전환한 동안 최초 숫자 노트 내용은 바뀌지 않았습니다.

그 뒤 같은 격리 앱에서 C를 다시 빈값으로 만들고 저장된 원문을 확인했습니다. 이 복원은 테스트용 앱 DOM에 input/change/blur 이벤트를 전달하는 자동화로 확인한 결과이며, 일반 UI에서 키보드로 셀을 비우거나 되돌리는 절차를 검증한 것은 아닙니다. 복원한 C의 바이트와 SHA-256은 최초 원본과 같았고, 다른 네 노트·대조군도 최초 원본과 같았습니다. 앱 재시작 뒤에도 전체 25000 / 4 / 1, A 20000 / 2 / 1, B 5000 / 2 / 0으로 돌아온 화면을 확인했습니다. 이번 자동 입력 시도에서는 Backspace 키 이벤트로 셀을 비우지 못했지만, 이를 일반 키보드 조작의 실패로 볼 수는 없습니다. 본인의 데이터에서는 값을 바꾸기 전에 원문을 보존하고, 셀 편집 뒤 노트의 YAML·표 결과를 모두 확인하세요.

값이 맞지 않으면 ① 표에 포함된 실제 행과 폴더, ② project 철자와 그룹, ③ cost_demo 타입·YAML 숫자와 빈 키, ④ 0과 미입력의 차이, ⑤ 현재 뷰의 요약 함수, ⑥ 전환 뒤 결과 개수를 차례로 보세요. 합계가 맞아도 금액이 빈 노트가 남을 수 있습니다. 빈값이 없더라도 실제 업무의 모든 노트가 표에 포함됐다는 뜻은 아닙니다. 필터의 기본 범위가 궁금하다면 Bases 필터 범위 점검 안내를 참고하세요. 이 글은 필터 입문이 아니라 현재 포함된 행과 열 요약을 원본으로 검산하는 절차입니다.

In this article

Stay in the loop
Ready to think more clearly about the tools that matter?
New practical notes, no noise. Keep the useful ideas close.
Subscribe