Zum Inhalt springen

Abfragen mit dem Baukasten

Ein Abfrage-Tag liest die erfassten Datensätze und liefert daraus einen Wert — eine Kennzahl, eine Summe, eine Anzahl. Wie dieser Wert zustande kommt, können Sie auf zwei Arten festlegen: im Baukasten beschreiben Sie, was die Zahl sagen soll, und die Abfrage entsteht daraus. Im Modus SQL schreiben Sie die Abfrage selbst.

Sie schalten oben am Abfrage-Tag zwischen beiden um. Ein Tag, das mit dem Baukasten gebaut wurde, öffnet im Baukasten; ein von Hand geschriebenes öffnet in SQL.

Quelle. Über welche Datensätze gerechnet wird — eine Datensatz-Art, zum Beispiel ProductionReport. Stammdaten stehen hier nicht zur Wahl: Sie sind die Werte, aus denen ein Filter auswählt, nicht das, worüber gerechnet wird.

Ergebnis. Entweder eine Kennzahl der Anlage (Verfügbarkeit, Leistung, Qualität, OEE) oder eine einfache Rechnung über ein Feld: Anzahl der Datensätze, Summe, Mittelwert, kleinster oder größter Wert. Eine Kennzahl wird nur angeboten, wenn die gewählte Datensatz-Art wirklich alle Felder hat, die ihre Formel liest. Damit steht in der Liste nie eine Zahl, die nachher nur einen Fehler ergeben kann.

Zeitraum. Ein Feld, das einen Zeitpunkt trägt, etwa ProductionReport.Timestamp. Das Feld steht qualifiziert da, weil es ein Feld der Datensatz-Art eine Spalte weiter links ist. Aus dem Zeitraum entstehen die beiden Parameter from und to — was sie füllt, steht unter Parameter und Bindungen. Ohne Zeitraum gilt die Zahl für alle Datensätze.

Filter. Welche dieser Datensätze zählen. Bedingungen lassen sich zu Gruppen mit Alle oder Eine verschachteln. Hat ein Feld eine geschlossene Werteliste, wählen Sie den Wert aus einer Liste statt ihn zu tippen — das ist die häufigste Ursache für einen Filter, der stillschweigend nichts trifft. Eine Bedingung ohne Wert wird nicht mitgeschrieben: eine halbfertige Bedingung kann das Ergebnis nicht verändern.

Aufgeschlüsselt nach. Ein Feld oder mehrere. Je Kombination entsteht eine Ergebniszeile — das ist die Form, die eine Gruppentabelle oder ein Pareto-Widget braucht. Nichts gewählt heißt eine Zeile.

Rechts unten steht Die Abfrage, die daraus entsteht. Sie folgt der Beschreibung bei jeder Änderung; es gibt keinen Knopf, der sie erst erzeugt. Wer kein SQL liest, kann sie ignorieren.

Für „Anzahl der Datensätze aus ProductionReport über Timestamp” sieht sie so aus:

WITH src AS (
SELECT 1 AS row_present
FROM "ProductionReport"
WHERE active
AND ($1::timestamptz IS NULL OR "ProductionReport.Timestamp" >= $1::timestamptz)
AND ($2::timestamptz IS NULL OR "ProductionReport.Timestamp" < $2::timestamptz)
)
SELECT COUNT(*)::numeric AS "Value"
FROM src

Mit einer Summe und einer Aufschlüsselung nach Line:

WITH src AS (
SELECT "ProductionReport.Line" AS line, "ProductionReport.GoodParts" AS good_parts
FROM "ProductionReport"
WHERE active
)
SELECT line AS "Line",
SUM(good_parts::numeric) AS "Value"
FROM src
GROUP BY line
ORDER BY line

Zwei Eigenschaften dieser Form sind Absicht:

  • WHERE active steht immer da. Ein zurückgenommener Datensatz zählt in keiner Zahl mit.
  • Die Ergebnisspalte heißt Value. Das ist der Name, unter dem ein Widget die Zahl sucht.

Neben der erzeugten Abfrage steht Ausprobieren. Der Probelauf zeigt die Antwort als Tabelle — siehe Der Probelauf.

Sobald Sie die Abfrage im Modus SQL von Hand ändern, wird die Beschreibung des Baukastens verworfen. Das ist gewollt: eine stehengebliebene Beschreibung würde später anbieten, eine handgeschriebene Abfrage durch eine grobe Näherung davon zu ersetzen.

Umgekehrt gilt dasselbe. Wechseln Sie an einer von Hand geschriebenen Abfrage in den Baukasten, öffnet er leer. Er errät nicht, was in der Abfrage steht. Gespeichert wird erst, wenn Sie wirklich etwas gebaut haben.