---
title: Obsidian Bases
description: Loob ja muudab Obsidian Basesi faile vaadete, filtrite ja valemitega.
category: Productivity
sublabel: Obsidian
author: kepano (Steph Ango)
tags: 
license: MIT
source: https://github.com/kepano/obsidian-skills
---

# Obsidian Bases oskus

## Töövoog

1. **Loo fail**: Loo vaulti `.base` fail kehtiva YAML-sisuga
2. **Määra ulatus**: Lisa `filters`, et valida, millised märkmed ilmuvad (sildi, kausta, omaduse või kuupäeva järgi)
3. **Lisa valemid** (valikuline): Määra arvutatud omadused jaotises `formulas`
4. **Seadista vaated**: Lisa üks või mitu vaadet (`table`, `cards`, `list` või `map`) koos `order`-iga, mis määrab, milliseid omadusi kuvada
5. **Valideeri**: Kontrolli, et fail on kehtiv YAML ilma süntaksivigadeta. Kontrolli, et kõik viidatud omadused ja valemid on olemas. Tavalised probleemid: tsiteerimata stringid, mis sisaldavad YAML-i erimärke, mitteklapivad jutumärgid valemites, viitamine `formula.X`-ile ilma `X`-i määratlemata jaotises `formulas`
6. **Testi Obsidianis**: Ava `.base` fail Obsidianis, et kinnitada, et vaade renderdub õigesti. Kui kuvatakse YAML-viga, kontrolli allpool olevaid tsiteerimisreegleid

## Skeema

Base-failid kasutavad laiendit `.base` ja sisaldavad kehtivat YAML-i.

```yaml
# Global filters apply to ALL views in the base
filters:
  # Can be a single filter string
  # OR a recursive filter object with exactly ONE key: and, or, or not
  and:
    - 'status == "active"'
    - not:
        - 'file.hasTag("archived")'

# Define formula properties that can be used across all views
formulas:
  formula_name: 'expression'

# Configure display names and settings for properties
properties:
  property_name:
    displayName: "Display Name"
  formula.formula_name:
    displayName: "Formula Display Name"
  file.ext:
    displayName: "Extension"

# Define custom summary formulas
summaries:
  custom_summary_name: 'values.mean().round(3)'

# Define one or more views
views:
  - type: table | cards | list | map
    name: "View Name"
    limit: 10                    # Optional: limit results
    groupBy:                     # Optional: group results
      property: property_name
      direction: ASC | DESC
    filters:                     # View-specific filters follow the same rules
      and:
        - 'status == "active"'
    order:                       # Properties to display in order
      - file.name
      - property_name
      - formula.formula_name
    summaries:                   # Map properties to summary formulas
      property_name: Average
```

## Filtri süntaks

Filtrid kitsendavad tulemusi. Neid saab rakendada globaalselt või vaate kohta.

### Filtri struktuur

```yaml
# Single filter
filters: 'status == "done"'

# AND - all conditions must be true
filters:
  and:
    - 'status == "done"'
    - 'priority > 3'

# OR - any condition can be true
filters:
  or:
    - 'file.hasTag("book")'
    - 'file.hasTag("article")'

# NOT - exclude matching items
filters:
  not:
    - 'file.hasTag("archived")'

# Nested filters
filters:
  or:
    - file.hasTag("tag")
    - and:
        - file.hasTag("book")
        - file.hasLink("Textbook")
    - not:
        - file.hasTag("book")
        - file.inFolder("Required Reading")
```

### Filtri operaatorid

| Operaator | Kirjeldus |
|----------|-------------|
| `==` | võrdub |
| `!=` | ei võrdu |
| `>` | suurem kui |
| `<` | väiksem kui |
| `>=` | suurem või võrdne |
| `<=` | väiksem või võrdne |
| `&&` | loogiline ja |
| `\|\|` | loogiline või |
| <code>!</code> | loogiline eitus |

## Omadused

### Kolm omaduste tüüpi

1. **Märkme omadused** — Frontmatterist: `note.author` või lihtsalt `author`
2. **Faili omadused** — Faili metaandmed: `file.name`, `file.mtime` jne
3. **Valemi omadused** — Arvutatud väärtused: `formula.my_formula`

### Faili omaduste viide

| Omadus | Tüüp | Kirjeldus |
|----------|------|-------------|
| `file.name` | String | Faili nimi |
| `file.basename` | String | Faili nimi ilma laiendita |
| `file.path` | String | Täielik tee failini |
| `file.folder` | String | Vanemkausta tee |
| `file.ext` | String | Faililaiend |
| `file.size` | Number | Faili suurus baitides |
| `file.ctime` | Date | Loomise aeg |
| `file.mtime` | Date | Muutmise aeg |
| `file.tags` | List | Kõik sildid failis |
| `file.links` | List | Sisemised lingid failis |
| `file.backlinks` | List | Failid, mis sellele failile lingivad |
| `file.embeds` | List | Manused märkmes |
| `file.properties` | Object | Kõik frontmatteri omadused |

