# Dataview — plugin pour *Obsidian*
*Dataview* est extrêmement puissant, au sens informatique du terme. Cela signifie qu’avec lui, des gens qui s’y connaissent en programmation peuvent faire des choses ***extrêmement*** sophistiquées. Heureusement, en copiant des exemples et avec un minimum de logique, on arrive à faire des choses fort utiles, même sans être un programmeur — ce qui est mon cas.
Je me propose de vous « mettre le pied à l’étrier », afin de vous faire gagner tout le temps que j’ai moi-même passé à « essayer de comprendre » la documentation, à faire de nombreux essais et à consulter une certaine quantité de posts sur le forum des utilisateurs d’*Obsidian*.
Voici une requête *Dataview* typique :
![[Dataview request.webp]]
<br>Je vais l’expliquer en détail et pas à pas. Commençons par une requête simplissime :
```dataview
LIST
WHERE status = "OK"
```
1. Vous reconnaissez les trois “backticks” `` ``` `` qui marquent le début et la fin d’un “codeblock”.
2. À côté des `` ``` `` du début, le mot clef `dataview` qui indique que ce qui est dans le bloc, c’est une requête à destination du plugin *Dataview*.
3. Le mot clef `LIST` demande à *Dataview* de faire une liste. On pourrait lui demander de faire une `TABLE`.
4. Le mot clef `WHERE` est une directive pour *Dataview* qui lui indique quelles fiches il doit lister. En l’occurrence : « les fiches qui ont la métadonnée `status` égale à `OK` ». ^[Si, dans la directive, on met `OK` entre des `"`, c’est pour indiquer à l’interprêteur qu’il doit chercher la *chaîne de caractères* `OK`. C’est à cause de ce genre de petits détails que je vous recommande de copier et adapter des exemples, plutôt que de perdre du temps à comprendre pourquoi votre code ne fonctionne pas…]
Quand on bascule la fiche en mode *Preview*, on obtient quelque chose comme cela (je ne montre que le début de la liste) :
![[List example, unsorted.webp]]
<br>C’est une liste de *noms de fiches* (“filenames”) qui ont le status “OK”. Cette liste n’est pas triée, elle est dans un ordre aléatoire.
Ajoutons une instruction pour trier la liste :
```dataview
LIST
WHERE status = "OK"
SORT file.name
```
Nous obtenons ceci, qui est beaucoup plus agréable :
![[List example, sorted.webp]]
<br>Ce que je n’ai pas encore dit, c’est que les noms des fiches sont *cliquables* : en cliquant dessus, la fiche correpondante s’ouvre. C’est ainsi que l’on confectionne des fiches « tableau de bord » qui permettent d’accéder à nos documents « en cours » ou « en projet » ou « à relire », etc.
Si, maintenant, je souhaite une table avec l’information `nature:` de chaque fiche, je vais écrire cette requête :
```dataview
TABLE
nature
WHERE status = "OK"
SORT file.name
```
<br>Explications :
* Par défaut, la première colonne d’une table *Dataview* contient les noms de fichiers ; il n’y a rien besoin de préciser.
* En revanche, nous indiquons ce que nous voulons voir dans la ou les colonnes suivantes. D’où le nom `nature` qui correspond au nom de la métadonnée en question.
* Le reste est inchangé.
Voici ce que j’obtiens :
![[Dataview — Table example 1.webp]]
<br>Pour illustrer un usage fort pratique de *Dataview*, je reviens maintenant sur l’exemple donné au début de cette page et je vais l’expliquer, comme promis. Re-voici la requête :
![[Dataview request.webp]]
<br>
* `file.folder` signifie « la propriété “folder” du fichier » ; cela nous permet d’avoir le nom du dossier dans lequel est rangé le fichier listé.
* `AS "Folder"` demande à *Dataview* de mettre le mot “Folder” en tête de la colonne en question.
* Notez la virgule à la fin de cette ligne. Cette virgule signifie que nous avons fini la description d’une colonne et que nous allons maintenant décrire la colonne suivante.
* `file.mtime` donne la propriété « date et heure » du fichier listé.
* Comme je veux juste la date et pas l’heure, j’enlève l’heure à l’aide de la fonction `striptime` ; ainsi l’instruction `striptime(file.mtime)` donne juste la *date de modification* du fichier.
* Je passe cette date à la fonction `dateformat(… , …)` qui permet de formater la date dans un format qui me convient — en l’occurrence le format « date à l’envers » à la norme ISO “année – mois – jour”. Pourquoi ce format ? Parce qu’avec le plugin “Sortable”, je peux trier les colonnes en cliquant sur leur en-tête et qu’il faut ce format pour que le tri fonctionne comme attendu. Sinon, “12.03.2022” vient après le “01.12.2023”, ce qui est inexact.
* Je mets le texte “Modif.↓” en tête de la colonne, afin de me signaler l’ordre de tri — voir plus bas.
* la fonction `lower(status)` convertit en minuscules le contenu du champ `status`. Ainsi je peux me protéger contre les incohérences de saisie telles que “pleaseReview”, “PleaseReview”, “pleasereview”, etc.
* `WHERE contains(lower(status), "pleasereview")` cherche donc toutes les fiches où il y a “pleaseReview” ou “pleaseReview”, etc. dans le champ `status`
* `SORT file.mtime desc` trie selon la “date et heure” (.mtime) du fichier, dans l’ordre descendant (`desc`), c’est-à-dire les fichiers les plus récents en haut de la liste, les plus anciens en bas.
Et voici le résultat :
![[Dataview — “pleaseReview” example.webp]]
Vous voyez que j’ai du pain sur la planche… (À côté de “File”, en haut de la première colonne, c’est marqué que j’ai 24 fichiers à revoir.)
Voilà pour cette introduction à *Dataview*. Je vous souhaite bien du plaisir et du succès dans son emploi !
### Pour aller plus loin
⭢ [documentation officielle](https://blacksmithgu.github.io/obsidian-dataview/) de *Dataview*
⭢ [Dataview plugin snippet showcase](https://forum.obsidian.md/t/dataview-plugin-snippet-showcase/13673/89) — un fil avec plein d’exemples, sur le forum des utilisateurs d’*Obsidian*
  ⭢ [dynamic tables](https://forum.obsidian.md/t/dataview-plugin-snippet-showcase/13673/482?)
⭢ [DataView beginner’s guide](https://denisetodd.medium.com/obsidian-dataview-for-beginners-a-checklist-to-help-fix-your-dataview-queries-11acc57f1e48) ← [fil sur le forum](https://forum.obsidian.md/t/dataview-beginners-guide-what-can-go-wrong-and-how-to-fix-it/39018)
⭢ [Basic Dataview query builder](https://s-blu.github.io/basic-dataview-query-builder/) — un site qui permet de construire des requêtes *Dataview* en répondant à des questions
 
<p style="text-align: center;"><a href="https://dr-spinnler.ch"><img src="https://dr-spinnler.ch/myfiles/logos/Olivier-Spinnler.png" class= "signature"/></a></p>
<p style="text-align: center; font-style: italic;">le 07.07.2023
</p>
 
----------------------------------------------
[[Obsidian]] ✦ [[quelques plugins incontournables ou simplement intéressants|Plugins]]
#Obsidian #PKM