BRIEF··

Advanced Query (Datalog)

EXECUTIVE SUMMARY

What if your report could not be clicked together from ten views, but emerged from one rule that describes what counts — and recomputes itself the moment a block changes? Advanced Query turns scattered blocks into a multi-criteria report, with no export at all.

any number
Criteria per query
yes
Joins across blocks
count·sum
Aggregation
0 min
Report upkeep
no
Export needed
steeper
Learning curve
RISKS
  • Datalog has a steeper learning curve than a filter line — without a starting point, the power goes unused.
  • Poorly bounded rules get expensive; recursive or open joins need limits.
  • Without clean properties no rule will hold — data hygiene remains a precondition.
DECISION
Recommendation — establish Datalog rules for recurring multi-criteria reports; retire report collections clicked together by hand, and keep simple views on Simple Query.

A Simple Query filters one property and becomes a view. But the moment you want to connect two things — open tasks from a quarter's meetings, grouped by project — the filter line runs out. Datalog begins exactly there: you describe the relationship as a rule, and mium derives the rest.

Where the filter line ends

A filter line checks blocks one by one against fixed criteria. It cannot link across blocks, derive nothing and add nothing up. Otherwise you click multi-criteria reports together by hand from several views — and maintain them the same way. Datalog turns this around: one rule that describes relationships, and an engine that evaluates it.

Anatomy of a rule

A Datalog rule has two parts: :find says which quantity you want to see, :where lists the conditions — one per line. Variables like ?task connect the lines; when the same variable appears more than once, that is a join.

[:find ?task
 :where
 [?task "type" "task"]
 [?task "status" "offen"]
 [?task "von-meeting" ?m]
 [?m "tag" "q3"]]
;; offene Aufgaben aus Q3-Meetings — ein Join über ?m

5 building blocks for Advanced Query

  1. The rule describes the goal (:find), not the search path — you say what, not how.
  2. Every :where line is a condition; shared variables connect them into a join.
  3. Aggregates condense: count, sum, max, min, avg across the result set.
  4. A rule is reusable — name it, and it becomes a view for the whole team.
  5. Set limits: recursive or unbounded joins need a limit, otherwise the evaluation gets expensive.

Example: counting open tasks per project

[:find ?projekt (count ?task)
 :where
 [?task "type" "task"]
 [?task "status" "offen"]
 [?task "projekt" ?projekt]]
;; ein Report: pro Projekt die Zahl offener Aufgaben

Before/After — Simple Query vs. Datalog

CapabilitySimple QueryDatalog
Criteriaone propertyany number
Link across blocksnoyes (join over variables)
Derive / aggregatenocount··sum··group
Reusableas a viewas a named rule
Learning curveminutessteeper, but more powerful

An honest question

How many of your reports do you rebuild every week because they link several criteria that no filter line can hold? The answer decides whether Datalog's steeper learning curve pays off for you — or whether a Simple Query is already enough.

Audit ID: BRF-advanced-query-datalog-v1.0Submitted: 2026-05-22··Falktron GmbH, Oelde
The Spring School has concluded. See Day 93 → Play the game →