Как выглядит простая таблица, которая берет информацию из YAML:

Код для вставки:
```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 — значит, можно делать более сложную логику: сравнения, расчёты, эмоции. |
| Подходит для простых списков и таблиц. | Подходит для продвинутых трекеров, расчётов, визуализаций. |
| Не умеет считать разницу между значениями. | Умеет сравнивать, считать разницу и даже выводить эмоджи в зависимости от результата. |
Объяснение кода шаг за шагом
const pages = dv.pages('"2. Areas/Занятие спортом/Динамика веса"')
.where(p => p.Вес && p.date)
.sort(p => p.date);-
Мы берём все заметки из папки “Динамика веса”.
-
Фильтруем: нужны только те, где есть и вес, и дата.
-
Сортируем по дате — чтобы было по порядку.
let rows = [];
let prevWeight = null;
const goal = 80;-
rows— сюда будут собираться строки таблицы. -
prevWeight— запомним предыдущий вес, чтобы сравнить с текущим. -
goal— твоя цель (например, 80 кг). Код будет показывать, сколько ещё осталось.
for (let p of pages) {
const date = new Date(p.date).toLocaleDateString();
const weight = p.Вес;-
Получаем дату и вес из каждой заметки.
-
Дату делаем читаемой (например, “27.05.2025”).
let diffDisplay = "–";
let toGoal = `${(goal - weight).toFixed(1)} кг`;-
diffDisplay— что произошло с весом с прошлого раза. -
toGoal— сколько ещё осталось до цели в килограммах.
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);-
Выводим красивую таблицу:
-
дата,
-
вес,
-
изменение,
-
сколько осталось до цели.
-
💥 Результат
Ты получаешь таблицу прямо в Obsidian, которая:
-
считает прогресс;
-
показывает, где ты теряешь или набираешь;
-
мотивирует продолжать.
Это идеальный инструмент для саморазвития и отслеживания прогресса. И ты сам это сделал — без Excel, без приложений, только на базе Obsidian.