Guten Morgen Herr Gunstmann,
ich hatte die ZS-Filter selbst schon eine Weile nicht mehr angefasst — mit eigenen SQL-Statements komme ich direkt zum Ergebnis, und die Variabilität hole ich mir über Metabase. Ihre Frage war mir aber Anlass genug, das nochmal sauber durchzumessen und dabei gleich meinen Claude-Skill zum Thema ZS-Filter zu überarbeiten (zum Setup siehe meinen Beitrag tomedo mit externer KI konfigurieren). Kurzfassung: Über den DATE-Parameter geht Ihr Monatsanfang nicht — über SELECTION dafür sogar eleganter.
Warum DATE es nicht kann. Der erste Wert im Tag ist kein Tagesoffset. Ich habe 0, −18, −365 und +1 gegeneinander laufen lassen: Das Datumsfeld startet in allen vier Fällen auf heute. Ausgewertet wird nur das Vorzeichen, und zwar auf die Uhrzeit — negativ oder 0 ergibt die aktuelle Uhrzeit, positiv ergibt 23:59. Das ist der Von/Bis-Schalter, mehr nicht. Eine relative Vorbelegung wie „Monatsanfang" gibt es im SQL-Zweig schlicht nicht.
Die Komponenten des DATE-Tags, an meiner Installation (Stand 09/2026) nachgemessen: Der dritte Wert wird vor das Datum in eine Klammer gesetzt, der vierte hinter die Klammer. Der Operator gehört also mit in den dritten Wert:
<ZS:von>DATE;-1;Datum ab;meine_spalte >=;</ZS>
ergibt ( meine_spalte >= '2026-09-19 05:14:00' ).
Die Lösung für Ihren Monatsanfang. SELECTION nimmt vollwertiges SQL auf, also auch date_trunc. Zum Ausprobieren ohne eigene Tabellen — einfach als SQL-Statistik speichern und aus der Statistikliste starten:
sql
WITH kal AS (
SELECT (CURRENT_DATE - (gs.n * 5))::date AS datum
FROM generate_series(0, 24) AS gs(n)
)
SELECT to_char(kal.datum, 'YYYY-MM-DD') AS testdatum
FROM kal
WHERE
true
AND <ZS:zr>SELECTION;0;Zeitraum;Aktueller Monat; kal.datum >= date_trunc('month', CURRENT_DATE) AND;Vormonat; kal.datum >= date_trunc('month', CURRENT_DATE - interval '1 month') AND kal.datum < date_trunc('month', CURRENT_DATE) AND;Freier Zeitraum; true AND</ZS> true
AND <ZS:von>DATE;-1;Datum ab (optional);kal.datum >=;AND</ZS> true
AND <ZS:bis>DATE;1;Datum bis (optional);kal.datum <=;AND</ZS> true
ORDER BY 1 DESC;
Die Auswahl steht per Default auf „Aktueller Monat" und rechnet den Monatsanfang bei jedem Start neu aus — ohne Drift, anders als ein festes „minus 30 Tage". Die beiden Datumsfelder bleiben als manuelle Verfeinerung erhalten; für freie Zeiträume stellen Sie die Auswahl auf „Freier Zeitraum". Für Ihre eigene Statistik ersetzen Sie kal.datum durch Ihre Datumsspalte und lassen das WITH weg.

Zwei Stolperfallen, die mich gekostet haben:
ERROR: syntax error at or near "<" — die <ZS:…>-Tags werden clientseitig ersetzt. Ich hatte zuerst wie gewohnt in Metabase entwickelt und damit den Rohtext an PostgreSQL geschickt. Die Bedienelemente entstehen erst, wenn die Query als Statistik vom Typ SQL gespeichert und aus der Statistikliste gestartet wird.ERROR: syntax error at end of input — jeder Parameter hat links ein Häkchen und ist teilweise standardmäßig inaktiv. Ein inaktives Tag verschwindet ersatzlos, das vorangestellte AND bleibt stehen. Deshalb steht im Beispiel oben hinter jedem Tag ein true, und das verbindende AND wandert in den letzten Wert des Tags — bei SELECTION ans Ende jeder Option. Damit ist die Query in beiden Zuständen gültig.
Viele Grüße Richard Kupke