Übersicht
Live-Auswertungen aus Datenquellen — Charts und KPI-Kacheln, im Browser oder per Token-Link.
Dashboards sind Live-Auswertungen deiner Daten. Sie ziehen Werte aus einer Quelle (z. B. einem Google Sheet, einer DB-Query, einer API), formen sie in Charts oder KPI-Kacheln und zeigen sie im Browser an. Du brauchst keinen BI-Stack dafür — eine PHP-Config-Datei reicht.
Anwendungsfälle
- Tagesaktueller KPI-Stand an einer Wand-Anzeige im Lager: „Verpackt heute, Bestellungen offen, Lieferbar"
- Verkaufsverlauf im Vergleich Vorjahr / Vormonat
- System-Status-Dashboard mit Service-Verfügbarkeit, Cron-Status, Response-Zeiten
- Reporting für Stakeholder ohne TaskMonkey-Login (per Token-Link)
- Kunden-Cockpit mit ihren eigenen Live-Daten
Wo Dashboards leben
In deinem Workspace dashboards.php:
<?php
return [
'dashboards' => [
'product_sales' => [ /* … Konfig … */ ],
'kpi' => [ /* … Konfig … */ ],
'monitoring' => [ /* … Konfig … */ ],
],
];
Jeder Schlüssel ist der Slug des Dashboards — er steckt in der URL.
Aufrufen
| Wer | URL |
|---|---|
| Eingeloggte Mitarbeiter | /dashboards/view/<slug> |
| Externe Anzeige (Token) | /dashboards/view/<slug>?token=<token>&tenant=<workspace> |
Eine Übersicht aller Dashboards des Workspace gibt's unter /dashboards.
Drei Dashboard-Typen
KPI-Dashboard
Eine Wand voller Kennzahl-Kacheln — heutiger Wert, Vergleich zu gestern/letzter Woche, Trend-Indikator. Gut für „auf einen Blick"-Anzeigen.
Siehe KPI-Dashboards.
Chart-Dashboard
Mehrere Liniendiagramme, Balken oder Zeitreihen — ideal für Vergleiche und Trends.
Siehe Chart-Dashboards.
Table-Dashboard
Eine sortier- und durchsuchbare Tabelle (type => 'table') — gedacht für Listen, deren Berechnung zu teuer ist, um sie bei jedem Seitenaufruf live zu holen (z. B. ein Lager-Dashboard mit Reichweiten-Berechnung über alle SKUs). Ein Scheduled Task berechnet die Zeilen periodisch und legt sie per $ctx['cache']->set(...) im Tool-Cache des Workspace ab; das Dashboard liest nur noch diesen Cache. Datenquelle ist deshalb tool_cache statt google_sheet:
'datasource' => [
'type' => 'tool_cache',
'tool' => 'computeStockDashboard', // Name des Tools, das den Cache schreibt
'key' => 'data', // Cache-Key innerhalb des Tools (Default: 'data')
],
Das Tool schreibt mit $ctx['cache']->set('data', $payload, $ttlSeconds), wobei $payload die Form ['rows' => [...], 'generated_at' => '<ISO-Datum>', 'count' => <int>] hat. Jede Zeile in rows ist ein assoziatives Array mit den Feldern, die columns referenziert, optional plus level ('red' | 'orange' | 'neutral') für eine farbige Hervorhebung der ganzen Zeile (z. B. kritischer Bestand).
'lager' => [
'title' => 'Lager-Dashboard',
'type' => 'table',
'access' => 'login',
'datasource' => [
'type' => 'tool_cache',
'tool' => 'computeStockDashboard',
'key' => 'data',
],
'columns' => [
['key' => 'sku', 'label' => 'SKU'],
['key' => 'title', 'label' => 'Artikel'],
['key' => 'stock', 'label' => 'Bestand'],
['key' => 'reach_days', 'label' => 'Reichweite (Tage)'],
],
'default_sort' => 'urgency', // Key aus sort_options
'sort_options' => [
'urgency' => 'Dringlichkeit (Reichweite)',
'stock' => 'Bestand',
'sku' => 'SKU',
],
'low_stock_threshold' => 5, // Schwelle fuer den "Nur Bestand <= X"-Filter
],
Spalten mit Key sku, title oder category werden linksbündig als Text gerendert, alle anderen rechtsbündig/numerisch (reach_days bekommt zusätzlich die Hervorhebungs-Klasse der Zeile). Suche (Client-seitig über sku/title/category) und Sortierung laufen im Browser über die bereits geladenen Zeilen — kein erneuter Request pro Interaktion.
Datenquellen
Primär kommt google_sheet zum Einsatz. Du gibst Slug + Sheet-Name an, die Plattform liest mit der hinterlegten OAuth-Connection:
'datasource' => [
'type' => 'google_sheet',
'slug' => 'sales-forecast',
'sheetName' => 'Tabellenblatt1',
'cache_ttl' => 900, // 15 Minuten zwischenspeichern (KPI-Refresh-Intervall)
'row' => 'last', // optional: nur die letzte Zeile (für KPI)
],
Wenn ein Chart Daten aus mehreren Sheets desselben Spreadsheets braucht (z.B. Schicht-Parameter + stündliche Ist-Werte), gibt es google_sheet_multi:
'datasource' => [
'type' => 'google_sheet_multi',
'slug' => 'kpi',
'sheets' => [
'forecast' => ['sheetName' => 'Versand-Forecast', 'cache_ttl' => 3600],
'actuals' => ['sheetName' => 'Tabellenblatt1', 'row' => 'last', 'cache_ttl' => 60],
],
],
Der slug referenziert ein konfiguriertes Google Sheet im Workspace. Anbindung läuft über deine OAuth-Verbindung.
Für Table-Dashboards (s.u.) gibt es zusätzlich tool_cache: die Daten kommen nicht live von Google, sondern aus dem Tool-Cache eines Scheduled Tasks.
Wenn du andere Quellen brauchst (Supabase, eigene API, DB-Gateway), sprich mit dem Betreiber — der Datasource-Mechanismus ist erweiterbar.
Zugriffskontrolle
'kpi' => [
'title' => 'KPI Dashboard',
'type' => 'kpi',
'access' => 'token', // login | token
'token' => '33fc8db8f7c4a49ba882f70b43e5e0e3d…',
// …
],
access |
Wer darf rein |
|---|---|
login (default) |
Nur eingeloggte Workspace-Mitglieder |
token |
Jeder mit dem korrekten token-Parameter in der URL |
Token-Dashboards sind ideal für Wand-Displays oder externe Stakeholder, die keinen Account brauchen sollen. Generiere lange, zufällige Tokens (32+ Hex-Chars) — sie funktionieren wie Passwörter und sind im URL eingebettet.
Daten-Refresh
Browser-seitig: KPI-Dashboards pollen im cache_ttl-Sekunden-Takt automatisch. Chart-Dashboards refreshen alle 15 Minuten. Du musst nicht manuell aktualisieren.
Server-seitig wird der Sheet-Inhalt im Cache gehalten und erst nach Ablauf der TTL neu von Google geholt. Gut für Quota-Schonung bei vielen gleichzeitigen Viewern.
PWA: als App installieren
Jedes Dashboard liefert ein eigenes PWA-Manifest (/dashboards/manifest/<slug>) mit start_url zurück zum Dashboard. Damit kann jedes Dashboard separat in Chrome/Safari als App installiert werden — eigenes Icon, eigener Name (= Dashboard-Title). Mehr in KPI-Dashboards.
Beispiel: Vollständige Mini-Konfig
<?php
return [
'dashboards' => [
'sales_today' => [
'title' => 'Tagesumsatz',
'description' => 'Live-Stand aus dem Shop',
'type' => 'kpi',
'access' => 'login',
'datasource' => [
'type' => 'google_sheet',
'slug' => 'live-kpi',
'sheetName' => 'Tabellenblatt1',
'cache_ttl' => 60,
'row' => 'last',
],
'tiles' => [
[
'title' => 'Umsatz heute',
'column' => 'Umsatz heute',
'compare_column' => 'Umsatz gestern',
'format' => 'currency',
'size' => 'large',
'span' => 3,
'compare_label' => 'vs. gestern',
'compare_mode' => 'higher_is_better',
],
[
'title' => 'Bestellungen heute',
'column' => 'Bestellungen heute',
'format' => 'number',
'size' => 'medium',
],
],
],
],
];
Aufrufen unter /dashboards/view/sales_today.
Weiter
- KPI-Dashboards — Tile-Optionen, Vergleichswerte, Forecast, Gruppen
- Chart-Dashboards — Series, Transformationen, Achsen-Typen