SQL-Server-Berichte nach Zeitplan

Abfragen. Aufbereiten. Abliefern.

QueryPilot führt SQL-Abfragen zeitgesteuert aus, schreibt die Ergebnisse als Excel, CSV, HTML oder JSON, lässt sie auf Wunsch von einer KI zusammenfassen und versendet alles per E-Mail. Dateibasiert, portabel, ohne eigene Datenbank für die Konfiguration.

Windows 10/11, Serverx64, Laufzeit enthalten
SQL ServerT-SQL, parametrisierte Variablen
AES-256-GCMfür gespeicherte Kennwörter
QueryPilot – Jobs › Berichte › UMSATZ › SQL-String

Screenshot: Jobansicht mit Queries, KI-Magic, Variablen und Zeitplanung, daneben der SQL-Editor.

QueryPilot Desktop: Job Berichte mit Queries, KI-Magic, Variablen und Zeitplanung, rechts der SQL-Editor mit Syntaxfärbung

Einblick

Ein Job, von der Abfrage bis zur E-Mail

Alles zu einem Job steht in einem Fenster: Queries, KI-Auswertungen, Variablen, E-Mail und Zeitplanung. Wählen Sie eine Ansicht per Klick oder mit den Pfeiltasten aus.

Ablauf

Ein Lauf, fünf Schritte

Jeder Lauf folgt derselben Reihenfolge. Beim ersten Fehler wird abgebrochen, damit keine unvollständigen Berichte verschickt werden.

1

Auslösen

Eine Zeitregel im Windows-Dienst startet den Job, oder ein Klick im Desktop.

2

Variablen

Text, Zahl, Datum, Ausdruck oder erster Wert einer SQL-Abfrage.

3

Queries

Nacheinander gegen SQL Server, Werte als echte Parameter.

4

Aufbereiten

Excel mit Vorlage, CSV, HTML mit Formatvorlage oder JSON. Optional eine KI-Zusammenfassung.

5

Versand

Bei erfüllter Zeilenbedingung, bei Bedarf gezippt, per SMTP an die Empfänger des Jobs.

Zentrale Verwaltung

Server, KI und E-Mail einmal hinterlegen

Datenbankverbindungen, KI-Anbindungen und der E-Mail-Versand werden einmal zentral gepflegt und stehen dann allen Jobs zur Verfügung. Jobs verweisen nur auf das Kürzel. Zieht ein Server um oder ändert sich der SMTP-Host, genügt eine Änderung an einer Stelle.

Bausteine

Drei Teile, ein Datenordner

Desktop und Dienst arbeiten auf denselben XML-Dateien und demselben Schlüssel. Der Datenordner liegt lokal oder auf einer geschützten Freigabe.

QueryPilot.Core

Kern

Die gemeinsame Programmbibliothek ohne eigene Oberfläche. Sie liest die XML-Konfiguration, entschlüsselt Kennwörter, löst Platzhalter und Variablen auf, führt die Abfragen aus, schreibt Excel, CSV, HTML, Text und JSON, ruft die KI, versendet und zippt die E-Mail, wertet Zeitregeln aus und schreibt die Historie. Desktop und Dienst rufen dieselbe Logik auf, deshalb liefert ein Testlauf dasselbe Ergebnis wie der Server.

QueryPilot.Desktop

Desktop

Portable Oberfläche für Jobs, Verbindungen, KI-Verbindungen, Formatvorlagen, SQL-Vorschau und Testlauf. Startet lokal oder von einer Netzwerkfreigabe.

QueryPilot.Service

Windows-Dienst

Führt die Zeitregeln aller Jobs aus, ohne angemeldeten Benutzer, und stellt dem Desktop eine Schnittstelle für Status und Sofortstart bereit.

Funktionen

Was im Alltag zählt

Zeitregeln

Täglich, wöchentlich, bestimmte Monatstage, Monatserster und -letzter, erster Wochentag im Monat, Intervall im Zeitfenster, einmalig.

Excel mit Vorlage

Mehrere Queries schreiben in die Tabellenblätter einer Vorlagenarbeitsmappe. Formeln und Formatierung bleiben erhalten.

HTML-Formatvorlagen

Verwaltbare Vorlagen mit eigenem CSS und JavaScript. Tabellen können direkt in den E-Mail-Text eingebettet werden.

JSON-Export

