Dataview로 인라인 테이블 구성하기


저는 obsidian의 dataview를 사용하는 것을 좋아합니다. Notion-like로 문서를 관리하는 것에는 분명 장점을 느끼긴 하지만, 필요 이상으로 파일량을 증가시키는 게 산만하게 느껴지고 또 테이블은 옵시디언에서 사용하기에는 좀 불편합니다. 데이터베이스 연동을 고민하다가, 그것도 귀찮아서 색다른 방법을 찾아보게 되었습니다.

이 방법은 단일 md파일에 데이터를 heading과 list 형태로 구성하고, 그 결과를 dataview형태로도 충력하는 것이 목적입니다.

사전 준비

meta function 사용하기 위해서, 정식 release된 dataview가 아닌 BRAT를 사용한 개발 버전 설치가 필요합니다.

해당 버전이 아니시라면 dataview 제거 후 BRAT플러그인을 먼저 설치하시고, brat커멘드로 깃 리포지토리(https://github.com/blacksmithgu/obsidian-dataview)를 입력하여 직접 추가가 가능합니다.

[!NOTE] 참고 BRAT 플러그인 추가 방법은 분석맨님 블로그에 잘 설명이 되어 있으니 참고하시면 좋을 것 같습니다.

예시 및 설명

샘플 데이터

## part 1
- Time:: 14:00
- Scene:: DT-01.01.01
- Summary:: Summary 1

## part 2
- Time:: 16:00
- Scene:: DT-01.01.02
- Summary:: Summary 2

## part 3
- Time:: 22:00
- Scene:: DT-01.01.03
- Summary:: Summary 3

heading을 가진 part 로 시작하는 제목 아래에 Time, Scene, Summary가 공통으로 존재하는 데이터를 표 형태로 뽑아보겠습니다.

표시방법

TABLE WITHOUT ID  rows.L.Time[0] as Time, rows.L.Scene[1] as Scene, rows.L.Summary[2] as Summary
FROM "Work"
WHERE file.path=this.file.path
FLATTEN file.lists AS L
WHERE contains(meta(L.section).subpath, "part")
GROUP BY file.name + meta(L.section).subpath
SORT rows.file.name ASC

설명

예시2

원본 데이터

### 파일 관리 도구
#### Unlocker
- url::https://unlocker.softonic.kr/
- description::다른 프로세스에서 사용 중인 파일을 잠금 해제하고 삭제하는 유틸리티
- category::📁 파일 관리
- necessary::false

#### 7-Zip
- url::https://www.7-zip.org/download.html
- description::높은 압축 비율을 자랑하는 오픈소스 파일 아카이버
- category::📁 파일 관리
- necessary::true

### 개발 도구
#### WinMerge
- url::https://winmerge.org/downloads/?lang=ko
- description::파일 및 디렉토리에 대한 시각적 차이 표시 및 병합을 위한 도구
- category::🔧 개발
- necessary::true

#### Visual Studio Code
- url::https://code.visualstudio.com/docs/?dv=win64user
- description::다양한 언어 및 프레임워크를 지원하는 강력하고 다재다능한 코드 편집기
- category::🔧 개발
- necessary::true

#### PyCharm
- url::https://www.jetbrains.com/ko-kr/pycharm/download/?section=windows
- description::파이썬 프로그래밍을 위한 통합 개발 환경(IDE)
- category::🔧 개발
- necessary::true

#### IntelliJ IDEA
- url::https://www.jetbrains.com/ko-kr/idea/download/?section=windows
- description::자바 개발 및 기타 언어를 위한 종합적인 통합 개발 환경(IDE)
- category::🔧 개발
- necessary::true

일단 예제를 설명하기 위한 일부만 가져 왔습니다.

dataview script

TABLE WITHOUT ID rows.L.category[2] as Category, 
choice(rows.L.necessary[3] , "✅", "✖ ") as "Necessary",
elink(rows.L.url[0], title) as "Name and URL", 
rows.L.description[1] as Description, 
link("####"+title, "⚙️") as Link
WHERE file.path=this.file.path
WHERE file.lists
FLATTEN file.lists AS L
GROUP BY meta(L.section).subpath as title
SORT rows.L.necessary[3] DESC
SORT rows.L.category[2] DESC

설명

결과

한계

다만 이 방법대로 한다면, 로딩에 시간이 꽤 걸린다는 분명한 한계가 존재하니 선택적으로 적용하시기 바랍니다. 사실 속도 때문에 그냥 Advance Table로 만족해야 하나 고민도 됩니다.

옵시디언 공홈 에도 데이터베이스에 대한 개발 로드맵이 있던데, 얼른 적용됐으면 좋겠네요.

그리고 더 좋은 방법이 있으시거나 의견 있으시다면 공유 부탁드립니다:)

참고