Das Reporting-Datenbankschema 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 reportbaren Daten Ihres Workspaces in einem Schema mit dem Namen company_<normalized-workspace-id>. Der Name verwendet Kleinbuchstaben und ersetzt andere Zeichen außer Ziffern durch Unterstriche. Eine kundenspezifische Datenbank kann einen anderen Schemabezeichner verwenden. Verwenden Sie in den untenstehenden Beispielen Ihren konfigurierten Schemabezeichner.

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 umfassen auch nicht freigegebene Versionen. Verwenden Sie is_approved und is_effective, um Freigabe- und Wirksamkeitszustand zu prüfen.
instruction_step Die einzelnen Schritte innerhalb einer Work-Instruction-Version.
instruction_visit, instruction_total_visit, instruction_partial_check Jedes Mal, wenn ein Bediener einen Schritt durchläuft, Schritt-Gesamttabellen und übermittelte Teilprüfungen.
recording, recording_status, recording_variant, recording_step Aufzeichnungen mit einer Instruction-Version und deren Statusverlauf, ausgewählte Variantendaten und pro Schritt erfasste Aufzeichnungsdaten. Diese können geplante Audits enthalten, die noch nicht gestartet wurden.
issue, board, issue_column Probleme, deren Boards und Board-Spalten. Dazu gehören Continuous Improvement-, Genehmigungs-, Andon- und Schulungstrajektorie-Boards. Verwenden Sie issue.board_type, um einen Board-Typ auszuwählen.
issue_task, issue_comment, issue_attachment, issue_signature, issue_checklist An ein Issue angehängte 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 Work Instructions.
article, article_category Produktartikel und deren Kategorien, nicht Wissensdatenbank-Artikel.
tree_node Die Explore-Baumstruktur, die Module, Ordner und Inhalte organisiert.
user, user_group, user_group_member Personen und Gruppen in Ihrem Workspace.

Audit recordings in the reporting database

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

Die Aufnahme muss nicht In progress (IN_PROGRESS) oder Finished sein, um aufgenommen zu werden. Ein Offline-Download kann eine Instruction-Version verknüpfen, während der Status Planned (IN_QUEUE) bleibt. Nach einem erfolgreichen Sync der Reporting-Datenbank kann diese Aufzeichnung mit dem Status IN_QUEUE auftauchen.

Automatische Downloads hängen von den auf dem Gerät gewählten Inhalten und dem Datumsbereich ab. Sie können auftreten, bevor ein Bediener ein Audit öffnet. Siehe Device Settings: Offline.

Das Schließen eines nicht gestarteten Audits als N/A (NOT_APPLICABLE) verknüpft nicht automatisch eine Instruction-Version. 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, z. B. IN_QUEUE, nicht das Anzeige-Label Planned. Siehe Status, result, and notes für alle englischen Labels und gespeicherten Werte.

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

Die Spalte recording.result speichert das gewählte Ergebnis, z. B. Success (SUCCESS), Failed (FAILED), N/A (NOT_APPLICABLE) oder Cancelled (CANCELLED). Neue Aufzeichnungen starten mit PLANNED. Dieser Wert kann bestehen bleiben, wenn kein Ergebnis ausgewählt wurde. Wenn die Quellaufzeichnung keinen Ergebniswert hat, ist die Spalte NULL. Verwenden Sie status, nicht result, um den Ausführungszustand zu identifizieren.

Die Spalte is_failure wird aus Prüfungen, Ereignissen und Nacharbeit berechnet. Sie kann true sein aufgrund von:

  • Einer fehlgeschlagenen Prüfung oder Doppelprüfung.
  • Einem Drehmomentergebnis von NOK.
  • Einer Zahl außerhalb der erlaubten Grenzen.
  • Eines Andon-Ereignisses, das ein Problem während der Ausführung signalisiert.
  • Einem aktuellen oder früheren Rework (REWORK) Status.

Die Spalte is_defect verwendet dieselben Prüfungen, schließt aber alleinige Nacharbeit aus. Zum Beispiel führt Nacharbeit ohne fehlgeschlagene Prüfung oder Andon-Ereignis zu 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 gewählte Ergebnis. Um N/A oder Success 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 Notizen, die zusammen mit einem Ergebnis eingegeben wurden. Sie können mit notes = 'auto cleanup' filtern, um Aufzeichnungen mit genau dieser Notiz zu identifizieren. Fehlende oder leere Notizen erscheinen als NULL.

Zeilen, die vor dem Hinzufügen von result und notes synchronisiert wurden, können in diesen Spalten weiterhin NULL enthalten. Ein normaler Sync aktualisiert nur geänderte Aufzeichnungen. Ein vollständiger Resync ist erforderlich, um diese Spalten für unveränderte historische Aufzeichnungen zu füllen.

Completed work and closed orders

Aufzeichnungsstatus und Produktauftragsstatus 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' (All complete) Der aktive Auftrag erfüllt die berechneten Abschlussbedingungen. Diese berücksichtigen seine Work Instructions, Mengen und nicht archivierte Unteraufträge.
product_order.enhanced_status = 'finished' (Finished) Der Auftrag wurde geschlossen.