Ergebnisse als UTF-8-JSON mit Kürzel, Name, Beschreibung, Spalten samt Datentyp und Zeilen. Zahlen und Wahrheitswerte bleiben nativ, NULL wird null.

KI-Magic

Eine KI-Auswertung fasst ausgewählte Query-Ergebnisse nach eigenem Prompt zusammen. Das Ergebnis steht als Text, Markdown oder HTML in der E-Mail. Jede OpenAI-kompatible Chat-API lässt sich anbinden.

SQL-Vorschau

Nicht-modales Fenster mit Syntaxfärbung, Zeilennummern und bis zu 200 Datensätzen. Fehler erscheinen direkt in der Vorschau.

Fehler-E-Mail

Schlägt ein Job fehl, geht eine Meldung an feste Empfänger. Zu große Anhänge werden mit Datei, Größe und Ablageort benannt statt still weggelassen.

Sichere Ablage

Kennwörter mit AES-256-GCM verschlüsselt. Beim Speichern wird die Datei erst fertig geschrieben und dann in einem Zug getauscht, ein halber Stand kann nicht entstehen. Frühere Fassungen bleiben erhalten.

Platzhalter und Variablen

Datum, Kontext und eigene Werte

Platzhalter gelten in Dateinamen, Zielpfaden, Betreff und Nachricht. Jobvariablen stehen zusätzlich als SQL-Parameter zur Verfügung und werden nie in den SQL-Text kopiert.

  • Datumsrechnung mit .NET-Formatzeichen, etwa {date-1;"dd.MM.yyyy"}
  • Vorwoche von Montag bis Sonntag, Monatsanfang und -ende
  • Jobname, Query-Kürzel, Kalenderwoche, Rechner- und Benutzername
  • KI-Ergebnisse als {KI1.Text}, {KI1.Markdown} oder {KI1.Html}
  • Variablen verketten: spätere dürfen frühere verwenden
{date}{date+N}{month-start}{month-end-1}{week-start-1}{calendarweek}{jobname}{querycode}{username}
-- Jobvariablen (in dieser Reihenfolge ermittelt)
Von     | Zeitraum von | Expression | {month-start;"yyyy-MM-dd"}
Bis     | Zeitraum bis | Expression | {month-end;"yyyy-MM-dd"}
Mandant | Mandant      | SqlQuery   | SELECT TOP (1) Mandant FROM dbo.Mandanten

-- Verwendung im SQL-String, als echte Parameter
SELECT Kunde, Belegdatum, Nettobetrag
FROM   dbo.Umsatz
WHERE  Belegdatum BETWEEN @Von AND @Bis
ORDER BY Belegdatum;

-- Verwendung im Dateinamen und im Betreff
Umsatz_{Mandant}_{date;"yyyy-MM-dd"}.xlsx
Monatsbericht {date;"MMMM yyyy"}

Historie

Sehen, wann was gelaufen ist

Jede ausgeführte Query wird protokolliert, mit Zeitstempel, Job, Kürzel, Zeilenanzahl, Dauer und Erfolg. Bei einem Fehler steht die Meldung in derselben Zeile.

  • Eine Historie je Job und eine gemeinsame über alle Jobs
  • Als CSV im Datenordner, direkt in Excel auswertbar
  • Die Übersicht zeigt die Ausführungen der letzten 24 Stunden

Screenshot: Historienansicht mit Zeitstempel, Job, Query, Zeilenanzahl, Dauer und Erfolg.

Historienansicht mit Zeitstempel, Jobname, Query-Kürzel, Zeilenanzahl, Dauer, Erfolg und Fehlermeldung

Betrieb

Windows-Dienst mit Zeitregeln

Der Dienst läuft auf dem Ausführungsserver ohne angemeldeten Benutzer, prüft die Zeitregeln aller Jobs und führt sie aus. Das Desktopprogramm spricht ihn direkt an: Status prüfen, Dienst starten und beenden, einen Job sofort auf dem Server ausführen.

  • Datenordner mit Jobs, Verbindungen und Schlüssel liegt zentral auf einer Freigabe
  • Die HTTP-Schnittstelle verwendet die Windows-Anmeldung des aufrufenden Benutzers
  • Der Installationsbefehl wird im Programm fertig zusammengesetzt und kann kopiert werden
  • Das Dienstkonto braucht das Recht Anmelden als Dienst sowie Zugriff auf SQL Server, Ordner und SMTP

