Das Schema der Reporting-Datenbank verstehen

Aktualisiert

BETA: Die Reporting-Datenbank befindet sich derzeit in der Beta-Phase und kann sich noch weiterentwickeln. Sie ist nur per Opt-in verfügbar. Um an der Beta teilzunehmen oder Fragen zu stellen, kontaktieren Sie support@azumuta.com.

Where Your Data Lives

Die verwaltete Reporting-Datenbank speichert die berichtspflichtigen Daten Ihres Workspaces in einem Schema namens company_<normalized-workspace-id>. Der Name verwendet Kleinbuchstaben und ersetzt andere Zeichen (außer Ziffern) durch Unterstriche. Eine benutzerdefinierte Datenbank kann einen anderen Schema-Namen verwenden. Verwenden Sie in den Beispielen unten Ihren konfigurierten Schema-Namen.

The Main Tables

Enabling the reporting database synchronisiert alle untenstehenden Tabellen. Sie können keine einzelnen Tabellen auswählen.

Table What it holds
workinstruction, workinstruction_version, workinstruction_tag Arbeitsanweisungen, ihre Versionen und die zugewiesenen Tags. Versionen enthalten auch nicht freigegebene Versionen. Verwenden Sie is_approved und is_effective, um Freigabe- und Wirksamkeitszustände zu prüfen.
instruction_step Die einzelnen Schritte innerhalb einer Arbeitsanweisungs-Version.
instruction_visit, instruction_total_visit, instruction_partial_check Jedes Mal, wenn ein Bediener einen Schritt durchläuft, Gesamtzahlen pro Schritt und Teilprüfungsübermittlungen.
recording, recording_status, recording_variant, recording_step Aufzeichnungen mit einer Arbeitsanweisungs-Version und deren Statusverlauf, ausgewählte Varianteninformationen und schrittbezogene Aufzeichnungsdaten. Diese können geplante Audits enthalten, die noch nicht begonnen wurden.
issue, board, issue_column Probleme, deren Boards und Board-Spalten. Dazu gehören Continuous Improvement-, Genehmigungs-, Andon- und Trainings-Trajektorien-Boards. Verwenden Sie issue.board_type, um einen Board-Typ auszuwählen.
issue_task, issue_comment, issue_attachment, issue_signature, issue_checklist Die an ein Issue angehängten Elemente.
issue_transition Die Historie eines Issues beim Wechsel zwischen Board-Spalten.
product_order, product_order_workinstruction, product_order_workinstruction_spot Produktionsaufträge und die mit ihnen verknüpften Arbeitsanweisungen.
article, article_category Produktartikel und deren Kategorien, nicht Knowledge-Base-Artikel.
tree_node Die Explore-Baumstruktur, die Module, Ordner und Inhalte organisiert.
user, user_group, user_group_member Personen und Gruppen in Ihrem Workspace.
competency_training, competency_level Jede Trainingsinformation hinter einer Zelle der Skill-Matrix: das Level, wie es vermittelt wurde (Training, Training ohne Trainer, Produktauftrag-Review oder manuell gesetzt), der bewertende Trainer, die Dauern, die trainierte Version und eine benutzerdefinierte Gültigkeitsdauer. competency_level enthält das Label, das Ihr Workspace für jedes Level anzeigt.
qualification Qualifikationen mit deren Typ.
qualification_competency_setting Die Skill-Matrix-Einstellungen jeder Qualifikation: ob ein Level einen Anhang oder eine benutzerdefinierte Gültigkeitsdauer benötigt und die Gültigkeits- und Warnzeiträume.
recording_trainee Die geplanten Trainees jedes Trainings, mit dem Level, das jeder erhalten hat.
workinstruction_competency_setting Die Learning-&-Development-Einstellungen jeder Arbeitsanweisung: das Mindestlevel zum Start eines Produktauftrags, die Level für Fast-Forward und zum Weglassen von Doppelprüfungen sowie die Gültigkeitsdauer.
tree_node_competency_coverage Für jede Zeile und jedes Level der Skill-Matrix, wie viele Personen dieses Level erreichen müssen. Ein Ordner ohne eigenen Wert übernimmt den niedrigsten Wert seiner verfügbaren Kinder, wie in der Skill-Matrix.
skill_matrix_cell Jede Zelle der Skill-Matrix, wie die Matrix sie zeigt: das Level und der Status jeder Person für jede Arbeitsanweisung oder Qualifikation sowie die Punktzahl jedes Ordners. Nur gefüllt, wenn Ihr Workspace gespeicherte Skill-Matrix-Zellen verwendet.

