## Для создания вот такой таблицы, вам нужны установить плагин Dataview, а также включить в заметке YAML
>[!quote] Как выглядит простая таблица, которая берет информацию из YAML:
![[Pasted image 20250526140904.png]]
Код для вставки:
```
```dataviewjs
const pages = dv.pages('"2. Areas/Занятие спортом/Динамика веса"')
.where(p => p.Вес && p.date)
.sort(p => p.date);
let rows = [];
let prevWeight = null;
const goal = 80;
for (let p of pages) {
const date = new Date(p.date).toLocaleDateString();
const weight = p.Вес;
let diffDisplay = "–";
let toGoal = `${(goal - weight).toFixed(1)} кг`;
if (prevWeight !== null) {
const diff = weight - prevWeight;
if (diff > 0) {
diffDisplay = `🟢 +${diff.toFixed(1)}`; // набор массы = хорошо
} else if (diff < 0) {
diffDisplay = `🔴 ${diff.toFixed(1)}`; // потеря = плохо
} else {
diffDisplay = "➖ 0";
}
}
rows.push([date, weight, diffDisplay, toGoal]);
prevWeight = weight;
}
dv.table(["📅 Дата", "⚖️ Вес (кг)", "📈 Разница", "🎯 До цели (80 кг)"], rows);```
```
-> const pages = dv.pages('"2. Areas/Занятие спортом/Динамика веса"') — заменить на свой путь, в котором лежат наши заметки с YAML
-> Последние три символа апострофа перенести на новую строку
---
### 🧠 Пояснение для тех, кто хочет глубже понимать о чем этот код:
Этот код — не просто таблица. Это **умный трекер веса прямо внутри Obsidian**. Он показывает:
- дату записи;
- текущий вес;
- изменение веса по сравнению с предыдущей записью;
- сколько ещё осталось до цели (например, 80 кг).
И всё это — **автоматически**, без Excel и сторонних приложений.
---
#### Чем отличается `dataviewjs` от обычного `dataview`?
|Обычный `dataview`|`dataviewjs`|
|---|---|
|Пишешь как в Excel: просто `таблица`, `сортировка`, `фильтр`.|Используешь JavaScript — значит, можно делать более сложную логику: сравнения, расчёты, эмоции.|
|Подходит для простых списков и таблиц.|Подходит для продвинутых трекеров, расчётов, визуализаций.|
|Не умеет считать разницу между значениями.|Умеет сравнивать, считать разницу и даже выводить эмоджи в зависимости от результата.|
---
#### Объяснение кода шаг за шагом
```js
const pages = dv.pages('"2. Areas/Занятие спортом/Динамика веса"')
.where(p => p.Вес && p.date)
.sort(p => p.date);
```
- Мы берём все заметки из папки **"Динамика веса"**.
- Фильтруем: нужны только те, где есть и **вес**, и **дата**.
- Сортируем по дате — чтобы было по порядку.
---
```js
let rows = [];
let prevWeight = null;
const goal = 80;
```
- `rows` — сюда будут собираться строки таблицы.
- `prevWeight` — запомним предыдущий вес, чтобы сравнить с текущим.
- `goal` — твоя цель (например, **80 кг**). Код будет показывать, сколько ещё осталось.
---
```js
for (let p of pages) {
const date = new Date(p.date).toLocaleDateString();
const weight = p.Вес;
```
- Получаем дату и вес из каждой заметки.
- Дату делаем читаемой (например, "27.05.2025").
---
```js
let diffDisplay = "–";
let toGoal = `${(goal - weight).toFixed(1)} кг`;
```
- `diffDisplay` — что произошло с весом с прошлого раза.
- `toGoal` — сколько ещё осталось до цели в килограммах.
---
```js
if (prevWeight !== null) {
const diff = weight - prevWeight;
if (diff > 0) {
diffDisplay = `🟢 +${diff.toFixed(1)}`;
} else if (diff < 0) {
diffDisplay = `🔴 ${diff.toFixed(1)}`;
} else {
diffDisplay = "➖ 0";
}
}
```
- Сравниваем вес: стал больше, меньше или остался прежним.
- Добавляем цвет и эмоджи:
- 🟢 набрал вес — хорошо!
- 🔴 потерял — может, надо поесть 😅
- ➖ остался — стабильность!
---
```js
rows.push([date, weight, diffDisplay, toGoal]);
prevWeight = weight;
```
- Добавляем всё в таблицу.
- Запоминаем текущий вес, чтобы сравнивать с следующим.
---
```js
dv.table(["📅 Дата", "⚖️ Вес (кг)", "📈 Разница", "🎯 До цели (80 кг)"], rows);
```
- Выводим красивую таблицу:
- дата,
- вес,
- изменение,
- сколько осталось до цели.
---
## 💥 Результат
Ты получаешь таблицу прямо в Obsidian, которая:
- считает прогресс;
- показывает, где ты теряешь или набираешь;
- мотивирует продолжать.
Это идеальный инструмент для **саморазвития и отслеживания прогресса**. И ты сам это сделал — без Excel, без приложений, только на базе Obsidian.