> **Dataview** est un plugin très populaire pour [Obsidian](https://obsidian.md), l’application de prise de notes en Markdown.
>
>
>
> En quelques mots :
>
>
>
> **Dataview** permet de **transformer ton espace de notes en une base de données dynamique**.
>
>
>
> Autrement dit :
>
> - Il _collecte_ des informations contenues dans tes fichiers Markdown (les métadonnées comme les tags, les YAML, les dates, les liens internes, etc.).
>
> - Il _les filtre, trie, regroupe et affiche_ sous forme de listes, tableaux, calendriers ou requêtes plus complexes.
>
> - Il peut générer ces vues automatiquement et les mettre à jour en temps réel quand tu modifies tes notes.
>
>
>
>
> En pratique, tu peux par exemple :
>
> - Lister toutes les notes avec un certain tag.
>
> - Compter combien de notes tu as publiées.
>
> - Générer un index des tâches non terminées.
>
> - Faire des requêtes sur les dates (notes créées la semaine dernière, événements à venir, etc.).
>
>
>
>
> On peut l’utiliser de deux façons principales :
>
> - **Dataview simple (Dataview Query Language – DQL)** : des blocs table, list ou task avec une syntaxe declarative (similaire au SQL simplifié).
>
> - **DataviewJS** : du JavaScript complet pour créer des requêtes plus avancées et personnaliser l’affichage.
- - -
#tagindex/PKM💡/Obsidian/pluginObsi
- - -
### Concepts associés
- [[requête dataview]]
- - -
Sources 🔗
- https://obsidian.rocks/dataview-in-obsidian-a-beginners-guide/
- https://www.youtube.com/watch?v=6p5Eb1sqgIY
- https://obsidian.rocks/quick-tip-quickly-organize-notes-in-obsidian/
-
- - -
Pour publier en ligne le résultat des requêtes, utiliser le plugin [[dataview publisher]].
---
[[Peut-on appeler l'écriture de requêtes dataview du codage ?]]
- - -
### Liste des notes qui ont "input" dans leur nom de note
```dataview
table file.name as "Fichier"
from ""
where contains(file.name, "input")
```
- - -
%%
### Dataview types :
- List
- Table
- Task
- Calendar
### query components
- from: Which files to search.
- where: Filter logic.
- il sert à filtrer . exeploe : where le file name contient "geaorges"
-
- sort: Ordering.
- limit: Max results.
- group by: Grouping.
- permet de grouper les résultats suivant une certaine [[property obsi]] genre "auteur" ou quoi)
-
- flatten: Unpack lists.%%
- - -
### comment obtenir une liste des notes appartenant au folder X avec dataview dans obsidian
```dataview
table file.name as "Note"
from "Date"
```
- - -
#### Comment obtenir une liste des notes appartenant au folder "journal" et qui sont taguées par le tag "journalpublique" (avec dataview dans obsidian)
```dataview
table file.name as "Note"
from "Journal 📆"
where contains(file.tags, "#journalpublique")
```
- - -
### comment avoir une liste de note classée par celles qui ont e plus de connexions (dans Obsidian)
```dataview
table length(file.inlinks) + length(file.outlinks) as Total_Links
from ""
sort (length(file.inlinks) + length(file.outlinks)) desc
limit 30
```
- - -
- - -
### liste moi avec dataview les notes insérées en référence de ma note "**idée**" qui n'ont pas de le tag "published" OU qui n'ont pas écrit dans leur note "%%pusblished%%"
```dataview
list from [[idée]]
where !contains(file.tags, "published")
or !contains(join(rows.file.content), "%%published%%")
```
#### **Ce que fait vraiment** **from "chat"
- from chat **ne liste pas les notes liées depuis la note “chat”** (c’est-à-dire les notes que “chat” référence),
- mais plutôt les notes **qui ont un lien vers la note “chat”** (c’est-à-dire les notes qui contiennent un lien vers “chat”).
Autrement dit, from chat cherche toutes les notes qui **pointent vers “chat”** — pas celles que “chat” pointe.
#### **Pourquoi ça peut poser problème ici**
Si tu veux lister les notes **référencées dans ta note “chat”** (c’est-à-dire les notes que tu as _liées depuis_ “chat”), Dataview **ne propose pas directement** une fonction pour faire ça.
- - -
### liste moi mes 20 dernières notes avec le tag "published"
%% DATAVIEW_PUBLISHER: start
```dataview
table file.mtime as "Dernière modification"
from #published✔︎
sort file.mtime desc
limit 20
```
%%
| File | Dernière modification |
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------ |
| [[Religion/Islam/Allah.md\|Allah]] | 12:41 AM - July 21, 2025 |
| [[Religion/Islam/signes de la fin des temps dans l’islam.md\|signes de la fin des temps dans l’islam]] | 12:40 AM - July 21, 2025 |
| [[Religion/Islam/résurrection (dans l'Islam).md\|résurrection (dans l'Islam)]] | 12:39 AM - July 21, 2025 |
| [[Religion/Christiannisme/David Et Golliath.md\|David Et Golliath]] | 12:38 AM - July 21, 2025 |
| [[Religion/Christiannisme/Daniel dans la fosse aux lions.md\|Daniel dans la fosse aux lions]] | 12:37 AM - July 21, 2025 |
| [[antithèse.md\|antithèse]] | 12:32 AM - July 21, 2025 |
| [[Philosophie 🤔/dialectique.md\|dialectique]] | 12:30 AM - July 21, 2025 |
| [[Concepts fondamentaux (CFo)/vérité.md\|vérité]] | 12:29 AM - July 21, 2025 |
| [[Philosophie 🤔/Nietzsche/Surhomme.md\|Surhomme]] | 12:29 AM - July 21, 2025 |
| [[Personne 👤/Friedrich Nietzsche.md\|Friedrich Nietzsche]] | 12:29 AM - July 21, 2025 |
| [[PKM/Éléments (notes taguées)/tag index 🗂️.md\|tag index 🗂️]] | 12:29 AM - July 21, 2025 |
| [[Enseigner 👨🏫 (notes taguées)/Le Rôle D'un Philosophe Est De Guider Les Autres (Selon Platon).md\|Le Rôle D'un Philosophe Est De Guider Les Autres (Selon Platon)]] | 12:29 AM - July 21, 2025 |
| [[théorie des idées.md\|théorie des idées]] | 12:27 AM - July 21, 2025 |
| [[Concepts fondamentaux (CFo)/théorie.md\|théorie]] | 12:27 AM - July 21, 2025 |
| [[Sources 🔗/Citations/en théorie, il n'y a pas de différence entre la théorie et la pratique. En pratique, si..md\|en théorie, il n'y a pas de différence entre la théorie et la pratique. En pratique, si.]] | 12:26 AM - July 21, 2025 |
| [[monde sensible.md\|monde sensible]] | 12:25 AM - July 21, 2025 |
| [[Concepts fondamentaux (CFo)/impermanence.md\|impermanence]] | 12:24 AM - July 21, 2025 |
| [[monde intelligible.md\|monde intelligible]] | 12:22 AM - July 21, 2025 |
| [[l'alégorie de la caverne.md\|l'alégorie de la caverne]] | 12:20 AM - July 21, 2025 |
| [[Concepts fondamentaux (CFo)/conclusion.md\|conclusion]] | 12:08 AM - July 21, 2025 |
%% DATAVIEW_PUBLISHER: end %%
### générèe moi un tableau listant mes tags "liéà" avec dataview
imp. avec data view mais avec
```dataview
list
flatten file.tags as tag
where startswith(tag, "#liéà/")
group by tag
```
- - -
### Comment afficher le nombre de notes publiées sur mon site obsidian published avec dataview?
c'est possible avec une [[requête DataviewJS]]
```dataviewjs
// Compter les fichiers qui ont le tag #published
let publishedNotes = dv.pages('#published✔︎');
dv.paragraph(`Nombre de notes avec #published : **${publishedNotes.length}**`);
```
```dataviewjs
// Compter toutes les notes
let allNotes = dv.pages();
dv.paragraph(`Nombre total de notes : **${allNotes.length}**`);
```
- - -
### comment mettre un espace de libre dans cette liste toutes les 5 entrées ? "v"
```dataviewjs
const pages = dv.pages("#film").sort(p => p.file.name);
let i = 0;
for (let page of pages) {
dv.paragraph(`- [[${page.file.name}]]`);
i++;
if (i % 5 === 0 && i < pages.length) {
dv.el("hr"); // ligne de séparation
}
}
```
- - -
### but : avoir tous les tags séparés dès quon change de de tag
#### liste moi avec dataviewjs, tous mes tags qui commence par "liéà/"
```dataviewjs
// Récupère toutes les pages du vault
const pages = dv.pages();
// Récupère tous les tags
let tags = [];
for (let page of pages) {
if (page.file?.tags) {
for (let tag of page.file.tags) {
if (typeof tag === "string" && tag.startsWith("#liéà/")) {
tags.push(tag);
}
}
}
}
// Supprime les doublons et trie
let uniqueTags = [...new Set(tags)].sort();
// Affiche
if (uniqueTags.length > 0) {
dv.list(uniqueTags);
} else {
dv.paragraph("Aucun tag commençant par `#liéà/` trouvé.");
}
```
#### parfait, maintenant modifie pour avoir un espace dès qu'on passe à un sous tag
```dataviewjs
// Récupère toutes les pages du vault
const pages = dv.pages();
// Récupère tous les tags commençant par #liéà/
let tags = [];
for (let page of pages) {
if (page.file?.tags) {
for (let tag of page.file.tags) {
if (typeof tag === "string" && tag.startsWith("#liéà/")) {
tags.push(tag);
}
}
}
}
// Supprime les doublons et trie
let uniqueTags = [...new Set(tags)].sort();
// Regroupe les tags par leur "sous-tag" principal
let groups = {};
for (let tag of uniqueTags) {
let subtag = tag.split("/")[1] || "Autre";
if (!groups[subtag]) {
groups[subtag] = [];
}
groups[subtag].push(tag);
}
// Trie les groupes par ordre alphabétique
let sortedGroupKeys = Object.keys(groups).sort();
// Affiche
for (let key of sortedGroupKeys) {
dv.header(3, `Sous-tag : ${key}`);
dv.list(groups[key]);
}
```
#### pas mal, mais enlève les titres "sous tag : "nom du tag" qui apparaissent à chaque fois
```dataviewjs
const pages = dv.pages();
// Récupérer tous les tags commençant par #liéà/
let tags = [];
for (let page of pages) {
if (page.file?.tags) {
for (let tag of page.file.tags) {
if (typeof tag === "string" && tag.startsWith("#liéà/")) {
tags.push(tag);
}
}
}
}
// Supprimer les doublons et trier
let uniqueTags = [...new Set(tags)].sort();
// Regrouper les tags par leur sous-tag principal (après liéà/)
let groups = {};
for (let tag of uniqueTags) {
let subtag = tag.split("/")[1] || "Autre";
if (!groups[subtag]) {
groups[subtag] = [];
}
groups[subtag].push(tag);
}
// Afficher sans titres, mais avec espace entre chaque groupe
let sortedGroupKeys = Object.keys(groups).sort();
for (let key of sortedGroupKeys) {
dv.list(groups[key]);
dv.paragraph(""); // espace visuel entre les groupes
}
```
### peut tu à la place d'un espace blanc mettre une ligne verticale pour mieux délimiter les parties ?
```dataviewjs
const pages = dv.pages();
// Récupérer tous les tags commençant par #liéà/
let tags = [];
for (let page of pages) {
if (page.file?.tags) {
for (let tag of page.file.tags) {
if (typeof tag === "string" && tag.startsWith("#liéà/")) {
tags.push(tag);
}
}
}
}
// Supprimer les doublons et trier
let uniqueTags = [...new Set(tags)].sort();
// Regrouper les tags par leur sous-tag principal (après liéà/)
let groups = {};
for (let tag of uniqueTags) {
let subtag = tag.split("/")[1] || "Autre";
if (!groups[subtag]) {
groups[subtag] = [];
}
groups[subtag].push(tag);
}
// Afficher sans titres, mais avec ligne verticale entre chaque groupe
let sortedGroupKeys = Object.keys(groups).sort();
for (let i = 0; i < sortedGroupKeys.length; i++) {
let key = sortedGroupKeys[i];
dv.list(groups[key]);
// Ligne verticale comme séparation sauf après le dernier groupe
if (i < sortedGroupKeys.length - 1) {
dv.paragraph(`<div style="border-left: 2px solid #888; height: 20px; margin: 10px 0;"></div>`);
}
}
```
- - -