Ein Auftrag kann weiterhin In progress sein, wenn seine Aufzeichnungen beendet sind, die abgeschlossene Menge jedoch nicht der geforderten Menge entspricht. Ein aktiver Auftrag ohne Work Instructions oder Unteraufträge ist All complete. 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 eine Schließung kein Beweis für erfolgreiche Ausführung. product_order.finished_at protokolliert die Auftragsschließung, nicht notwendigerweise den Zeitpunkt, zu dem alle Arbeiten abgeschlossen wurden.

product_order.activated_at protokolliert, wann der Auftrag erstmals aktiviert wurde. Er ist NULL für einen Auftrag, der nie aktiviert wurde, und für einen Auftrag, der vor der Erfassung von Aktivierungszeiten durch Azumuta aktiviert wurde. Er leitet sich nicht von execution_date ab, das ein geplantes Datum ist. Aufträge, die bereits vor dem Vorhandensein dieser Spalte synchronisiert wurden, erhalten nur einen Wert, wenn sie sich ändern. Um ihn für alle bestehenden Aufträge zu füllen, bitten Sie den Azumuta-Support, Ihre Reporting-Daten zu löschen, damit der nächste Sync sie neu aufbaut.

Zone associations and assignment

product_order_workinstruction_spot verbindet jedes Auftrags-Item mit seinen Zonen. Der zone_type identifiziert die Quelle:

  • assigned: eine Zone, die dem Auftrags-Item zugewiesen ist.
  • accessed: eine Zone, die während der Bedieneraktivität erfasst wurde, sofern dieselbe Zone nicht bereits assigned ist.
  • associated: eine Zone aus der Platzierung der Work Instruction, 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 Priorität hat. Eine gesperrte Zuordnung ist kein separater SQL-Zonentyp.

Beispiel: Ein Item ist A zugewiesen, wurde bei A und B erfasst und hat als Standardplatzierung C. Die Zeilen sind assigned A und accessed B, C fehlt. Ein Filter auf zone_type = 'accessed' übersieht daher den Zugriff bei A.

Fallback-Platzierung verwendet den direkten übergeordneten Baumknoten der Work Instruction, wenn dieser Knoten eine Zone ist. Es werden keine willkürlichen Vorfahren durchsucht.

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

Join at the order-item level

Um geplante Arbeiten zu zählen, beginnen Sie mit product_order_workinstruction. Wenn Sie Aufzeichnungsdetails benötigen, verwenden Sie einen Left Join von dessen recording_id auf recording.id. Dadurch bleiben Items erhalten, die keine Reporting-Zeile für eine Aufzeichnung haben.

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 Work Instruction verwenden.

Mehrere Zonen oder Besuche können in einem verbundenen Ergebnis die Menge eines Items oder die Dauer einer Aufzeichnung mehrfach zählen. Verwenden Sie EXISTS für einen Assoziationsfilter oder aggregieren Sie jede Quelle, bevor Sie verbinden. 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.

Mehrere Bediener können zu einer Aufzeichnung beitragen. Zählen Sie für jeden Bediener eindeutige Recording-IDs, nicht Besuchszeilen. Eine geteilte Aufzeichnung zählt dann für jeden beitragenden Bediener. Siehe Recordings für den Bericht-Workflow und the operator query für diese Berechnung.

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 separate 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 verlässt, nicht einzelne Knopfdrücke.
  • instruction_total_visit enthält Summen 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 Variantenauswahl behandeln alle Schritte als aktiv. Siehe Variants und variant configuration.

Fehlende Daten allein beweisen keinen Fehler. 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 zu lesen. Verwenden Sie nicht die aktuelle Work-Instruction-Version zur Interpretation historischer Schritte. Freigabe ist eine getrennte Eigenschaft; siehe Revision History.

Bei Produktauftrags-Aufzeichnungen lesen Sie Parameter aus product_order.parameters über recording.product_order_id. Andere Aufzeichnungsparameter können in recording.parameters liegen. 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 den Typ jedes Werts, bevor Sie ihn konvertieren. Ein SQL-NULL zeigt fehlende Daten an, nicht Null oder eine fehlgeschlagene Antwort.

Conventions Used Throughout

  • Primary keys. Jede Tabelle hat einen Text-Primary-Key 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 ein Sync einen gelöschten Quell-Datensatz erkennt, entfernt er die entsprechenden Reporting-Zeilen. Aktuelle Tabellendefinitionen enthalten deleted_at nicht. Ältere Datenbanken können diese Spalte beibehalten, da Schema-Updates alte Spalten nicht entfernen. Der aktuelle Sync pflegt sie nicht; verwenden Sie sie nicht als aktuellen Löschindikator. Archivierte Datensätze unterscheiden sich von gelöschten Datensätzen. Beispielsweise identifiziert issue.archived_at archivierte Issues.
  • Sync timestamps. Jede Tabelle hat first_synced_at und last_synced_at. Diese protokollieren den ersten und den zuletzt schreibenden Sync für die Zeile, nicht die Erstellung 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 Session-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, die in der Form variieren (wie parameters oder eine Instruction-answer) werden als jsonb gespeichert, die 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 angehängt. 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.