Audit recordings in the reporting database

Die Tabelle recording enthält nur Aufzeichnungen mit einer numerischen Arbeitsanweisungs-Version. Eine Aufzeichnung ohne Version ist ausgeschlossen, selbst wenn ihr Status Abgeschlossen (FINISHED) ist.

Die Aufzeichnung muss nicht In Bearbeitung (IN_PROGRESS) oder Abgeschlossen sein, um aufgenommen zu werden. Ein Offline-Download kann eine Arbeitsanweisungs-Version verknüpfen, während der Status Geplant (IN_QUEUE) bleibt. Nach einer erfolgreichen Synchronisation mit der Reporting-Datenbank kann diese Aufzeichnung also mit dem Status IN_QUEUE erscheinen.

Automatische Downloads hängen vom ausgewählten Inhalt und dem Datumsbereich des Geräts ab. Sie können auftreten, bevor ein Bediener ein Audit öffnet. Siehe Device Settings: Offline.

Das Schließen eines nicht begonnenen Audits als Nicht anwendbar (NOT_APPLICABLE) verknüpft die Arbeitsanweisungs-Version nicht automatisch. Wenn die Aufzeichnung keine Version hat, schließt die Reporting-Datenbank sie weiterhin aus. Der Status allein erklärt nicht, ob ein Audit in der Datenbank erscheint.

Status and result are different

Die Spalte status enthält den gespeicherten Wert, zum Beispiel IN_QUEUE, nicht das Anzeige-Label Geplant. Siehe Status, result, and notes für alle englischen Bezeichnungen und gespeicherten Werte.

Die Tabelle recording_status enthält Statusänderungen. Sie enthält keine Ergebnisänderungen.

Die Spalte recording.result speichert das ausgewählte Ergebnis, z. B. Erfolgreich (SUCCESS), Fehlgeschlagen (FAILED), Nicht anwendbar (NOT_APPLICABLE) oder Abgebrochen (CANCELLED). Neue Aufzeichnungen starten mit PLANNED. Dieser Wert kann bestehen bleiben, wenn kein Ergebnis ausgewählt wurde. Hat die Quell-Aufzeichnung keinen Ergebniswert, ist die Spalte NULL. Verwenden Sie status, nicht result, um den Ausführungszustand zu identifizieren.

Die Spalte is_failure wird aus Checks, Events und Nacharbeit berechnet. Sie kann true sein wegen:

  • Einer fehlgeschlagenen Prüfung oder Doppelprüfung.
  • Einem Drehmomentresultat von NOK.
  • Einer Zahl außerhalb der erlaubten Grenzen.
  • Eines Andon-Ereignisses, das während der Ausführung auf ein Problem hinweist.
  • Einem aktuellen oder vorherigen Nacharbeit (REWORK)-Status.

Die Spalte is_defect verwendet dieselben Prüfungen, schließt aber ausschließlich nur Nacharbeit aus. Zum Beispiel ergibt Nacharbeit ohne eine fehlgeschlagene Prüfung oder Andon-Ereignis is_failure = true und is_defect = false. Frühere Nacharbeit kann is_failure = true beibehalten, nachdem die Aufzeichnung beendet ist. Siehe Rework für den Workflow.

Keine der Berechnungen verwendet das ausgewählte Ergebnis. Um Nicht anwendbar oder Erfolgreich zu identifizieren, verwenden Sie result, nicht is_failure = false. Eine Aufzeichnung kann is_failure = false haben, ohne dass ein Ergebnis ausgewählt wurde.

Recording notes