### Märksõna `this`

- Põhisisualal: viitab base-failile endale
- Manustatuna: viitab manustavale failile
- Külgribas: viitab aktiivsele failile põhisisus

## Valemi süntaks

Valemid arvutavad väärtusi omadustest. Määratletud jaotises `formulas`.

```yaml
formulas:
  # Simple arithmetic
  total: "price * quantity"

  # Conditional logic
  status_icon: 'if(done, "✅", "⏳")'

  # String formatting
  formatted_price: 'if(price, price.toFixed(2) + " dollars")'

  # Date formatting
  created: 'file.ctime.format("YYYY-MM-DD")'

  # Calculate days since created (use .days for Duration)
  days_old: '(now() - file.ctime).days'

  # Calculate days until due date
  days_until_due: 'if(due_date, (date(due_date) - today()).days, "")'
```

## Võtmefunktsioonid

Kõige sagedamini kasutatavad funktsioonid. Kõigi tüüpide (Date, String, Number, List, File, Link, Object, RegExp) täieliku viite jaoks vaata [FUNCTIONS_REFERENCE.md](references/FUNCTIONS_REFERENCE.md).

| Funktsioon | Signatuur | Kirjeldus |
|----------|-----------|-------------|
| `date()` | `date(string): date` | Parseeri string kuupäevaks (`YYYY-MM-DD HH:mm:ss`) |
| `now()` | `now(): date` | Praegune kuupäev ja kellaaeg |
| `today()` | `today(): date` | Praegune kuupäev (aeg = 00:00:00) |
| `if()` | `if(condition, trueResult, falseResult?)` | Tingimuslik |
| `duration()` | `duration(string): duration` | Parseeri kestuse string |
| `file()` | `file(path): file` | Hangi failiobjekt |
| `link()` | `link(path, display?): Link` | Loo link |

### Duration tüüp

Kahe kuupäeva lahutamisel on tulemus **Duration** tüüp (mitte number).

**Duration väljad:** `duration.days`, `duration.hours`, `duration.minutes`, `duration.seconds`, `duration.milliseconds`

**OLULINE:** Duration EI toeta otse `.round()`, `.floor()`, `.ceil()`. Ligipääse esmalt numbrilisele väljale (nagu `.days`), seejärel rakenda numbri funktsioone.

```yaml
# CORRECT: Calculate days between dates
"(date(due_date) - today()).days"                    # Returns number of days
"(now() - file.ctime).days"                          # Days since created
"(date(due_date) - today()).days.round(0)"           # Rounded days

# WRONG - will cause error:
# "((date(due) - today()) / 86400000).round(0)"      # Duration doesn't support division then round
```

### Kuupäevaaritmeetika

```yaml
# Duration units: y/year/years, M/month/months, d/day/days,
#                 w/week/weeks, h/hour/hours, m/minute/minutes, s/second/seconds
"now() + \"1 day\""       # Tomorrow
"today() + \"7d\""        # A week from today
"now() - file.ctime"      # Returns Duration
"(now() - file.ctime).days"  # Get days as number
```

## Vaate tüübid

### Table View

```yaml
views:
  - type: table
    name: "My Table"
    order:
      - file.name
      - status
      - due_date
    summaries:
      price: Sum
      count: Average
```

### Cards View

```yaml
views:
  - type: cards
    name: "Gallery"
    order:
      - file.name
      - cover_image
      - description
```

### List View

```yaml
views:
  - type: list
    name: "Simple List"
    order:
      - file.name
      - status
```

### Map View

Nõuab latitude/longitude omadusi ja Maps community pluginat.

```yaml
views:
  - type: map
    name: "Locations"
    # Map-specific settings for lat/lng properties
```

## Vaikimisi kokkuvõttevalemid

| Nimi | Sisendtüüp | Kirjeldus |
|------|------------|-------------|
| `Average` | Number | Matemaatiline keskmine |
| `Min` | Number | Väikseim number |
| `Max` | Number | Suurim number |
| `Sum` | Number | Kõigi numbrite summa |
| `Range` | Number | Max − Min |
| `Median` | Number | Matemaatiline mediaan |
| `Stddev` | Number | Standardhälve |
| `Earliest` | Date | Varaseim kuupäev |
| `Latest` | Date | Hiliseim kuupäev |
| `Range` | Date | Latest − Earliest |
| `Checked` | Boolean | Tõesete väärtuste arv |
| `Unchecked` | Boolean | Väärade väärtuste arv |
| `Empty` | Any | Tühjade väärtuste arv |
| `Filled` | Any | Mittetühjade väärtuste arv |
| `Unique` | Any | Unikaalsete väärtuste arv |

## Täielikud näited

### Task Tracker Base

