← 开源
spiculedata

saiku

Open-source semantic layer: one cube for Excel (MDX/XMLA), dashboards, and AI agents (MCP). Mondrian + Apache Calcite.

ApplicationsSpecialistsJava
在 GitHub 打开
增长势头
+124 小时新增 Star+0.1%
1.33k
Star
658
Fork
+2
本周
52
贡献者
创建于 2011-10-05 · 更新于 2026-10-16 · 今日第 5626 名
主要开发者

spiculedata/saiku 排名第 5,626,有 1,331 个星标。

同类别比较

spiculedata/saiku 排名第 5,626,此处有 8 个同类条目;SSShooter/ebook-to-mindmap 排名第 5,623。

同类别比较
名称排名指标
nianhua99/PandoraHelper5,612
语言:
TypeScript
星标数:
1,354
分叉数:
177
简介:
使用 PandoraHelper 轻松和你的小伙伴共享 ChatGPT Plus/Claude Pro 服务!
specstoryai/getspecstory5,613
语言:
Go
星标数:
1,354
分叉数:
91
简介:
Install our local first extensions for your favorite AI IDE or Terminal Agent. Process your histories into reusable skills with Lore. Sync your conversations to the cloud. File issues and requests.
ttop32/MouseTooltipTranslator5,617
语言:
JavaScript
星标数:
1,351
分叉数:
185
简介:
Mouseover Translate Any Language At Once - Chrome Extension: PDF Translator, EBOOK, EPUB, OCR, TTS, NETFLIX, YOUTUBE DUAL SUBTITLES, GOOGLE DOCS, AI, VIEWER, GMAIL, WRITING, IMAGE, DUAL SUBS, MANGA, HOVER, DICTIONARY, WEBTOON, EDGE, JAPANESE, ENGLISH
SSShooter/ebook-to-mindmap5,623
语言:
TypeScript
星标数:
1,333
分叉数:
157
简介:
AI-powered Summaries by Extracting Content from EPUB and PDF. epub、pdf 拆书 AI 总结
Henry-23/VideoChat5,635
语言:
Python
星标数:
1,322
分叉数:
173
简介:
实时交互数字人,可自定义形象与音色,支持音色克隆,对话延迟低至3s。Real-time voice interactive digital human, customizable appearance and voice, supporting voice cloning, with initial package delay as low as 3s.
hhyqhh/inno-agent5,650
语言:
TypeScript
星标数:
1,299
分叉数:
231
chonyy/AI-basketball-analysis5,651
语言:
Python
星标数:
1,298
分叉数:
236
简介:
:basketball::robot::basketball: AI web app and API to analyze basketball shots and shooting pose.
blakeblackshear/frigate-hass-integration5,667
语言:
Python
星标数:
1,279
分叉数:
198
简介:
Frigate integration for Home Assistant
关键参数与规格
关键参数与规格
参数值
语言Java
类别Applications
子类别Specialists
关键词Data analysis, Databases, MCP, Structured outputs
星标数1,331
分叉数658
贡献者52
创建日期2011-10-05
更新日期2026-10-16
1 天星标数1
7 天星标数2
排名5,626
上次排名5,778
排名变化152
7 天星标排名8,112
上次 7 天星标排名9,996
7 天星标排名变化1,884
总星标排名8,915
上次总星标排名8,902
总星标排名变化-13
README 摘录

bi · Live demo · Issues · Discussions *** Try it in 30 seconds Then open and log in with / . **For a real deployment**, drop and set an admin password: . Saiku **refuses to start** on the default / once it's network-reachable, so one of those two is required. A hosted instance is always live at (auto-reset nightly). What is Saiku Saiku started in 2010 as an open-source OLAP browser for Mondrian. In 2026 it was rebuilt as a modern Semantic Layer on

top of: **Mondrian 4. Calcite is the default; force legacy with . **Apache Arrow** wire format for cellsets, so the browser and any programmatic consumer share a zero-copy result envelope. **SvelteKit 5 + Vite** for the SPA (separate repo, served from inside the same JAR at ). Hierarchies, levels, measures and synonyms are discoverable via and , and a single translates a JSON description of a question into validated MDX, runs it, and returns typed cells. Every validation failure carries a envelope so

an agent can self-correct without scraping logs. Anomaly and forecast endpoints ( , ) share the same typed envelope. The container also bundles ** **, a stdio Model Context Protocol wrapper so Claude Desktop / Cursor / Cline can wire to a running Saiku with one line of config: See and for the typed contract and the annotation namespace cubes use to describe themselves to agents. Invoke one explicitly by prefixing an ask with , or ask naturally and let the LLM route via the skill catalogue

. enforces the persona server-side, so a cube outside the allowlist is a 403 the user can't override. See the for the full walkthrough, and to embed a dashboard in your own app via the web component. Setting activates auto-instrumentation for Jetty, Jersey, JDBC (every Mondrian-emitted SQL becomes a child span), outbound HTTP, JVM metrics, and DBCP2 connection pool metrics. Trace context is injected into the Saiku log pattern automatically. Without the endpoint env var the agent is