Die Spalte recording.notes enthält die Aufzeichnungsnotizen, einschließlich der mit einem Ergebnis eingegebenen Notizen. Sie können mit notes = 'auto cleanup' filtern, um Aufzeichnungen mit genau dieser Notiz zu identifizieren. Fehlende oder leere Notizen erscheinen als NULL.

Vor der Hinzufügung von result und notes synchronisierte Zeilen können in diesen Spalten weiterhin NULL haben. Eine normale Synchronisation aktualisiert nur geänderte Aufzeichnungen. Siehe Fill columns for existing data, um diese Spalten für unveränderte historische Aufzeichnungen zu füllen.

Select audits and work instructions with tags

Tags, die Sie an eine Arbeitsanweisung oder ein Audit anhängen, stehen in der Tabelle workinstruction_tag, eine Zeile pro Tag. Verwenden Sie sie, um die richtigen Audits auszuwählen, ohne nach Namen oder Beschreibungen zu matchen, die beim Editieren des Texts brechen.

Column What it holds
workinstruction_id Die Arbeitsanweisung oder das Audit, an das das Tag angehängt ist.
workinstruction_name Deren Anzeige-Name.
tag Ein Tag. Tags sind Freitext; einigen Sie sich auf die Schreibweise in Ihrem Workspace.

Beispielsweise, um die Audits aufzulisten, die das Tag calculate_quality_score tragen:

select r.id, r.status, r.result
from "company_<your-workspace-id>".recording r
join "company_<your-workspace-id>".workinstruction_tag t
    on t.workinstruction_id = r.workinstruction_id
where r.type = 'AUDIT'
    and t.tag = 'calculate_quality_score';

Die Workinstruction-Tabelle hat keine Spalte, die Audits markiert. Wählen Sie Audits mit recording.type = 'AUDIT' aus.

Completed work and closed orders

Recording-Status und Produktauftrag-Status beschreiben unterschiedliche Arbeitsebenen:

Field and value Meaning
recording.status = 'FINISHED' Die Aufzeichnung ist beendet. Prüfen Sie result separat.
product_order.enhanced_status = 'all-complete' (Alle abgeschlossen) Der aktive Auftrag erfüllt die berechneten Abschlussbedingungen. Diese berücksichtigen seine Arbeitsanweisungen, Mengen und nicht archivierte Kindaufträge.
product_order.enhanced_status = 'finished' (Abgeschlossen) Der Auftrag wurde geschlossen.

Ein Auftrag kann weiterhin In Bearbeitung sein, obwohl seine Aufzeichnungen beendet sind, wenn die abgeschlossene Menge nicht seiner erforderlichen Menge entspricht. Ein aktiver Auftrag ohne Arbeitsanweisungen oder Kindaufträge ist Alle abgeschlossen. Siehe Product-order status.

Force-finishing an order bricht seine unvollendeten Aufzeichnungen ab. Diese Aufzeichnungen erhalten den Status FINISHED und das Ergebnis CANCELLED. Daher ist ein Abschluss kein Beweis für erfolgreiche Ausführung. product_order.finished_at protokolliert die Schließung des Auftrags, nicht notwendigerweise den Zeitpunkt, an dem alle Arbeiten erledigt waren.

product_order.activated_at protokolliert, wann der Auftrag erstmals aktiviert wurde. Für einen nie aktivierten Auftrag ist es NULL, ebenso für einen Auftrag, der vor der Erfassung der Aktivierungszeiten durch Azumuta aktiviert wurde. Es wird nicht aus execution_date abgeleitet, das ein geplantes Datum ist. Aufträge, die bereits vor dem Hinzufügen dieser Spalte synchronisiert wurden, erhalten nur bei Änderung einen Wert. Um es für alle bestehenden Aufträge zu füllen, bitten Sie den Azumuta-Support, Ihre Reporting-Daten zu löschen, sodass die nächste Synchronisation sie neu aufbaut.

Zone associations and assignment

