Advanced Query (Datalog)
Quand une ligne de filtre ne suffit plus — des règles qui relient, déduisent et condensent
- Vous lisez une règle Datalog et y nommez :find, :where et la jointure. ·· Critère de réussite : Sur une règle donnée, vous expliquez quelle variable forme la jointure.
- Vous écrivez une règle qui relie deux critères à travers les blocs. ·· Critère de réussite : Votre règle livre l'ensemble de résultats attendu à partir de deux conditions.
- Vous condensez un ensemble de résultats avec un agrégat. ·· Critère de réussite : Vous regroupez avec count et obtenez un nombre par groupe.
Une Simple Query filtre une propriété et devient une vue. Mais dès que vous voulez relier deux choses — les tâches ouvertes issues des réunions d'un trimestre, regroupées par projet — la ligne de filtre s'arrête. Datalog commence précisément là : vous décrivez la relation sous forme de règle, et mium déduit le reste.
Là où la ligne de filtre s'arrête
Une ligne de filtre vérifie les blocs un à un contre des critères fixes. Elle ne sait pas relier d'un bloc à l'autre, ne déduit rien et ne totalise rien. Les rapports multicritères, vous les assemblez sinon à la main depuis plusieurs vues — et vous les entretenez de même. Datalog renverse la logique : une règle qui décrit des relations, et un moteur qui l'évalue.
Anatomie d'une règle
Une règle Datalog comporte deux parties : :find dit quelle grandeur vous voulez voir, :where énumère les conditions — une par ligne. Des variables comme ?task relient les lignes ; lorsqu'une même variable revient plusieurs fois, c'est une jointure.
[:find ?task
:where
[?task "type" "task"]
[?task "status" "offen"]
[?task "von-meeting" ?m]
[?m "tag" "q3"]]
;; offene Aufgaben aus Q3-Meetings — ein Join über ?m5 briques pour Advanced Query
- La règle décrit la cible (:find), non le chemin de recherche — vous dites le quoi, pas le comment.
- Chaque ligne :where est une condition ; les variables communes les relient en jointure.
- Les agrégats condensent : count, sum, max, min, avg sur l'ensemble des résultats.
- Une règle est réutilisable — nommez-la, et elle devient une vue pour toute l'équipe.
- Poser des limites : les jointures récursives ou non bornées ont besoin d'une borne, sans quoi l'évaluation devient coûteuse.
Exemple : compter les tâches ouvertes par projet
[:find ?projekt (count ?task)
:where
[?task "type" "task"]
[?task "status" "offen"]
[?task "projekt" ?projekt]]
;; ein Report: pro Projekt die Zahl offener AufgabenAvant / après — Simple Query contre Datalog
| Capacité | Simple Query | Datalog |
|---|---|---|
| Critères | une propriété | autant que voulu |
| Relier entre blocs | non | oui (jointure par variables) |
| Déduire / agréger | non | count··sum··group |
| Réutilisable | comme vue | comme règle nommée |
| Courbe d'apprentissage | minutes | plus raide, mais plus puissante |
Une question honnête
Combien de vos rapports reconstruisez-vous chaque semaine parce qu'ils relient plusieurs critères qu'aucune ligne de filtre ne peut saisir ? La réponse décide si la courbe d'apprentissage plus raide de Datalog vaut la peine pour vous — ou si une Simple Query suffit déjà.
- Prenez un rapport que vous assemblez aujourd’hui à la main depuis plusieurs vues. Écrivez en toutes lettres quelle grandeur vous voulez voir au bout et quelles conditions doivent être vraies pour cela — une condition par ligne. Traduisez ensuite cela en une règle Datalog avec :find et :where, et nommez la variable qui forme la jointure.⏱ 5 min
💡 Commencez par la grandeur cherchée après :find et n’écrivez les lignes :where qu’ensuite. La variable qui apparaît dans deux lignes est votre jointure — repérez-la en premier.
Solution : Après :find figure la grandeur que vous voulez voir, par exemple la tâche ou le projet. En dessous, vous posez une ligne :where par condition : le type est tâche, le statut est ouvert, et par la variable de réunion la tâche se rattache à une réunion du trimestre. La même variable de réunion dans deux lignes est la jointure. Pour un comptage, vous entourez la variable de tâche de count et regroupez par projet — un nombre par projet, sans aucun export.
Que sait faire Datalog qu'une Simple Query ne sait pas ?
Décrivez ce qui compte — mium calcule le reste.
Une règle, et votre deuxième cerveau construit le rapport — et le tient à jour pendant que vous réfléchissez. Pas d'export, pas d'assemblage à la main ; un partenaire qui comprend vos critères.
Réserver mon créneau··gratuit →