Open-Source-Projekt
spiculedata/saiku avatar
spiculedata/saiku

saiku-embed: eine Webkomponente für Saiku-Abfragen, Dashboards und KI-Anfragen

Dieses Projekt rundet „Open-source semantic layer: one cube for Excel (MDX/XMLA), dashboards, and AI agents (MCP). Mondrian + Apache Calcite.“ zu einer praxistauglichen Open-Source-Lösung zusammen, mit wiederverwendbarer Tooling- und Integrationsunterstützung für reale Anwendungsfälle.

1.322 Sterne655 ForksJavaApache-2.0

Auf einen Blick

Was ist das?
Ein benutzerdefiniertes Element, das gespeicherte Saiku-Abfragen, Dashboards und KI-Anfragefelder auf jeder Seite rendert, mit serverseitig begrenzten Tokens und Fail-Closed-Sicherheit.
Für wen ist es gedacht?
Die README definiert eine enge Komponente: ein benutzerdefiniertes Element, das gespeicherte Abfragen, Dashboards, Apps und KI-Anfragen über tokenbegrenzte Server-Endpunkte rendert. Es beschreibt nicht die breitere Saiku-Plattform über die Einbettungsoberfläche hinaus und listet bekannte Einschränkungen auf, anstatt unverifizierte Fähigkeiten zu versprechen.
Darf ich es kommerziell nutzen?
Ja. Apache-2.0 ist eine freizügige Lizenz: Sie dürfen darauf aufbauende Software nutzen, verändern und verkaufen, solange Sie die Urheberrechts- und Lizenzhinweise beibehalten.
Wird es noch gepflegt?
Ja. Die letzten Commits kamen vor 3 Tagen.
In welcher Sprache ist es geschrieben?
Hauptsächlich Java, laut der Sprachstatistik von GitHub.

Die Antworten beruhen auf den GitHub-Daten des Projekts (zuletzt abgeglichen am 14. September 2026) und auf unserer Analyse. Sie sind keine Rechtsberatung.

TIEFGEHENDE OPEN-SOURCE-ANALYSE

Was das saiku-embed-Tag ist

Die README dieses Repositorys konzentriert sich auf `<saiku-embed>`, ein Custom Element, das eine gespeicherte Saiku-Abfrage oder ein Dashboard auf jeder Seite rendert. Da es sich um eine Standard-Webkomponente handelt, funktioniert dasselbe Tag in React, Vue, Svelte und Vanilla-HTML, und die Hostseite muss nichts über Saiku-Interna wissen. Die Komponente kommuniziert im Hintergrund mit dem Saiku-Server, verwendet Attribute, um auf die Ressource zu verweisen, und ein Token zur Autorisierung.

Installation und globale Registrierung

Zwei Installationspfade sind dokumentiert. Für eine einfache Seite fügen Sie ein Skript-Tag hinzu, das auf `/ui/saiku-embed.js` auf Ihrem Saiku-Launcher-Ursprung verweist. Für bundlerbasierte Projekte installieren Sie `@concepttocloud/saiku-embed` von npm und importieren es einmal; der Import registriert das `saiku-embed`-Tag als Nebeneffekt global, sodass keine weitere Einrichtung erforderlich ist. Die README zeigt das Skript-Tag und den npm-Import und weist darauf hin, dass der Import den Nebeneffekt hat, das Tag zu registrieren.

Rendern einer gespeicherten Abfrage als Tabelle, Matrix, Diagramm oder KPI

Der Standard-`kind="query"` unterstützt vier Rendermodi über das `render`-Attribut. `table` flacht Ergebnisse zu einer Zeilenschlüsselzuordnung ab. `matrix` (v3.19) bewahrt die Zeilen- und Spaltenachsenstruktur und platziert Measures auf Spalten und Dimensionsmitglieder auf Zeilen. `chart` verwendet ein `mode`-Attribut für `bar`, `line` oder `pie`. `kpi` (v3.20) zeigt eine einzelne große Zahl aus dem letzten Measure der gespeicherten Abfrage und zeigt ein Delta-Element, wenn eine vorherige Measure-Spalte vorhanden ist. Das `height`-Attribut steuert die CSS-Höhe der gerenderten Oberfläche.

Schneiden einer Abfrage zur Einbettungszeit mit filter

Das `filter`-Attribut (v3.20) akzeptiert ein JSON-Array von Slicer-Überschreibungen. Diese nutzen denselben validierten Slicer-Pfad wie Dashboard-Filterkacheln, sodass die Cube-Bindung und die Achsen der gespeicherten Abfrage unberührt bleiben. Die README zeigt ein Beispiel, das die `Year`-Ebene der `Time`-Dimension auf `[Time].[2024]` festlegt, sodass ein Host eine Einbettung parametrisieren kann, ohne die Abfrage neu zu erstellen.

KI-Anfragen und personenbezogene Antworten

Für `kind="ai"` (v3.19) präsentiert die Einbettung ein Klartext-Anfragefeld über einem Cube. Der `path` ist eine Cube-Referenz in der Form `connection/catalog/schema/cubeName`, und das Token muss ein KI-Token sein. Im Hintergrund sendet die Komponente einen POST an `/rest/saiku/api/embed/ai/{cubeId}/ask`, der die Frage über den konfigurierten LLM-Anbieter des Servers im Datenbereich des festgelegten Eigentümers ausführt. Ein `space`-Attribut (v3.20) begrenzt die Anfrage auf eine vom Administrator erstellte Agent-Space-Persona und wendet Systemprompt, Fähigkeitsfilter und Cube-Zulassungsliste serverseitig an. Wenn die Zulassungsliste den festgelegten Cube ausschließt, schlägt die Anfrage fehl.