product_order_workinstruction_spot verknüpft jedes Auftrags-Item mit seinen Zonen. Der zone_type identifiziert die Quelle:

  • assigned: eine Zone, die dem Auftrags-Item zugewiesen wurde.
  • accessed: eine Zone, die während der Bediener-Aktivität erfasst wurde, sofern dieselbe Zone nicht bereits assigned ist.
  • associated: eine Zone aus der Platzierung der Arbeitsanweisung, verwendet nur, wenn das Item keine zugewiesenen oder erfassten Zonen hat.

Die Tabelle kombiniert zugewiesene und erfasste Zonen. Sie behält eine Zeile pro Item und Zone, wobei assigned Vorrang hat. Eine gesperrte Zuweisung ist kein eigener SQL-Zonentyp.

Beispiel: Ein Item ist zugewiesen zu A, erfasst bei A und B und hat Standardplatzierung C. Die Zeilen sind assigned A und accessed B, ohne C. Ein Filter auf zone_type = 'accessed' verpasst daher den Zugriff bei A.

Fallback-Platzierung verwendet das direkte übergeordnete Tree-Node der Arbeitsanweisung, wenn dieser Node eine Zone ist. Es durchsucht nicht beliebige Vorfahren.

Zuweisungen können sich ändern. Die Felder assigned_spot_id beschreiben die Zuweisung, nicht einen unveränderlichen Ausführungsort. Die Association-Tabelle ist keine Zuweisungshistorie. Ihre Regeln stimmen auch nicht mit jedem eingebauten Widget überein. Siehe Zone filtering for product-order widgets für Widget-Konfiguration.

Join at the order-item level

Um geplante Arbeit zu zählen, starten Sie bei product_order_workinstruction. Wenn Sie Aufzeichnungsdetails benötigen, verwenden Sie einen Left Join von dessen recording_id auf recording.id. So behalten Sie Items ohne Reporting-Zeile für eine Aufzeichnung.

Verbinden Sie Zonen über product_order_workinstruction_spot.product_order_workinstruction_id = product_order_workinstruction.id. Verbinden Sie nicht nur per workinstruction_id: Mehrere Auftrags-Items können dieselbe Arbeitsanweisung verwenden.

Mehrere Zonen oder Besuche können die Menge eines Items oder die Dauer einer Aufzeichnung in einem Join-Ergebnis wiederholen. Verwenden Sie EXISTS für einen Association-Filter oder aggregieren Sie jede Quelle vor dem Join. Siehe Count order items associated with a zone.

Planned users and actual operators

recording.planned_user_id und planned_group_id beschreiben die Zuweisung. Sie identifizieren nicht alle Personen, die die Arbeit ausgeführt haben. instruction_visit.user_id identifiziert den Bediener für diesen Besuch.

Bei einer Schulung ist planned_user_id der geplante Trainer und recording.trainer_id der Trainer, der die Schulung beendet hat. Die Trainees stehen in recording_trainee.

Mehrere Bediener können zu einer Aufzeichnung beitragen. Zählen Sie für jeden Bediener die eindeutigen Recording-IDs, nicht die Visit-Zeilen. Eine geteilte Aufzeichnung zählt dann für jeden beteiligten Bediener. Siehe Recordings für den Reporting-Workflow und the operator query für diese Berechnung.

Filter steps by check type

instruction_step.check_type enthält den Typ der Prüfung in einem Schritt. Verwenden Sie ihn statt auf step_description zu matchen, das sich ändert, wenn jemand den Schritt bearbeitet. Die Spalte ist NULL für einen Schritt ohne Prüfung.

Value Check
choice/ok-nok OK/NOK
choice/yes-no Ja/Nein
choice/single Einzelwahl
choice/multiple Mehrfachwahl
number/prompt Zahl
number/slider Schieberegler
number/score Punktzahl
tools/torque Drehmoment
text/line Einzeilige Eingabe
text/paragraph Absatz
text/masked Maskierte Eingabe
text/unique-id Automatische ID
camera/bar-code Barcode
camera/picture Bilder
camera/signature Handschriftliche Unterschrift
table Tabelle
special/attachment Dateien
special/print Drucken
special/email E-Mail
special/procedure Verfahren
special/identifier Produktauftragsnummer
special/variants Varianten
special/timer Timer
special/link-product Produktauftrag verknüpfen
special/scan-parts Bauteile
special/electronic-signature Elektronische Signatur