never loaded. See for the full env-var reference, sampling guidance, and what's not yet covered (Tier 2 custom spans for etc. **Set up GitHub Packages auth first, or the build fails before it compiles. ** Saiku's Mondrian fork, olap4j, saiku-query and Ossie artifacts are published to GitHub Packages, which requires an authenticated token **even though the packages are public**. Without it you get a bare on that never mentions tokens: 1. Create a **classic** personal access token with only

the scope (Tokens (classic)). Our packages are public, so no scope or org membership is needed. Copy the block from ; one token covers all five. A classic token's scopes are editable in place, and the value doesn't change, so needs no edit. Whole-API integration tests (boots Jetty + the launcher's WAR in-process against the seeded FoodMart H2 datasource): See for the full layout, the dependency catalog ( ), and the GitHub Packages auth gotcha for local builds. Repository layout The SvelteKit

SPA lives in and is built independently; the launcher serves the static under . Getting help **Bugs and feature requests**: open

常见问题

记录了多少星标和分叉?

spiculedata/saiku 有 1,331 个星标和 658 个分叉。

仓库排名是多少?

spiculedata/saiku 排名第 5,626。

记录的语言和类别是什么?

spiculedata/saiku 有 1,331 个星标,语言为 Java,类别为 Applications。

哪个仓库排名最接近?

spiculedata/saiku 与 SSShooter/ebook-to-mindmap 比较,后者排名第 5,623,有 1,333 个星标。

README

Saiku Analytics

Open-source Semantic Layer analytics for cubes — drag-and-drop in the browser, SQL through Mondrian + Calcite, and a typed REST surface so AI agents can query without ever seeing MDX.

saiku.bi · Live demo · Issues · Discussions


Try it in 30 seconds

docker run -d -p 8080:8080 --name saiku -e SAIKU_DEMO=true ghcr.io/spiculedata/saiku

Then open and log in with admin / admin. Demo mode ships a self-contained H2 + FoodMart cube — drag fields onto rows, columns, or filters and the SPA writes MDX for you.

For a real deployment, drop SAIKU_DEMO=true and set an admin password: -e SAIKU_ADMIN_PASSWORD='a-strong-password'. Saiku refuses to start on the default admin/admin once it's network-reachable, so one of those two is required.

A hosted instance is always live at (auto-reset nightly).

What is Saiku

Saiku started in 2010 as an open-source OLAP browser for Mondrian. In 2026 it was rebuilt as a modern Semantic Layer on top of:

  • Mondrian 4.8.1.x (Spicule fork) — with a Calcite-based SQL planner alongside the legacy SqlQuery builder. Calcite is the default; force legacy with -Dmondrian.backend=legacy. The Calcite planner reaches modern engines too — see examples/lakehouse-demo for a Saiku → Mondrian → Calcite → Trino → Iceberg walkthrough.
  • Apache Arrow wire format for cellsets, so the browser and any programmatic consumer share a zero-copy result envelope.
  • Jetty 12 EE10 + Jersey 3.1 + Spring 6 + Spring Security 6.5 in a single-JAR Picocli launcher.
  • SvelteKit 5 + Vite for the SPA (separate repo, served from inside the same JAR at /ui/).

AI Query API + MCP

Saiku 4.x exposes a typed REST surface — /rest/saiku/api/ai/* — designed for LLM agents. Hierarchies, levels, measures and synonyms are discoverable via /ai/cubes and /ai/schema, and a single POST /ai/query translates a JSON description of a question into validated MDX, runs it, and returns typed {value, formatted, unit} cells. Every validation failure carries a {status, field, available} envelope so an agent can self-correct without scraping logs.

The same self-describing, self-correcting contract has a SQL-side twin at /rest/saiku/api/ai/ossie/* for datasets modelled with the Ossie semantic layer — same list → schema → query shape, same VALIDATION_ERROR envelope, plus POST /ai/ossie/ask for a plain-language question. Anomaly and forecast endpoints (/ai/anomaly, /ai/forecast) share the same typed envelope.

The container also bundles saiku-mcp, a stdio Model Context Protocol wrapper so Claude Desktop / Cursor / Cline can wire to a running Saiku with one line of config:

{
  "command": "docker",
  "args":    ["exec", "-i", "saiku", "saiku-mcp"]
}

See docs/AI-QUERY-API.md and docs/schema-annotations.md for the typed contract and the saiku.semantic.* annotation namespace cubes use to describe themselves to agents.

Agent Skills & Spaces

Admins can extend the AI surface without code:

  • Skills (saiku-home/skills/*.md) — markdown workflows with YAML frontmatter, discoverable from /ai/ask. Invoke one explicitly by prefixing an ask with /, or ask naturally and let the LLM route via the skill catalogue.
  • Spaces (saiku-home/agent-spaces/*.json) — named personas that scope an ask to a system prompt, a cube allowlist and a skill allowlist. POST /ai/spaces/{id}/ask enforces the persona server-side, so a cube outside the allowlist is a 403 the user can't override.

See docs/SKILLS-SPEC.md and docs/AGENT-SPACES-SPEC.md.

Dashboards

Build shareable dashboards of chart / table / KPI / text / image tiles over your cubes — with cross-tile filters, click- and brush-cross-filtering, drill-down/through, conditional formatting, combo charts, anomaly/forecast overlays, auto-refresh, PDF/PNG export and read-only share links. See the docs/dashboards-user-guide.md for the full walkthrough, and saiku-ui/src/embed/README.md to embed a dashboard in your own app via the `` web component.

Observability

Saiku ships opt-in OpenTelemetry instrumentation via the OTel Java agent — zero code changes, zero overhead when off. Setting OTEL_EXPORTER_OTLP_ENDPOINT activates auto-instrumentation for Jetty, Jersey, JDBC (every Mondrian-emitted SQL becomes a child span), outbound HTTP, JVM metrics, and DBCP2 connection pool metrics. Trace context is injected into the Saiku log pattern automatically.

docker run -d -p 8080:8080 \
  -e OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4318 \
  -e OTEL_SERVICE_NAME=saiku-prod \
  ghcr.io/spiculedata/saiku:latest

Without the endpoint env var the agent is never loaded. See docs/observability.md for the full env-var reference, sampling guidance, and what's not yet covered (Tier 2 custom spans for ThinQueryService etc.).

Build from source

JDK 21 + Maven 3.9+ required.

Set up GitHub Packages auth first, or the build fails before it compiles. Saiku's Mondrian fork, olap4j, saiku-query and Ossie artifacts are published to GitHub Packages, which requires an authenticated token even though the packages are public. Without it you get a bare 401 Unauthorized on pentaho:mondrian that never mentions tokens:

  1. Create a classic personal access token with only the read:packages scope (Tokens (classic)). It must be classic — GitHub's Maven registry does not accept fine-grained tokens, and the UI defaults to fine-grained. Our packages are public, so no repo scope or org membership is needed.
  2. Add five `` entries to ~/.m2/settings.xml — github-mondrian-saiku, github-olap4j, github-olap4j-xmlaserver, github-saiku-query, github-ossie. Copy the block from .github/workflows/ci.yml; one token covers all five.

Still getting a 401? A fine-grained token and a classic token missing read:packages produce an identical error, so check what the token actually has before minting another — curl -sI -H "Authorization: token $PAT" https://api.github.com/user | grep -i x-oauth-scopes. A classic token's scopes are editable in place, and the value doesn't change, so settings.xml needs no edit.

# Compile, unit tests, Spotless format check (CI gate):
mvn verify

# Build the runnable fat-JAR:
mvn -pl saiku-launcher -am -Dmaven.test.skip=true package

# Run:
java -jar saiku-launcher/target/saiku-*.jar serve --port 8080 --home ./saiku-home

Whole-API integration tests (boots Jetty + the launcher's WAR in-process against the seeded FoodMart H2 datasource):

mvn verify -P integration

See CLAUDE.md for the full layout, the dependency catalog (saiku-bom), and the GitHub Packages auth gotcha for local builds.

Repository layout

saiku-bom/             # central dependency-version catalogue
saiku-core/
  saiku-olap-util/     # olap4j helpers
  saiku-service/       # Semantic Layer service, AI Query, schema gen, async, cache
  saiku-semantic/      # YAML semantic layer
  saiku-web/           # JAX-RS REST resources
saiku-webapp/          # Servlet webapp (Spring XML wiring)
saiku-launcher/        # Picocli CLI + embedded Jetty serving the WAR
saiku-mcp/             # stdio JSON-RPC MCP wrapper
saiku-ui/              # SvelteKit SPA (independent versioning)

The SvelteKit SPA lives in saiku-ui/ and is built independently; the launcher serves the static dist/ under /ui/.

Getting help

The old groups.google.com/a/saiku.meteorite.bi lists and ##saiku IRC channel are no longer monitored.

Contributing

See CONTRIBUTING.md. Short version:

  • feature/ branch off development — see the Gitflow note in CLAUDE.md.
  • Run mvn spotless:apply before committing (a pre-commit hook is available via ./scripts/install-hooks.sh).
  • Tests live in **/src/test/java/; integration tests in saiku-launcher/src/test/java/org/saiku/launcher/it/.
  • Open the PR against development, not main. main is the release branch — only release/* and hotfix/* PRs go there.

License

Saiku is dual-licensed under Apache 2.0 and EPL 1.0. See LICENSE. A summary lives at .

History

The original Saiku project was started by Tom Barber and Paul Stoellberger in 2010 at Meteorite BI and now lives at Spicule. Contributors are listed on the GitHub contributors page.

For release notes see Releases.

⬆ back to top

排名相邻
同类项目