# 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* &emsp;&emsp;⭢ [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 &emsp; <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> &emsp; ---------------------------------------------- [[Obsidian]]  ✦  [[quelques plugins incontournables ou simplement intéressants|Plugins]] #Obsidian #PKM