Beispiel, um die Schritte mit einer OK/NOK-Prüfung aufzulisten:

select workinstruction_name, step_description
from "company_<your-workspace-id>".instruction_step
where check_type = 'choice/ok-nok';

Die Werte stehen auch in der Beschreibung der Spalte; siehe the built-in data dictionary.

Visits, attempts, and applicable steps

  • instruction_visit hat eine Zeile, wenn ein Bediener einen Schritt verlässt. Ein noch offener Besuch kann noch keine Zeile haben.
  • type = 'normal' und type = 'double-check' sind getrennte Besuchsgruppen. is_last_visit markiert den letzten Besuch innerhalb seiner Gruppe, nicht notwendigerweise den letzten Besuch mit einer Antwort. Siehe Double-checks.
  • Eine blockierte oder ungültige Prüfung zählt als Versuch, liefert aber keine akzeptierte Antwort. instruction_total_visit.answer_attempts zählt Besuche mit einem Versuch, nachdem der Bediener den Schritt verlassen hat, nicht einzelne Button-Drücke.
  • instruction_total_visit enthält Gesamtkonten und die final aufgezeichnete Antwort für jede Aufzeichnung, jeden Schritt und jeden Besuchstyp. Eine aufgezeichnete Antwort ist nicht notwendigerweise eine erfolgreiche Antwort.
  • recording_step.active = false bedeutet, dass Varianten den Schritt ausschließen. Kein Besuch ist zu erwarten. Ältere Aufzeichnungen ohne gespeicherte Variantenwahl behandeln alle Schritte als aktiv. Siehe Variants und variant configuration.

Fehlende Daten allein beweisen keinen Misserfolg. Prüfen Sie Anwendbarkeit, Aufzeichnungsstatus und ob der Schritt eine Antwort verlangt. Siehe Compare applicable steps with recorded answers.

Version and parameter context

Verbinden Sie recording.workinstruction_version_id mit workinstruction_version.id, um die mit der Aufzeichnung verknüpfte Version auszulesen. Verwenden Sie nicht die aktuelle Arbeitsanweisungs-Version zur Interpretation historischer Schritte. Freigabe ist eine separate Eigenschaft; siehe Revision History.

Parameter werden als JSON-Objekt gespeichert, dessen Schlüssel der Parametername ist. Lesen Sie einen Wert mit parameters->>'key'. Eine Aufzeichnung oder ein Auftrag ohne Parameter hat NULL.

Um eine Antwort in der Reporting-Datenbank verfügbar zu machen, aktivieren Sie Write value to parameters bei der Prüfung und geben Sie einen stabilen Schlüssel, z. B. machine_operator. Siehe Use a parameter in a Product Check. Selektieren Sie anhand dieses Schlüssels, statt auf Schrittbeschreibungen zu matchen:

select id, parameters->>'machine_operator' as machine_operator
from "company_<your-workspace-id>".recording
where parameters->>'machine_operator' = 'Jan';

Eine Produktauftrag-Aufzeichnung speichert ihre Parameter auf dem Auftrag, daher ist recording.parameters dafür leer. Lesen Sie product_order.parameters über recording.product_order_id. Die Spalte ist ebenfalls ein JSON-Objekt, sodass derselbe Ausdruck funktioniert:

select r.id, o.parameters->>'batch' as batch
from "company_<your-workspace-id>".recording r
join "company_<your-workspace-id>".product_order o
    on o.id = r.product_order_id;

Audits und andere Aufzeichnungen, die keine Produktauftrag-Aufzeichnungen sind, nutzen recording.parameters. Siehe Product-order parameters und Introduction to parameters für die Bedeutung eines Parameters.

JSON-Felder können Listen oder verschachtelte Objekte enthalten, nicht nur Zahlen oder Text. Prüfen Sie vor der Konvertierung den Typ jedes Werts. Ein SQL-NULL zeigt fehlende Daten an, nicht Null oder eine fehlgeschlagene Antwort.