Dashboards und App-Builder-Apps als Einzel-Token-Einbettungen

Zwei weitere Typen decken größere Dokumente ab. `kind="dashboard"` rendert ein gespeichertes `.saikudash`-Dashboard. `kind="app"` (v3.20) bettet ein gesamtes App-Builder-Dokument (`.saikuapp`) als eine tokenbegrenzte Einheit ein: Das Token gewährt genau diese eine App, und alle Seiten nutzen dieselbe Berechtigung. Das App-Dokument wird serverseitig abgerufen, und jede Seitenkachelabfrage ist identisch mit einer Dashboard-Kachelabfrage, sodass Zeilensicherheit und PII-Redaktion auf dieselbe Weise durchgesetzt werden. Autoren-CSS ist in Phase 1 nur für Designer; die Einbettungsoberfläche wird über die vorhandenen `--saiku-embed-*`-Variablen gestaltet.

Serverseitige Token-Erstellung, öffentliche Berechtigungen und Widerruf

Tokens werden von einem authentifizierten Benutzer mit GRANT auf die Ressource über `POST /rest/saiku/api/embed/tokens` erstellt. Der Anfragetext spezifiziert `resourceKind` (query, dashboard, ai oder app), `resourcePath`, `ttlHours` und ein Label. KI-Tokens sind in v1 nur für Administratoren. Tokens können mit `DELETE` auf demselben Endpunkt widerrufen werden. Öffentliche Berechtigungen, die das Lesen ohne Token ermöglichen, werden mit `POST /rest/saiku/api/embed/public` erstellt; öffentliche Lesevorgänge laufen weiterhin im Datenbereich des Berechtigenden.

Styling, Sicherheitsmodell und Einschränkungen

Die Komponente verwendet eine offene Shadow-Root, sodass Host-CSS und Einbettungsstile isoliert sind. Ein `theme`-Attribut wechselt zwischen `light`, `dark` und `auto`, oder einzelne Farben können über CSS-Custom-Properties auf der Hostseite festgelegt werden. Diagrammserien und Achsen können mit `--saiku-embed-chart-1` bis `-8` gebrandet werden. Das Sicherheitsmodell ist detailliert dokumentiert: Das Token wird nur als `X-Saiku-Embed-Token`-Header übertragen, ist serverautoritativ mit undurchsichtigen 256-Bit-IDs und auf genau eine Ressource begrenzt. Zeilensicherheitsfilter werden zuletzt angewendet und schlagen fehl, und PII-Redaktionsrichtlinien geben weiterhin Gateway-Header aus. Die Einbettung sendet `credentials: "omit"`, sodass das Saiku-Sitzungscookie der Hostseite nie mit Einbettungslesevorgängen fließt. Das Bundle ist etwa 213 KB gzipped (Svelte-5-Custom-Element-Laufzeit plus ein baumgeschüttelter ECharts-Kern). Bekannte Einschränkungen umfassen nur Record-Format-Rendering, übersprungene Dashboard-Filterkacheln, Markdown in Textkacheln als Klartext und KI-Abfrageergebnisse, die noch nicht als Einbettungsquelle verdrahtet sind.

Für spiculedata/saiku nennt das Material außerdem die Sprache Java und die Lizenz Apache-2.0. Diese Angaben ordnen das Repository ein, ersetzen aber keine Prüfung der konkreten Dateien. Die README beschreibt Open-source semantic layer: one cube for Excel (MDX/XMLA), dashboards, and AI agents (MCP). Mondrian + Apache Calcite. Das ist eine belastbare Aussage über den vorgesehenen Zweck, jedoch kein Nachweis für jede Umgebung oder jede Eingabe. Die Metadaten nennen 1318 Sterne, 655 Forks und 55 offene Issues. Solche Werte zeigen öffentliche Aktivität und Interesse, sagen aber wenig über die Passung zu einem bestimmten Arbeitsablauf. Für die Nutzung sollten die Dokumentation, die Verzeichnisstruktur und die tatsächlichen Befehle zusammen gelesen werden. Besonders relevant ist, ob der dokumentierte Einstieg dieselben Voraussetzungen erfüllt wie die Zielumgebung. Bei saiku gehört dazu auch die Frage, welche Version verwendet wird, welche Dateien verändert werden und welches Ergebnis am Ende vorliegt. Bleibt ein Detail im README offen, wird es als offene Annahme behandelt. Eine belastbare Entscheidung stützt sich damit auf die konkrete Funktion von saiku, auf seine deklarierte Laufzeit und auf die beobachtete Ausgabe, nicht auf allgemeine Erwartungen an Open-Source-Software.

Redaktionelles Fazit

Die README definiert eine enge Komponente: ein benutzerdefiniertes Element, das gespeicherte Abfragen, Dashboards, Apps und KI-Anfragen über tokenbegrenzte Server-Endpunkte rendert. Es beschreibt nicht die breitere Saiku-Plattform über die Einbettungsoberfläche hinaus und listet bekannte Einschränkungen auf, anstatt unverifizierte Fähigkeiten zu versprechen.

Offizielle Quellen

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
Community-Notizen

Community-Notizen