```yaml
filters:
  and:
    - file.hasTag("task")
    - 'file.ext == "md"'

formulas:
  days_until_due: 'if(due, (date(due) - today()).days, "")'
  is_overdue: 'if(due, date(due) < today() && status != "done", false)'
  priority_label: 'if(priority == 1, "🔴 High", if(priority == 2, "🟡 Medium", "🟢 Low"))'

properties:
  status:
    displayName: Status
  formula.days_until_due:
    displayName: "Days Until Due"
  formula.priority_label:
    displayName: Priority

views:
  - type: table
    name: "Active Tasks"
    filters:
      and:
        - 'status != "done"'
    order:
      - file.name
      - status
      - formula.priority_label
      - due
      - formula.days_until_due
    groupBy:
      property: status
      direction: ASC
    summaries:
      formula.days_until_due: Average

  - type: table
    name: "Completed"
    filters:
      and:
        - 'status == "done"'
    order:
      - file.name
      - completed_date
```

### Reading List Base

```yaml
filters:
  or:
    - file.hasTag("book")
    - file.hasTag("article")

formulas:
  reading_time: 'if(pages, (pages * 2).toString() + " min", "")'
  status_icon: 'if(status == "reading", "📖", if(status == "done", "✅", "📚"))'
  year_read: 'if(finished_date, date(finished_date).year, "")'

properties:
  author:
    displayName: Author
  formula.status_icon:
    displayName: ""
  formula.reading_time:
    displayName: "Est. Time"

views:
  - type: cards
    name: "Library"
    order:
      - cover
      - file.name
      - author
      - formula.status_icon
    filters:
      not:
        - 'status == "dropped"'

  - type: table
    name: "Reading List"
    filters:
      and:
        - 'status == "to-read"'
    order:
      - file.name
      - author
      - pages
      - formula.reading_time
```

### Daily Notes Index

```yaml
filters:
  and:
    - file.inFolder("Daily Notes")
    - '/^\d{4}-\d{2}-\d{2}$/.matches(file.basename)'

formulas:
  word_estimate: '(file.size / 5).round(0)'
  day_of_week: 'date(file.basename).format("dddd")'

properties:
  formula.day_of_week:
    displayName: "Day"
  formula.word_estimate:
    displayName: "~Words"

views:
  - type: table
    name: "Recent Notes"
    limit: 30
    order:
      - file.name
      - formula.day_of_week
      - formula.word_estimate
      - file.mtime
```

## Basese manustamine

Manusta Markdown-failidesse:

```markdown
![[MyBase.base]]

<!-- Specific view -->
![[MyBase.base#View Name]]
```

## YAML-i tsiteerimisreeglid

- Kasuta ühekordseid jutumärke valemite jaoks, mis sisaldavad topeltjutumärke: `'if(done, "Yes", "No")'`
- Kasuta topeltjutumärke lihtsate stringide jaoks: `"My View Name"`
- Escapeeri pesastatud jutumärke keerukates avaldistes õigesti

## Tõrkeotsing

### YAML-i süntaksivead

**Tsiteerimata erimärgid**: Stringid, mis sisaldavad `:`, `{`, `}`, `[`, `]`, `,`, `&`, `*`, `#`, `?`, `|`, `-`, `<`, `>`, `=`, `!`, `%`, `@`, `` ` ``, peavad olema tsiteeritud.

```yaml
# WRONG - colon in unquoted string
displayName: Status: Active

# CORRECT
displayName: "Status: Active"
```

**Mitteklapivad jutumärgid valemites**: Kui valem sisaldab topeltjutumärke, mässi kogu valem ühekordsetesse jutumärkidesse.

```yaml
# WRONG - double quotes inside double quotes
formulas:
  label: "if(done, "Yes", "No")"

# CORRECT - single quotes wrapping double quotes
formulas:
  label: 'if(done, "Yes", "No")'
```

### Tavalised valemivead

**Duration-matemaatika ilma väljale ligipääsuta**: Kuupäevade lahutamine tagastab Durationi, mitte numbri. Ligipääse alati `.days`, `.hours` jne.

```yaml
# WRONG - Duration is not a number
"(now() - file.ctime).round(0)"

# CORRECT - access .days first, then round
"(now() - file.ctime).days.round(0)"
```

**Puuduvad null-kontrollid**: Omadused ei pruugi kõigil märkmetel olla. Kasuta kaitsmiseks `if()`.

```yaml
# WRONG - crashes if due_date is empty
"(date(due_date) - today()).days"

# CORRECT - guard with if()
'if(due_date, (date(due_date) - today()).days, "")'
```

**Määratlemata valemitele viitamine**: Veendu, et igal `formula.X`-il `order`-is või `properties`-is on vaste jaotises `formulas`.

```yaml
# This will fail silently if 'total' is not defined in formulas
order:
  - formula.total

# Fix: define it
formulas:
  total: "price * quantity"
```

## Viited

- [Bases Syntax](https://help.obsidian.md/bases/syntax)
- [Functions](https://help.obsidian.md/bases/functions)
- [Views](https://help.obsidian.md/bases/views)
- [Formulas](https://help.obsidian.md/formulas)
- [Complete Functions Reference](references/FUNCTIONS_REFERENCE.md)