Fill columns for existing data

Eine neue Spalte oder Tabelle füllt sich während der nächsten Synchronisation. Eine bereits existierende Zeile erhält nur dann einen Wert in einer neuen Spalte, wenn ihr Quell-Datensatz das nächste Mal ändert; historische Daten können also leer bleiben. Das gilt für Spalten, die nach der Aktivierung der Reporting-Datenbank hinzugefügt wurden, wie recording.result, recording.notes, recording.parameters, recording.trainer_id, tree_node.competency_importance, workinstruction_version.is_training_required und instruction_step.check_type. Die Tabelle workinstruction_tag füllt sich selbst.

Um die Historie einmalig zu füllen, verwenden Sie Clear data in der Reporting-Konfiguration. Dadurch werden alle synchronisierten Zeilen für Ihren Workspace entfernt, die Reporting-Datenbank bleibt aktiviert. Die nächste Synchronisation füllt jede Tabelle von Grund auf neu.

Warnung: Abfragen und BI-Reports zeigen bis zur abgeschlossenen Synchronisation keine Daten an. Die Schaltfläche ist nicht verfügbar, während eine Synchronisation läuft. Siehe Enable the reporting database.

Conventions Used Throughout

  • Primary keys. Jede Tabelle hat einen textbasierten Primärschlüssel namens id. Dieser identifiziert einen Quell-Datensatz oder eine generierte Zeile. Verwandte Spalten verwenden Namen wie recording_id und workinstruction_id. Zum Beispiel verbinden Sie recording.workinstruction_id mit workinstruction.id.
  • Deletions. Wenn eine Synchronisation einen gelöschten Quell-Datensatz erkennt, entfernt sie die entsprechenden Reporting-Zeilen. Aktuelle Tabellendefinitionen enthalten kein deleted_at. Ältere Datenbanken können diese Spalte behalten, da Schema-Updates alte Spalten nicht entfernen. Die aktuelle Synchronisation pflegt sie nicht; verwenden Sie sie nicht als aktuelles Löschindikator. Archivierte Datensätze unterscheiden sich von gelöschten Datensätzen. Beispiel: issue.archived_at identifiziert archivierte Issues.
  • Sync timestamps. Jede Tabelle hat first_synced_at und last_synced_at. Diese protokollieren die erste und die zuletzt schreibende Synchronisation der Zeile, nicht die Erstellungs- oder Änderungszeit des Quell-Datensatzes.
  • Source timestamps. Spalten wie created_at, updated_at und started_at hängen von der Tabelle ab. PostgreSQL speichert diese Zeitstempel als Instants in UTC und zeigt sie in der Sitzungs-Zeitzone an.
  • Recording durations. recording.actual_duration und recording.rework_time sind in Sekunden und können Bruchteile enthalten. Teilen Sie sie nicht durch 1000. Prüfen Sie die Spaltenbeschreibung für die Einheit anderer Felder.
  • Flexible fields use JSON. Daten mit variabler Form (wie parameters oder eine Instruktions-answer) werden als jsonb gespeichert, das Sie mit PostgreSQLs JSON-Operatoren abfragen können.
  • Pre-computed values. Um zusätzliche Joins zu sparen, enthalten einige Tabellen fertige Zählungen und Metriken, z. B. issue.comment_count, issue.open_task_count oder recording.rework_time.

The Built-In Data Dictionary

Jede Tabelle und jede Spalte hat eine menschenlesbare Beschreibung. Die meisten SQL-Clients und BI-Tools zeigen diese automatisch an. Zum Beispiel in psql:

\d+ "company_<your-workspace-id>".issue

Sie können sie auch mit einer Abfrage lesen:

select column_name, col_description(
    ('company_<your-workspace-id>.issue')::regclass,
    ordinal_position
) as description
from information_schema.columns
where table_schema = 'company_<your-workspace-id>'
  and table_name = 'issue'
order by ordinal_position;

Bereit zu queryen? Siehe Example Analytics Queries.