Version History¶
Stay up to date with the latest releases by following us on Telegram or X.
Version 2.1.2 — 2026-09-11¶
Two-stage SQL form — a new shape of the generated SQL, enabled with
SQL_FORM"two_stage": the fact table is filtered and aggregated on its own first, dimension names are joined to the small aggregated result afterwards. The database reads the fact table once without joins, and its own pre-aggregates (ClickHouse projections, StarRocks materialized views built by fact keys) can answer the query; on a one-billion-row ClickHouse table typical PivotTable queries went from seconds to well under a second. Results are identical to the legacy form. Measures that cannot be re-aggregated (avg, distinct counts) and measure groups that cannot be split fall back to the legacy form per query, automatically. Default stayslegacy. See Two-stage SQL form (pre-aggregation friendly).
Version 2.1.1 — 2026-09-01¶
Signed desktop distribution —
XLTable-<version>-setup.exeandXLTable.execarry a code signing signature of BR Systems LLP (RFC 3161 timestamp), so Windows names the publisher instead of “Unknown publisher” and antivirus products can trust the files by signer. SmartScreen may still warn on the first runs of a fresh release while it builds up download reputation — the dialog now shows the publisher; see the note in Windows 10 / 11.Single sign-on with Active Directory on Linux — Kerberos is terminated by an authenticating front (Apache
mod_auth_gssapior a Kerberos-capable load balancer) that passes the user name to XLTable; Excel on a domain-joined workstation connects without a password prompt, exactly like the Windows Server (IIS) deployment. Enabled by the newTRUSTED_PROXYkey; the reference Apache configuration and the AD-side steps (service account,setspn,ktpass) are in Single sign-on on Linux: an authenticating front. XLTable never sees domain credentials in this deployment.OAuth 2.1 for MCP clients — the server edition is now its own authorization server: an AI application signs the user in through the browser (single sign-on behind IIS or the Apache front, otherwise the XLTable sign-in page), gets a Bearer token and refreshes it silently — no stored passwords. Standard MCP authorization: resource and server metadata, dynamic client registration, PKCE, refresh rotation, revocation; tokens are bound to the server and stored as hashes. Access rights and cube roles stay the user’s own; the new MCP access admin page lists and revokes tokens. Basic and packed-Bearer credentials keep working. See OAuth 2.1 for MCP clients and
OAUTH. The pilot flagallow_insecure_httpalso lets an application on a plain-HTTP address (LibreChat in a LAN) register its callback.MCP: sample values for large dimension levels —
describe_cubeno longer skips levels with many distinct values: it returns the first values and marks the level insample_values_truncated; the threshold is the newMCPsample_values_maxsetting (default 30).The server address in a browser now shows a short page — what this endpoint is, how Excel and AI assistants connect, links to the admin console and the documentation — instead of an empty XML response behind a password prompt. The server also serves a favicon and advertises its logo to MCP clients.
Ubuntu installer on Apache —
install_xltable.shnow sets up an Apache front (TLS on 443, load balancing across the worker processes) instead of nginx, with modes:--auth ad(single sign-on: keytab,mod_auth_gssapi,TRUSTED_PROXYand the newBIND_HOSTwritten automatically),--front none(your own load balancer),--front-only(change the timeout, certificate or mode without reinstalling). Existing installations keep their nginx front throughupdate_xltable.sh;--migrate-from-nginxmoves them to Apache with a backup and--rollbackreturns. See Linux.Domain login and password over HTTP Basic — with
CREDENTIAL_ACTIVE_DIRECTORYconfigured, a user missing fromUSERSis verified against the domain controller (LDAP bind, LDAPS with certificate validation whenuse_sslis set) and authorized by AD group membership; repeated failures are throttled so a wrong password cannot lock the domain account. Group membership is resolved through nested groups (nested_groups). A name listed inUSERSis always checked locally and never forwarded to AD.Sessions are random tokens with a lifetime — a user name is never accepted as a session id, and a session expires after
AUTH_CACHE_TIMEOUT, after which the client re-authenticates transparently. After upgrading, open Excel workbooks re-authenticate on their next request without a prompt.HTTPS is required for Active Directory sign-in on Linux (
REQUIRE_HTTPS, on by default when AD is configured), and the admin console rejects cross-site requests. Windows Server (IIS) deployments are unaffected.
Version 2.1.0 — 2026-08-16¶
A clean console window at startup (XLTable Desktop) — the free edition console now opens with a short human header (edition and version, “keep this window open”, the admin console address, the cubes folder) followed by a single summary log line instead of the previous series of startup messages; the Excel connection breadcrumb moved to the admin console for good (Quick start / Connect Excel & AI). The files in the
logfolder still keep the full detailed log, and the server edition startup output is unchanged. See Quick start page and first launch (XLTable Desktop).Excel Slicers are now supported — insert a slicer on any cube field (Insert → Slicer) and filter the Pivot Table by clicking tiles, just like with Analysis Services. Members with no data under the current measures are greyed out, role access filters apply to slicer tiles, and slicers on hierarchy levels work too. See Slicers.
Calculated fields can reference each other — a calculated field expression may use the alias of another calculated field, in any order of declaration:
(turnover * 100) as turnover_pct. References are expanded into the underlying measure expression when the cube is built; circular references are rejected with a clear error, and the syntax check reports them too. See OLAP cube definition — Calculated fields.Role access filters support
not in— a role line<alias> not in ('v1', 'v2')hides the listed values instead of enumerating everything the role is allowed to see. The exclusion is enforced on every SQL query the server builds (pivots, filter member lists, Keep Only / Hide probes, drillthrough, MCP), so the hidden values never appear in results or dropdowns. See OLAP cube definition — User roles, andolap_access_filters.Every build is identifiable — the version in the admin console header and on the status page, the
/admin/pingreply and the first line of the log now carry a build stamp next to the version number:v2.1.0 (2026-08-27 6b9eeb4)is the build date and the source commit. Quote this whole string when contacting Support — it tells exactly which build you are running even when several builds share a version number. Archive and installer names are unchanged.The admin console got a visual overhaul — a calm, dense console look in both editions: full-width layout, compact data tables, a monospaced face for data values and a live status line in the header (cubes, warehouse, serving address, edition and version at a glance). Every page carries a Docs ↗ link to the matching section of this documentation. The cube list refreshes itself while the page is open, a parse error on the Cubes page comes with a plain-words hint, and Save connection checks the connection first. The connection instructions moved to a new Connect Excel & AI page of the Help section — present in both editions.
Named user seats moved to their own Seats page — the seat registry (who occupies the licensed seats, with a per-seat Release button) now lives on the Seats page of the Administration section; the License page keeps the license details and the upload form. See Admin panel.
The Windows desktop distribution is now called XLTable Desktop — the installer wizard, the Apps & Features entry and the Start menu shortcut use the new name. After updating over an existing installation the Start menu shortcut is called XLTable Desktop — the old XLTable shortcut is removed automatically. Nothing else moves: the executable stays
XLTable.exe, the installation folder, the cubes folder and the installer file nameXLTable-<version>-setup.exeare unchanged.The desktop executable is now ``XLTable.exe`` — the Windows desktop binary was renamed from
main.exeand carries proper Windows file properties. If the old path is written anywhere — a shortcut, a scheduled task, a batch file, or the Claude Desktop extension — update it toXLTable.exeafter upgrading. Server installations (Ubuntu, Windows Server/IIS) are not affected.The Windows desktop distribution now ships as an installer —
XLTable-<version>-setup.exeinstalls into your user profile with no administrator rights and no UAC prompt, creates a Start menu shortcut and the cubes folderDocuments\XLTable\cubes. Updates install over the existing copy without touchingsettings.json, the cubes, the cache or the logs; uninstall never deletes the cubes and by default keeps the settings too. Installed files trigger no SmartScreen warning. The portable zip remains available for locked-down environments. See Windows 10 / 11.Smoother first and repeated launch (free edition) — quality-of-life fixes for the desktop server:
the cubes folder is created automatically at startup when missing;
starting
XLTable.exewhen the server is already running opens the admin console in your browser instead of failing with a port error;if the port is taken by another program, the console prints a clear message with the port number and where to change
SERVER_PORT— instead of a traceback;the server finds its
settings.json, logs and cubes regardless of the folder it was started from (shortcuts, Task Scheduler, batch files);a non-writable installation folder or a damaged
settings.jsonis explained in plain words instead of a silent crash;the
.mcpbextension for Claude Desktop ships inside the distribution, so the download button on the Quick start page works out of the box.
Quick start page and automatic browser launch (free edition) — on every interactive start the browser opens the admin console (the new Quick start page until the onboarding is complete, Cubes afterwards): a checklist of four steps (connect the warehouse → create the first cube → connect Excel → connect an AI agent). Every step turns green from real system facts — nothing is ticked manually — live, while the page is open; steps 3 and 4 are independent and open together. The Connect an AI agent step offers a choice of clients — Claude Desktop (recommended, one-click
.mcpb), Copilot in VS Code, Claude Code, a local model in LM Studio, or any other MCP client — each with short steps and a ready-to-copy config. A non-interactive start (service, scheduler) never opens a browser and prints the addresses to the console instead. See Quick start page and first launch (XLTable Desktop) and AI clients.Unified admin console navigation — the admin console switched from a tab strip to a left-side menu of sections (Quick start, Connection, Cubes, Administration, Help). The menu skeleton is the same in both editions; they differ only in which pages exist and in their mode (no Cubes section on the server edition, read-only Warehouse connection there). The open page is addressable via the URL hash (
/admin#cache) and survives a browser reload. See Admin panel.Cubes and Create cube pages in the admin console (free edition) — the new Cubes page lists the cubes folder live, including the parse status of every
.sqlfile — a broken cube shows the exact parser error in the browser instead of surfacing only as a failure in Excel. The new Create cube page is a web wizard over the same engine asXLTable.exe autogen: filter the warehouse tables, pick one, review the proposed classification of every column, name the cube and save — the server picks it up instantly; an existing file is never overwritten silently. See Generating a cube automatically (autogen) and Admin panel.Connection setup in the admin console — the new Connection page. In the free desktop edition it is a full connection editor: pick the warehouse type, fill in the form, press Test connection and save —
settings.jsonnever has to be edited by hand, and the saved connection is applied without a restart. Passwords are write-only — never sent to the browser; an empty password field keeps the stored value. Test connection answers with a clear message (host unreachable / wrong credentials / “found N tables”) instead of a stack trace. In the server edition the page is read-only diagnostics; editing stays insettings.jsonon the server. See Connection setup in the admin console.
Version 2.0.19 — 2026-08-05¶
Fixed: unrelated errors no longer reported as cube syntax problems — when a cube definition carried only warnings (e.g.
--olap_drillthroughreferencing compound-aggregate measures or unknown fields), any unexpected processing error during a query was masked by the “There are syntax problems in the cube definition” message listing those warnings — looking like a random cube error that went away in a new workbook. Now the syntax problem list is shown only when the definition actually contains errors; otherwise the real error message is returned to Excel, and it is always written to the server log with a full traceback for diagnostics.MCP server for AI assistants — XLTable now speaks the Model Context Protocol: an AI assistant can list cubes, inspect dimensions and measures and run aggregated pivot queries through the same live instance, cubes and cache that serve Excel. Claude Desktop connects via a one-click Desktop Extension package (
xltable-<version>.mcpb) that launches the built-in stdio bridgemain.exe --mcp-bridge— no Node.js, no manual JSON editing; other MCP clients can use the bridge or the Streamable HTTP endpoint/mcpdirectly. The assistant works only through cubes — raw SQL access to the warehouse is never exposed. Available in both editions: the free desktop edition connects anonymously on the local machine; in the server edition/mcprequires Basic authentication with a user fromUSERS(same accounts and session cache as the Excel endpoint) and row-level security applies exactly as in Excel. MCP availability is a license feature flag ("mcp": true): a license without the flag disables MCP with a clear error while Excel keeps working; named seats stay counted per user regardless of the interface, so the MCP connection occupies the same seat as the user’s Excel connection (one name = one seat). Cubes can come from the local folder or from theolap_definitioncatalog — with the database source the tools accept an optionaldatabaseargument and alist_databasestool appears. Platforms whose authorization field only accepts Bearer tokens (e.g. Yandex AI Studio) can pass the same credentials asBearer <base64 of user:password>. For administrators the MCP path is as observable as the Excel path: withWRITE_LOGenabled each MCP request leaves request/response, SQL and context dumps inlogand prints the familiarREQUEST/CONTEXT/SQL/RESULTblocks to the console; MCP queries share the SQL result cache and the metadata cache policy with Excel — a slice computed by the assistant opens instantly in Excel and vice versa. See MCP server.Cubes can be created from the chat — with the folder cube source (
CUBE_SOURCE=folder) the MCP server offers two more tools:list_warehouse_tableslists the tables and views of the connected warehouse (names only, filtered by a substring — the chat counterpart of the autogen wizard’s table filter), andautogen_cubegenerates a cube from a single table with the same engine asmain.exe autogen— the wizard, the direct call and the assistant are three fronts over one generator. The new.sqlfile lands in the cube folder and is live immediately: “I have a table sales — make a cube and show me sales by month” works in one chat, no console needed. An existing cube file is never overwritten silently — without an explicitoverwrite=truethe call fails and nothing changes (and MCP clients ask for confirmation before running the tool, since it writes). Open Pivot Tables keep the old cube metadata until refreshed — the assistant reminds the user to press Refresh. See Creating cubes from the chat.The assistant works alongside Excel — because Excel and MCP share one live engine, the assistant sees what the user is looking at: the new
get_pivot_contexttool returns the layout of the user’s last Pivot Table query (cube, row/column levels, measures, filters) together with a ready-madequery_cubespecification that reproduces the same slice — for prompts like “explain this number” or “continue my analysis”. The context is per user, survives closing the workbook, and is withheld with an explicit note if the cube or its fields have since become unavailable to the user (edited cube, changed security roles). Pressing Refresh in Excel now also marks the shared SQL cache as stale for the assistant, so after a refreshquery_cubere-reads the warehouse instead of answering from a pre-refresh cache entry. See Working alongside Excel.Semantics for AI agents in the cube definition — four optional tags let the cube author describe the model to an assistant instead of leaving it to guess from a bare schema:
olap_description(what the cube is, its grain, the questions it answers — shown briefly bylist_cubesand in full bydescribe_cube),olap_ai_instructions(free-form instructions returned as written), and the field-leveldescription(business meaning, units, caveats) andsynonyms(alternative names separated by;, complementingtranslation). On top of that,describe_cubereturns sample values of low-cardinality dimension levels straight from the engine — the same query that fills a filter drop-down in Excel, so the values are never stale and always respect the user’s row-level security. The tags are metadata for assistants only: Excel and the XMLA path ignore them, generated SQL does not change, and cube files stay portable between servers. Autogen now leaves an emptyolap_descriptionwith a hint at the end of every generated cube. Cubes without the new tags work exactly as before. See Semantics for AI agents and Describing cubes for AI.Free desktop edition (EDITION=free) — a new
"EDITION": "free"key insettings.jsonswitches the server into the free single-user desktop mode: the endpoint listens on127.0.0.1only, Excel connects tohttp://127.0.0.1:<port>anonymously (no password), no license file is required, and cube definitions are always read from the local cube folder. Requests coming through a forwarded port (non-localHost/Origin) are rejected — the free edition works only on the machine it runs on. Without the key the server behaves exactly as before. SeeEDITION.Local cube definitions (CUBE_SOURCE=folder) — the server can now read cube definitions from local
.sqlfiles instead of theolap_definitiontable: set"CUBE_SOURCE": "folder"insettings.jsonand put one file per cube into the folder set byCUBES_FOLDER(defaultcubes/— the same folder autogen writes to, so a generated cube is live immediately). The file content is the same definition text as inolap_definition— files move between the two modes unchanged, including row-level security and syntax checking. Files are re-read on every request: saving a file in any SQL editor makes the change visible in Excel right away. Excel sees a single catalog namedCubes; cube SQL still runs through the configured warehouse connection. Without the new key the server behaves exactly as before. SeeCUBE_SOURCEand Cube definition storage.Fixed: number formats with several measures in one Pivot Table — when two or more measures were placed in the Values area, cells lost the number formats set by the
formattag and Excel displayed plainGeneralnumbers; with a single measure the format applied correctly. Formats now apply regardless of how many measures the report contains and of where the Values header is placed (columns or rows).
Version 2.0.18 — 2026-07-29¶
Hierarchy filtering without parent levels (–filter_no_parents) — by default, selecting a member deep inside a multi-level hierarchy filters the whole path: picking a quarter with the year expanded produces
year = '2024' AND quarter = 'Q2'in the generated SQL. The new--filter_no_parentstag, placed on any level of a hierarchy in the cube definition, switches that hierarchy to filtering by the selected member alone (quarter = 'Q2') — useful when a child member moves between parents over time (a product changes category, a store changes region) and filtering by the parent path would cut off its history. Enable it only on hierarchies where member values of every level are globally unique. Applies consistently everywhere a member filter is used: the pivot itself, report filters and slicers, Keep Only / Hide Selected Items, drill through and file export. See Cube definition reference.Export of large results to a CSV file — when a Pivot Table layout is too detailed for the pivot size cap (
MAX_CELLS), the full result can now be exported to a file instead: right-click → Additional Actions → Export full table to CSV. The browser opens a status page and the download starts automatically when the file is ready; the export is built in the background by streaming the query result straight to disk, so even multi-gigabyte results do not load the server memory. The file contains exactly what the pivot is configured to show — same fields, filters and expansions, with cube captions as column headers — but complete and without subtotal rows, so it can be safely aggregated further. Results larger than an Excel sheet (1,048,576 rows) are delivered as a ZIP archive. Repeated exports of an unchanged layout reuse the already-built file (kept 24 hours by default); pressing Refresh and exporting again rebuilds it with fresh data. Row-level security applies to the file the same way as to the pivot. Currently supported for ClickHouse. Enabled by the newEXPORTsection insettings.json— without it, server behavior is exactly as before. See Working with large results: preview and file export and Export to file (EXPORT).Preview mode for heavy layouts (Data Output field) — every cube of an export-enabled server gets a service Data Output field: putting it into the Filters area and selecting
Preview: first 1000 rowsshows the first rows of the detailed result while keeping the pivot fully editable — a way to shape a heavy layout on real data before exporting it. The preview returns plain data rows without totals — a faithful sample of the future file. See Working with large results: preview and file export.Cube autogeneration (autogen) — a first-draft cube definition can be generated from a single table:
main.exe autogenstarts a console wizard (pick a database table, review how every column was classified and why),main.exe autogen <schema.table>generates without questions. Date columns become a ready Year→Quarter→Month→Day hierarchy, key-like and text columns become dimensions, numeric columns become SUM measures (price/rate columns — AVG), near-unique text is excluded,count(*)is always added. The result is a complete commented.sqldefinition file to paste intoolap_definitionand refine by hand. See Generating a cube automatically (autogen).Admin panel: export management — the Cache tab shows current export jobs, files and their total size, with a Clear Export Jobs and Files button that also removes orphaned files and compacts the job registry. See Admin panel.
Version 2.0.17 — 2026-07-18¶
Named user licensing enforced with a seat registry — the licensed user limit now counts named users instead of concurrent sessions. A licensed seat is assigned to a user on their first request and survives sign-outs, cache clears and server restarts; it is freed automatically after a period of inactivity defined by the license (30 days by default) or manually by an administrator. The License tab of the admin panel shows who occupies the seats, when each user was first and last seen, and provides a per-seat Release button. When all seats are taken, a new user gets a clear “Named user limit reached” message in Excel; existing users are unaffected. In multi-server deployments (
CACHE_BACKEND: redis) the seat registry is shared by the whole cluster. See Admin panel.Cache clearing API for ETL pipelines (POST /api/cache/clear) — an external system can now clear the XLTable cache right after updating the warehouse data, so users get fresh numbers immediately instead of waiting out the cache TTL. Authorization by a dedicated Bearer token (new
API_TOKENSsetting — no admin password in pipeline scripts) or by admin credentials. Thescopeparameter selects what is cleared:sql(default — shared query results only, sessions and cube metadata untouched),metadata(plus cube definitions, users stay signed in) orall. WithCACHE_BACKEND: redisone call clears the whole cluster. See Cache management API.SQL results are cached once and shared between users — previously query results were cached per user session, so a department opening the same dashboard sent the same SQL to the database once per user; now an identical SQL query is executed once per
SQL_CACHE_TTL(600 seconds by default) and every other user gets the result from the cache within milliseconds. Excel Refresh keeps its meaning: the user who presses it bypasses the cached entries obtained before the refresh and — once the data is re-read — updates them for everyone; other users keep using the cache. Row-level security is unaffected: per-user access filters are part of the generated SQL text, so users with different permissions never share results. WithCACHE_BACKEND: redisthe cache is shared across all servers of the cluster. Cache size is capped (SQL_CACHE_MAX_MB, LRU eviction;SQL_CACHE_MAX_RESULT_MBper result), the feature can be turned off withSQL_CACHE_ENABLED: false, and the admin panel shows entry count, size and hit rate. See Refreshing data.Query marker in database logs for all connectors — every SQL query now starts with a
/* user:<name>, app:xltable */comment (previously only ClickHouse tagged queries, vialog_comment), so database administrators can find XLTable queries — and see which user requested the data — in the query history of any supported database: ClickHousesystem.query_log, Greenplumpg_stat_activity/server log, StarRocks audit log, Trinosystem.runtime.queries, SnowflakeQUERY_HISTORY, Databrickssystem.query.history, BigQueryINFORMATION_SCHEMA.JOBS. Ready-to-use history queries per database are in the FAQ. The ClickHouselog_commentmarker is kept unchanged.Query timeout for all connectors (query_timeout) — the
query_timeoutparameter inCREDENTIAL_DB(maximum execution time of a single database query, in seconds; 300 by default) is now honored by every connection type, not only ClickHouse. Where the database supports it, the query is cancelled server-side (SnowflakeSTATEMENT_TIMEOUT_IN_SECONDS, DatabricksSTATEMENT_TIMEOUT, Greenplumstatement_timeout, Trinoquery_max_execution_time, StarRocksquery_timeout, BigQuery job timeout); for embedded DuckDB the query is interrupted by XLTable itself. See Database connections.Cancelling a running query works in all connectors — when a refresh is interrupted in Excel (pressing
Esc), the server now cancels the query in the database instead of letting it run to completion. Previously only the ClickHouse connector supported this; now the query is cancelled server-side in Greenplum (pg_cancel_backend), StarRocks (KILL QUERY), Trino (system.runtime.kill_query), Snowflake (SYSTEM$CANCEL_QUERY) and BigQuery (job cancellation) — for these databases Cancel works across worker processes and servers, same as for ClickHouse. Databricks and embedded DuckDB have no server-side kill command, so the query is interrupted in-process: cancellation applies when the Cancel request reaches the same server process that runs the query.Admin panel: SQL cache statistics reset — the Cache tab got a Reset stats button that starts the hit/miss counters of the shared SQL result cache from zero without touching the cached entries. The counters deliberately survive restarts and cache clearing, so the button is the way to measure the cache hit rate over a chosen period. See Admin panel.
Snowflake key-pair authentication — the Snowflake connector now supports the authentication method Snowflake recommends for service accounts after deprecating single-factor password sign-ins: specify
private_key_path(andprivate_key_passphrasefor an encrypted key) inCREDENTIAL_DBto authenticate with an RSA key pair. A programmatic access token (PAT) can still be passed in thepasswordfield, and existing password-based configurations keep working unchanged. See Database connections.
Version 2.0.16 — 2026-07-10¶
DuckDB Connector — added support for DuckDB as a data source. DuckDB is embedded: the whole database is a single file next to XLTable — no database server to install, which makes it the fastest way to try XLTable or to serve small and medium datasets. Cubes can also be built directly on top of Parquet/CSV files via
read_parquet()/read_csv()in the cube definition. See DuckDB Sample Data.Multi-server deployments (CACHE_BACKEND: redis) — several XLTable servers can now share one cache through Redis and work behind a load balancer (e.g. nginx) with no sticky sessions: a session opened through one server is valid on all of them, a running query can be cancelled through any server, the licensed user limit is counted across the whole cluster, and cache management in the admin panel of any server applies to all. The default single-machine cache is unchanged. See Scaling to multiple servers (Redis cache).
Version 2.0.15 — 2026-07-04¶
Parallel worker processes on Linux (concurrency) — the Ubuntu installer now starts several server processes behind nginx load balancing (one per CPU core, up to 4 by default; configurable with
XLTABLE_INSTANCES). Heavy reports from many concurrent users are built in parallel instead of queueing on a single CPU core; all processes share one cache and onesettings.json. Existing installations pick this up by re-runninginstall_xltable.sh.Worker threads and port settings (SERVER_THREADS, SERVER_PORT) — the number of worker threads of one server process is now configurable (default raised from 8 to 16, so more database queries stay in flight simultaneously), as is the listening port (
SERVER_PORT, or theOLAP_PORTenvironment variable used by the multi-process setup).Result cache size cap (RESULT_CACHE_MAX_MB) — query results larger than the configured size (16 MB by default) are no longer stored in the shared result cache: under concurrent load, writing huge cached responses made all worker processes queue on the cache database; such results are cheaper to rebuild. Also sped up the assembly of very large XMLA responses.
Collapse / Expand Entire Field — the Pivot Table context-menu commands Expand/Collapse → Collapse Entire Field and Expand Entire Field are now supported in all combinations, verified against SSAS traces, both for separate nested fields and for levels of a multi-level hierarchy: collapsing a whole nested field, expanding an entire field or hierarchy level (all items at once), expanding a single item of a collapsed field back (only that item shows the nested field) and collapsing single items of an expanded field. A collapsed field is not queried at all — its table is not scanned or joined until the field is expanded again.
Keep Only / Hide Selected Items — the Pivot Table context-menu commands Filter → Keep Only Selected Items and Hide Selected Items are now supported, including items of multi-level hierarchies. Excel’s service query for the hierarchy position of the selected items (
__XlItemPath/__XlSiblingCount/__XlChildCount) is answered the same way as by SSAS.Large dimension filters — Keep Only / Hide Selected Items works on dimensions with tens of thousands of members, verified against an SSAS trace with 20,000 items: the full member list is returned to Excel (capped by the new
MAX_FILTER_MEMBERSsetting, 100,000 by default), member filters are generated as compact SQLIN (...)lists instead ofORchains, and the ClickHouse connector automatically raisesmax_query_sizefor oversized queries (the default 256 KB parser limit rejected large filter lists).Result limit in cells (MAX_CELLS) — the result size limit is now measured in cells of the pivoted table (row combinations × column combinations × measures) instead of rows, with a default of 100,000 — the same way SSAS limits oversized results. The legacy
MAX_ROWSsetting is still accepted. A separate, clear message is returned when the columns area exceeds the Excel sheet limit of 16,384 columns.XMLA diagnostics (DUMP_XMLA) — new setting that dumps every raw XMLA request and response to the
logfolder, for diagnosing Excel/XMLA protocol issues.Automatic log cleanup (LOG_RETENTION_DAYS) — log files older than the configured number of days (14 by default) are now removed automatically.
Overload protection (OVERLOAD_GUARD) — when the server host runs out of memory, CPU or disk space (configurable thresholds), data queries are rejected with a clear “Server is overloaded” message in Excel instead of being forwarded to the database. Metadata requests still pass, so cube connections stay alive.
Metadata cache TTL (METADATA_CACHE_TTL) — cached cube definitions, schema lists and query results now expire after a configurable period (600 seconds by default), so an edited cube is picked up automatically without clearing the cache.
Hot reload of settings.json — configuration changes are picked up automatically within a few seconds of saving the file, without a service restart. A file with a JSON syntax error is ignored (the previous configuration keeps working) and logged.
Cache follows settings.json — database credentials are no longer stored in the cache (they are read from the live configuration on every request), and the cache is cleared automatically whenever the configuration content changes — on hot reload or on service start. A service started with an incorrect configuration no longer requires a manual cache clear after the fix.
Authorization cache timeout (AUTH_CACHE_TIMEOUT) — cached authorizations of local users now expire the same way as Active Directory ones; the new setting applies to both (
LDAP_CACHE_TIMEOUTis kept as a legacy fallback).Admin panel: cache management — new per-user cache overview with last-activity times, a Sign out button for a single user, and a Clear Metadata Cache action that applies cube changes without signing users out.
Version 2.0.14 — 2026-07-01¶
Drillthrough — double-clicking a Pivot Table cell now returns the underlying detail rows. Detail columns are configured per measure group with the new
olap_drillthroughtag in the cube definition.New Jinja context — expanded the Jinja rendering context available in cube definitions with additional variables for building dynamic query logic.
Debug console — new debug console for inspecting rendered SQL, Jinja context and query execution, making cube development and troubleshooting easier.
Version 2.0.13 — 2026-06-18¶
Extended Jinja context — Jinja templates now receive additional context variables (
user,now,requestand per-source SQL fragments) for row-level security and dynamic query logic.SQL and XML escaping — hardened escaping of user names, member values and identifiers across all connectors to prevent SQL injection and malformed XMLA responses.
Many-to-many fix — corrected SQL generation for
many-to-manyrelationships.Connector fixes — multiple fixes across database connectors, including
ILIKEsupport for BigQuery.MCP connector (in development) — early support for an MCP connector, currently under active development.
Version 2.0.12 — 2026-05-22¶
Greenplum Connector — added support for Greenplum as a data source.
HTTP gzip compression — server HTTP responses now support gzip compression, reducing the amount of data transferred.
Faster XMLA response building — significantly improved performance when generating XMLA responses with a large number of rows.
Version 2.0.11 — 2026-04-01¶
Databricks Connector — added support for Databricks as a data source.
OLAP cube syntax validation — new function for validating cube definition syntax before loading.
Windows 10 and 11 support — added the ability to run on Windows 10 and 11 operating systems.
Version 2.0.10 — 2026-03-19¶
StarRocks Connector — added support for StarRocks as a data source.
Admin Panel — new web-based interface for managing server configuration.
Part-source parameter — added
part-sourceattribute for defining tag relationships in cube configuration.Jinja context variables — cube definitions now support Jinja templating with context variables.
Improved logging — enhanced diagnostic output across all supported connectors for easier troubleshooting.