Screenshot: Ansicht Windowsdienst mit Serverdienst-Adresse, Prüfung und Installationsbefehl.

Ansicht Windowsdienst mit Service-Ordner, Serverdienst-Adresse, Prüfschaltflächen und kopierbarem PowerShell-Befehl

Installation auf dem Server

$konto = Get-Credential 'DOMÄNE\QueryPilotDienst'
.\Install-Service.ps1 `
    -DataRoot '\\Dateiserver\Freigabe\QueryPilot-Daten' `
    -Port 5098 `
    -ServiceCredential $konto `
    -OpenFirewall

Voraussetzungen

Was gebraucht wird

  • Windows Server oder Windows 10/11, 64 Bit
  • Ein dediziertes Windows-Dienstkonto mit Zugriff auf SQL Server, Datenordner und SMTP
  • Ein Datenordner, per NTFS nur für Administratoren und das Dienstkonto lesbar
  • Für KI-Magic: Zugang zu einer OpenAI-kompatiblen Chat-API

Woher das kommt

Aus dem eigenen Tagesgeschäft entstanden

Auswertungen waren jahrelang ein Teil meines Tagesgeschäfts. Zahlen ziehen, aufbereiten, verschicken. Immer und immer öfter und immer mehr wiederkehrend.

Irgendwann war Automatisieren keine Spielerei mehr, sondern schlicht notwendig. Dabei zeigt sich schnell: Die Abfrage selbst ist selten das Problem. Es sind die Stellen daneben.

  • Ein Wert wird in mehreren Abfragen gebraucht. Er sollte einmal festgelegt werden und dann überall gelten, statt in jeder Abfrage erneut dortzustehen.
  • Manche Werte kennt man vorher gar nicht. Der durchschnittliche Auftragseingang des Vormonats muss erst selbst ermittelt werden, damit anschließend die einzelnen Aufträge dagegen verglichen werden können.
  • Eine Excel-Vorlage soll ihre Formeln, ihre Formatierung und ihre Blattnamen behalten, auch wenn eine Abfrage mitten hinein schreibt.
  • Der letzte Tag des Monats ist im Februar ein anderer als im März, und im Schaltjahr wieder ein anderer.
  • Ein Anhang, der für den Mailserver zu groß ist, darf nicht einfach fehlen. Der Empfänger muss lesen können, wie groß die Datei ist und wo sie liegt.
  • Läuft nachts um vier eine Abfrage in eine Zeitüberschreitung, muss das jemand erfahren, und zwar bevor der Verteiler es merkt.

Solche Kleinigkeiten entscheiden darüber, ob man dem Bericht am Morgen traut. Deshalb steckt an vielen Stellen eine bewusste Entscheidung. Das Desktopprogramm und der Dienst arbeiten mit demselben Programmkern. Ein Testlauf am Arbeitsplatz macht deshalb genau das, was nachts auf dem Server passiert, und nicht ungefähr dasselbe.

Auch beim Speichern wird nichts riskiert. Eine geänderte Datei wird zuerst vollständig neu geschrieben und erst danach in einem Zug gegen die alte getauscht. Bricht dabei etwas ab, etwa weil der Rechner ausgeht, bleibt der bisherige Stand unversehrt. Eine halb geschriebene Konfiguration kann es nicht geben. Die vorherigen Stände bleiben zusätzlich liegen, man kommt also jederzeit auf eine ältere Fassung zurück. Und die gespeicherten Kennwörter sind mit einem Schlüssel gesichert, den Arbeitsplatz und Dienstkonto gemeinsam nutzen, weil beide denselben Datenordner lesen müssen.

QueryPilot will damit kein weiteres Berichtssystem sein, sondern den Weg von der Abfrage bis ins Postfach verlässlich abdecken. Und damit das Aufsetzen eines Abfragesets schnell geht, habe ich nach dem Prinzip Usability first entwickelt: Was häufig gebraucht wird, liegt dort, wo man es sucht, und nicht drei Menüs tiefer.

Thorsten KrügerEntwickler von QueryPilot

Nächster Schritt

Welche Auswertung kostet Sie am meisten Zeit?

Nennen Sie uns diese eine Auswertung. Wir klären gemeinsam, ob sie sich mit QueryPilot abbilden lässt und was der Aufbau kostet. Vorhandene Abfragen lassen sich übernehmen.