Formeln ermöglichen es dir, berechnete Eigenschaften in [[Einführung in Bases|Basen]] zu erstellen, die Daten aus anderen [[Eigenschaften]] verwenden. Du kannst Berechnungen durchführen, Text manipulieren, mit Daten arbeiten und mehr.
## Was Formeln können
Formeln können dir helfen:
- **Werte berechnen**, Preise addieren, Summen ermitteln oder mathematische Operationen durchführen.
- **Text manipulieren**, Zeichenketten kombinieren, Groß-/Kleinschreibung ändern oder Teilzeichenketten extrahieren.
- **Mit Daten arbeiten**, Zeitdifferenzen berechnen, Daten formatieren oder Fristen bestimmen.
- **Logik anwenden**, bedingte Anweisungen verwenden, um unterschiedliche Werte anzuzeigen.
- **Listen verarbeiten**, Listendaten filtern, sortieren, zuordnen oder aggregieren.
## Eine Formel-Eigenschaft erstellen
So erstellst du eine Formel-Eigenschaft:
1. Klicke in deiner Basis in der Symbolleiste auf **Eigenschaften**.
2. Klicke unten im Menü auf **Formel hinzufügen**.
3. Gib einen Namen für deine Formel-Eigenschaft ein.
4. Gib deine Formel im Feld **Formel** ein.
5. Schließe den Dialog.
Der Formeleditor vervollständigt automatisch [[Funktionen|Funktions]]- und Eigenschaftsnamen während der Eingabe und validiert deine Formelsyntax. Ein grünes Häkchen erscheint, wenn deine Formel gültig ist.
Nach der Erstellung kannst du eine Formel-Eigenschaft wie jede andere Eigenschaft in deiner Basis verwenden. Füge sie zu [[Ansichten]] hinzu, verwende sie in Filtern, sortiere danach und mehr.
## Eine Formel schreiben
Gib im Formeleditor einen Ausdruck mit Eigenschaften, Operatoren und Funktionen ein.
### Eigenschaften referenzieren
Du kannst verschiedene Arten von Eigenschaften in deinen Formeln referenzieren:
- **Notiz-Eigenschaften** — Eigenschaften aus dem [[Eigenschaften|Frontmatter]] einer Notiz.
- **Datei-Eigenschaften** — Integrierte Eigenschaften wie `file.name`, `file.size` oder `file.mtime`.
- **Formel-Eigenschaften** — Andere Formeln mit `formula.formel_name`.
**Beispiele:**
- `price * quantity` — zwei Notiz-Eigenschaften multiplizieren
- `file.name + " - " + description` — Dateiname mit einer Notiz-Eigenschaft kombinieren
- `formula.price_per_unit * 1.1` — eine andere Formel-Eigenschaft verwenden
### Operatoren verwenden
**Arithmetische Operatoren** führen Berechnungen mit Zahlen durch:
- `price + tax` — addieren
- `price - discount` — subtrahieren
- `price * quantity` — multiplizieren
- `price / quantity` — dividieren
- `(part / whole) * 100` — Klammern für Operationsreihenfolge verwenden
**Vergleichsoperatoren** vergleichen Werte:
- `price > 100` — größer als
- `age < 18` — kleiner als
- `status == "Done"` — gleich
- `status != "Done"` — ungleich
- `file.mtime > now() - '7d'` — Daten vergleichen
**Boolesche Operatoren** kombinieren logische Bedingungen:
- `!completed` — nicht
- `price > 0 && quantity > 0` — und
- `urgent || important` — oder
Erfahre mehr unter [[Bases-Syntax#Operatoren|Bases-Syntax]].
### Funktionen verwenden
Funktionen führen Operationen auf Werten aus. Die verfügbaren Funktionen hängen vom Typ des Wertes ab, mit dem du arbeitest. Siehe die vollständige Liste der [[Funktionen]].
**Häufige Funktionskategorien:**
- **Globale Funktionen** — `if()`, `now()`, `date()`, `link()`, `max()`, `min()`
- **Zeichenketten-Funktionen** — `contains()`, `replace()`, `split()`, `lower()`, `title()`
- **Zahlen-Funktionen** — `round()`, `ceil()`, `floor()`, `abs()`, `toFixed()`
- **Datumsfunktionen** — `format()`, `relative()`, `date()`, `time()`
- **Listen-Funktionen** — `filter()`, `map()`, `sort()`, `join()`, `unique()`
**Beispiele:**
- `if(price, "
quot; + price.toFixed(2), "")` um eine Bedingung mit Zahlenformatierung zu definieren.
- `file.name.lower()` um in Kleinbuchstaben umzuwandeln.
- `tags.contains("urgent")` um zu prüfen, ob die Tag-Liste einen Wert enthält.
- `due_date.format("YYYY-MM-DD")` um ein Datum zu formatieren.
## Formelbeispiele
### Eine Frist berechnen
Setze das Fälligkeitsdatum eines Projekts auf 2 Wochen nach dem Startdatum:
```js
start_date + "2w"
```
### Überfälligkeitsstatus anzeigen
Zeige „Überfällig" an, wenn das Fälligkeitsdatum überschritten ist und der Status nicht „Done" ist:
```js
if(due_date < now() && status != "Done", "Overdue", "")
```
### Währung formatieren
Einen Preis mit 2 Dezimalstellen und Währungssymbol anzeigen:
```js
if(price, "quot; + price.toFixed(2), "")
```
### Listenelemente zählen
Die Anzahl der Elemente in einer Listen-Eigenschaft zählen:
```js
tasks.length
```
### Prioritätswert berechnen
Mehrere Faktoren zu einem Prioritätswert kombinieren:
```js
(impact * urgency) / effort
```
### Textfelder kombinieren
Einen vollständigen Namen aus Vor- und Nachnamen erstellen:
```js
first_name + " " + last_name
```
### Gesamtkosten berechnen
Monatliche Kosten mit der Anzahl der Besitzmonate multiplizieren:
```js
monthlyUses * formula.Owned.round()
```
## Datentypen
Formeln arbeiten mit verschiedenen Datentypen:
- **Zeichenketten** — Text in Anführungszeichen: `"hello"` oder `'world'`
- **Zahlen** — Numerische Werte: `42`, `3.14`, `(2 + 2)`
- **Boolesche Werte** — Wahr oder falsch: `true`, `false`
- **Daten** — Erstellt mit `date()`, `today()` oder `now()`
- **Listen** — Sammlungen von Werten: `[1, 2, 3]`
- **Objekte** — Schlüssel-Wert-Paare: `{"name": "value"}`
Der Ausgabetyp einer Formel wird durch die verwendeten Daten und Funktionen bestimmt.
## Andere Formeln referenzieren
Formeln können andere Formeln referenzieren und so abgeleitete Berechnungen erstellen. Wenn du beispielsweise eine Formel namens `price_per_unit` hast:
```js
price / quantity
```
Kannst du sie in einer anderen Formel referenzieren:
```js
formula.price_per_unit * 1.1
```
> [!warning] Zirkuläre Referenzen vermeiden
> Eine Formel kann sich weder direkt noch indirekt über andere Formeln selbst referenzieren.