2026.2 Release Notes
For a list of release dates and Sisense's end of support schedule, see Sisense Version Release and Support Schedule.
For information about the Sisense gradual rollout process, as well as an explanation of how the versions and release notes relate to content added during the rollout, see Sisense Gradual Rollout Process.
Regarding Salesforce Security Updates to the "Use Any API Client" Permission:
-
For customers using Sisense connections to Salesforce, it is important to note a significant Salesforce change and steps that you may have to take for continued correct functionality. See Salesforce “Use Any API Client” Permission Changes: Sisense Impact & Migration Guide.
Regarding Upgrading:
-
Version L2025.4 Service Pack 1 contains an important fix. Therefore, it is strongly recommended to upgrade to SP1 or newer.
-
Customers currently running Sisense versions older than L2025.2.0.249 cannot directly upgrade to versions L2025.3 or newer. You must first upgrade your Sisense installation to version L2025.2.0.249 or L2025.2.0.496. Only after completing this intermediate upgrade can you proceed to version L2025.3 or newer. This important change is due to Sisense upgrading to MongoDB 8 starting from Sisense version L2025.3.
-
To download the latest Sisense version, or to upgrade to an older version, see that version’s Release Notes and contact your Sisense Customer Success Manager for the version package.
-
To upgrade to this version of Sisense:
-
Read the Release Notes of all the versions following your current version, up to and including the version to which you are upgrading.
-
Run a system backup before upgrading. See Backing up and Restoring Sisense.
-
Follow the upgrade procedure in Upgrading Sisense.
-
Privacy and Security Information
This release contains several security related updates. We highly recommend upgrading to this latest release to take advantage of any security-related updates and benefit from the Sisense support and warranty. In addition, Sisense strongly recommends regularly testing and auditing your environment after upgrading, and periodically during your subscription term, to ensure all privacy and security settings remain in place.
Customers are responsible for controlling and monitoring your environments and are therefore in the best position to ensure the correct security settings are in place for how you use Sisense products.
Due to the complexity of Sisense products, we strongly suggest that all customers ensure that you understand how all of the privacy and security settings within Sisense work.
If you use Sisense to store/process sensitive data, it is your responsibility to review and test your implementation to ensure you are not inadvertently sharing data with unauthorized third parties. For more information on data security rules, see Data Access Security.
BREAKING CHANGES - WARNING!
The following is a cumulative list of potentially breaking changes from approximately the past 12 months, and may also include warnings about upcoming changes:
Customers using the GenericJDBC connector with a custom dialect Java file will need to recompile and potentially update your code.
All custom dialect files must be recompiled after the upgrade because the underlying Calcite JAR has changed. Even if no code changes are needed, the old compiled .class file may not work correctly with the new Calcite runtime.
To recompile: re-upload the dialect .java source file through the connector management CLI. The system will compile it against the new Calcite JARs automatically.
Breaking API Changes
The following changes may require code modifications in custom dialect files.
1. Operator Comparison Pattern
This was observed for LOG10 but may affect other operators compared using identity (==). The safe approach is to use name-based comparison.
Before:
if (call.getOperator() == SqlStdOperatorTable.LOG10) { ... }
After:
if (call.getOperator().getName().equalsIgnoreCase("LOG10")) { ... }
Reason: Calcite changed SqlStdOperatorTable from a reflective scan to an immutable multi-map (CALCITE-6024), which altered operator object resolution order. Identity comparison (==) is no longer reliable for matching operators.
2. SqlSelect Constructor - New qualify Parameter
The SqlSelect constructor gained a new qualify parameter (for the SQL QUALIFY clause). The old constructor without qualify still works but is deprecated.
Before (still compiles, but deprecated):
new SqlSelect(pos, null, selectList, from, where, groupBy, having,
windowDecls, orderBy, offset, fetch, hints);
// 12 parameters
After (recommended):
new SqlSelect(pos, null, selectList, from, where, groupBy, having,
windowDecls, null, orderBy, offset, fetch, hints);
// ^^^^ new 'qualify' parameter (null = not used)
// 13 parameters
3. rewriteSingleValueExpr() Signature Change
If the dialect overrides rewriteSingleValueExpr(), the method signature has changed.
Before:
@Override
public SqlNode rewriteSingleValueExpr(SqlNode aggCall) { ... }
After:
@Override
public SqlNode rewriteSingleValueExpr(SqlNode aggCall, RelDataType relDataType) { ... }
Add import: import org.apache.calcite.rel.type.RelDataType;
4. SqlExtractFunction Constructor
The default (no-arg) constructor was removed.
Before:
SqlExtractFunction extractCall = new SqlExtractFunction();
After:
SqlExtractFunction extractCall = new SqlExtractFunction("EXTRACT");
5. SqlSampleSpec API Change
If the dialect handles TABLESAMPLE, the getter method was replaced with direct field access.
Before:
Float pct = ((SqlSampleSpec.SqlTableSampleSpec) spec).getSamplePercentage();
After:
Float pct = ((SqlSampleSpec.SqlTableSampleSpec) spec).sampleRate.floatValue();
6. CTE (WITH clause) Body Framing
If the dialect customizes WITH clause unparsing, the CTE body must now be wrapped in a WITH_BODY frame.
Before:
with.body.unparse(writer, 0, 0);
After:
SqlWriter.Frame bodyFrame = writer.startList(SqlWriter.FrameTypeEnum.WITH_BODY);
with.body.unparse(writer, 0, 0);
writer.endList(bodyFrame);
Without the WITH_BODY frame, the CTE body gets extra parentheses, producing invalid SQL.
Security
The move to Apache Calcite 1.36.0 addresses all known security vulnerabilities, including CVE-2022-39135 (CRITICAL, CVSS 9.8 - XML External Entity injection). Calcite 1.36.0 has zero known CVEs.
The Report Manager URL has now changed from /reportManager/main.html#/reports to /app/report-manager#/reports. This is necessary only for when embedding the Report Manager directly by URL.
2026.2.0 Release Overview
Cloud Availability
This release is currently only available to cloud customers. It will be released shortly for on-premise availability as well.
As the content is still in progress, it is recommended that you check back here occasionally for the latest updates.
Release 2026.2.0 provides a number of new features, improvements, and fixes to Sisense for Linux.
What's New
The following table lists the high-level impact (or potential impact, if any) of new features, and how to handle it if upgrading to version 2026.2.0 or newer. Continue reading the Release Notes below the table for a detailed explanation of these features, as well as improvements and fixes.
| Feature | Issues and Actions to Consider |
|---|---|
|
|
|
|
|
Unified Narrative Administration
All narrative-generation capabilities have been consolidated under a single Narrative setting, giving admins a clear, consistent way to control and monitor narrative usage across the product.
A single Narrative toggle in Sisense Intelligence Admin now controls:
-
Dashboard/widget Narratives
-
Narrative API usage (unified narrative REST API)
Cloud Linked Features Dependency
If Cloud Linked Features (CLF) is OFF, Narratives are disabled, even if the Narrative toggle is ON or covered by license. In this case, users see a notification indicating that Cloud Linked Features must be enabled for Narratives (and other AI capabilities) to work. This applies to:
-
Dashboard/widget narratives
-
Assistant-generated narratives
-
Narrative API calls
Admin Impact and Configuration
To enable Narratives, ensure:
-
Cloud Linked Features is turned ON, and
-
Narrative is enabled under Sisense Intelligence > Feature Management.
Disabling the Narrative toggle:
-
Hides or disables the Generate Narrative button in the Assistant.
-
Disables narrative generation in dashboards/widgets and via the narrative API.
NLQ Assistant – Natural Analytical Responses (Preview)
The Sisense assistant now answers analytical questions with natural-language responses that include exact data values and concise insights, while continuing to generate the relevant visualization.
-
Natural-language analytical answers – Quantitative questions now return direct answers with exact values plus a focused insight (for example: trend, ranking, or share of total).
-
Question-aware responses – The assistant adapts responses by query type, including:
-
Quantitative – direct answer + insight
-
Creation requests – creates the requested visualization and confirms the action with a brief insight
-
Comparison – includes values, deltas, and percentages
-
Metadata / structural – returns text-only field or definition information
-
Ambiguous questions – asks clarifying follow-up questions with suggested options
-
Forecasting / trends – summarizes projected direction alongside the visualization
-
No data found – returns a clear text explanation without showing an empty visualization
-
-
Shared filter context – Assistant responses and generated charts now respect active dashboard filters, ensuring consistent results across dashboards, NLQ, and assistant interactions.
Preview Scope
This release covers natural-language responses for core analytical question types and filter synchronization. Governance controls and complex explanatory “why” questions remain out of scope for this phase.
What's Improved
Analytical Engine
-
Easier Analytical Engine Updates: You can now apply changes to Analytical Engine settings for ElastiCube and B2D models using the Publish Semantics option. This enables you to update model behavior without requiring a full data build.
APIs
There is a new endpoint for partially publishing semantics:
PATCH /api/v2/perspectives/{perspectiveOid}/publish-semantics/partial?fields=<comma-separated field paths>
This endpoint allows updating specific semantic properties (e.g., only customTranslationMode) without publishing other pending draft semantic changes.
|
Parameter |
Type |
Required |
Description |
|
|
UUID |
Yes |
The OID of the perspective to update. |
|
Parameter |
Type |
Required |
Description |
|
|
|
Yes |
Dot-notated field paths specifying which fields to merge. See supported values below. |
fields values:
|
Value |
Effect |
|
|
Updates only the custom translation mode. |
|
|
Updates only the AE query mode. |
|
|
Updates only the dependencies generation mode. |
Multiple fields can be specified. For example: ?fields=analyticalEngine.customTranslationMode,analyticalEngine.queryAeMode
Content-Type: application/json
The body is a JSON array of Perspective objects (the same schema as the existing full publish semantics endpoint). Only the fields specified in the fields query parameter will be applied; all other properties in the body are ignored.
[
{
"oid": "c4cb5f66-c9fb-44a2-81b0-4e66d9064af7",
"name": "default",
"analyticalEngine": {
"customTranslationMode": "ae"
}
}
]
|
Status |
Description |
|
200 OK |
Fields updated and published successfully |
|
400 Bad Request |
fields parameter is missing or empty |
|
404 Not Found |
Perspective / EcmModel not found |
|
412 Precondition Failed |
A build is currently finalizing; update rejected |
|
500 Internal Server Error |
Unexpected failure (check BE logs) |
curl -X PATCH \
'https://<host>/api/v2/perspectives/c4cb5f66-c9fb-44a2-81b0-4e66d9064af7/publish-semantics/partial?fields=analyticalEngine.customTranslationMode' \
-H 'Content-Type: application/json' \
-d '[{
"oid": "c4cb5f66-c9fb-44a2-81b0-4e66d9064af7",
"name": "default",
"analyticalEngine": {
"customTranslationMode": "ae"
}
}]'
Compose SDK Mode
-
Compose SDK Mode now supports embedding code at the widget level.
Sisense Intelligence
-
When using the assistant with Azure GPT 4.1, chart generation speed has been improved.
-
The assistant now supports shared formulas.
WAT
-
The URL length for the Jump to Dashboard in the WAT flow has been optimized by adding a mechanism to compress the 'filter' parameter in the URL. This reduces the number of cases where the URL is too large for the nginx server to process. (In some cases, it may be necessary to adjust the nginx server default parameters).
What's Fixed
Access Control
-
Tightened access control for the /storage/fs/validate_file endpoint so that only users with permission to upload data sources (Data Designer and higher roles) can access it; lower-privilege roles now correctly receive HTTP 403.
Add-ons
-
Previously, when using JTD, increasing the popup window size to 130% or larger sometimes caused the popup to be truncated, cutting off the dashboard header, navigation buttons, and scrollbar. This has now been fixed, and navigation buttons, windows, and menu bars remain visible in JTD popup windows, even when resized above 130%.
-
Fixed an issue where enabling or disabling add‑ons (plugins) on self‑hosted Sisense deployments running with a non‑default Linux user ID (non‑UID 1000) could fail with a Permission denied (EACCES) error on licensed plugin files (for example, licensed-plugins/<plugin>/plugin.json). As a result, plugin state changes (enable/disable) appeared to revert and could not be applied.
File ownership for licensed plugin files is now aligned with the configured deployment UID (securityContext runAsUser/fsGroup), so plugin state changes work as expected on deployments using custom UIDs.
-
Fixed an issue in the SmartShare add-on where sharing dashboards with a very large number of users or groups could cause timeouts and 500 errors. The add-on now processes these requests in smaller batches, ensuring reliability and responsiveness even when managing extensive sharing lists.
APIs
-
Previously, updating data security rules via REST API 1.0 PUT /elasticubes/live/datasecurity/{dataSecurityId} stored the partyId as a string instead of an ObjectId. This caused data integrity issues and could break downstream processes expecting the correct data type. The API now correctly stores partyId as an ObjectId.
-
Previously, the PDF preview layout was not saved if the dashboard contained a widget added via
POST /api/v1/dashboards/${dashboardId}/widgets/. The issue only occurred via API, not if the widget was added using the UI. This has now been fixed, and the PDF preview layout is saved when using the API as well. -
Previously, the
analyticalEnginefield andAE_MODEsettings were ignored when creating or updating data models via the/v2/datamodelsREST API. You can now successfully configure and retrieve Analytical Engine settings via the API.
Compose SDK Mode
-
Previously, in Compose SDK Mode, Download Image and Edit script menu items were shown even though they are not supported. These options are now hidden to prevent confusion; standard mode remains unchanged.
Data Models
-
Previously, importing or exporting models with a high number of Data Security rules (~2,700+) caused a pod to crash. This was due to the system attempting to encrypt each security rule member individually, leading to TCP port exhaustion and a loss of connectivity for critical services. The encryption logic in the model import/export flow has been refactored to use a bulk encryption API with chunking (processing items in batches of up to 200). This dramatically reduces the number of concurrent HTTP requests, preventing port exhaustion and ensuring stability during large model operations.
-
Previously, the Analytical Engine setting was not preserved when duplicating a data model and was missing from the data model APIs. This has now been fixed and works as expected.
Data Security
-
Previously, importing a model with many DS rules sometimes silently skipped data security with no error displayed (import completed "successfully", without Data Security). This has now been fixed, and Data Security is applied as expected.
Export to PNG
-
Previously the user profile language was used for dashboard PNG exports, ignoring the lang URL parameter. This has now been fixed and PNG exports respect the lang URL parameter.
Export to PDF
-
After adding support for word wrap in rows, the wordWrapRows option now affects the exported PDF output in the same way as it does in the table preview. When enabled, each row may span multiple lines, reducing the number of rows rendered per page. As a result, the total number of pages in the exported file may increase compared to exports without word wrapping. Based on internal measurements, memory consumption in the exporting pod may increase by approximately 20% under these conditions. In environments with large datasets, this may lead to export failures due to insufficient pod memory limits. If export errors occur after enabling word wrap, consider increasing the limits.memory setting for the exporting pod. If issues persist, please contact Sisense Support.
-
Previously, exporting a dashboard to PDF resulted in outdated or incorrect data when the metadata translations plugin was enabled. This occurred because certain BloX widget actions (such as Dimension Swapper) triggered a recursive loop in the metadata processing, preventing the dashboard from saving recent changes before the export. This has now been fixed by implementing cycle detection to ensure dashboard updates complete successfully, allowing the PDF export to reflect the most current data and translations.
Filters
-
Previously, selecting N/A plus other values in a widget sometimes caused expanded filters to display incorrect results. This has been fixed and filters work as expected.
-
Previously, charts such as bar charts or column charts could not be filtered by the columns/bars with the following condition: Days granularity in the categories and Days in Date dashboard filters. This has been fixed and interactive filtering now works as expected.
Git
-
Previously, in some cases, syncing dashboards via Git that contain rich text widgets, Git showed uncommitted changes even when no edits were made. This has been fixed and Git only shows actual uncommitted changes.
Outer Joins
-
Previously, applying an include filter to show only specific members would still return unexpected NULL entries in the results. This occurred in data models that use a combination of outer and inner joins between tables, where the filtered field was connected through multiple levels of joins. This has been fixed and queries now correctly exclude NULL entries and return only the filtered members.
-
Previously, when using Outer Join with Redshift, queries sometimes failed with a "column reference is ambiguous" database error. This occurred when the query included columns from different tables that had the same name but different casing (e.g., Country_id and country_id). This issue has been resolved and columns with identical names but different casing are properly disambiguated.
-
With this fix, perspectives now correctly persist and apply the join type from the root model, ensuring LEFT JOIN behavior is honored in both the UI and the underlying queries, and eliminating the need to manually re‑define join types in each perspective.
-
Previously, in ElastiCube models, filtering for NULLs on the null-producing side of an outer join resulted in zero rows. This has been fixed and the underlying SQL takes into account NULL values produced by the outer join as well as NULL values in the original tables.
-
Previously, when applying a top or bottom ranking filter on a dimension that uses an outer join, rows where the dimension value is N/A were incorrectly excluded from the results. This issue has been resolved and N/A dimension values are now correctly included in Top/Bottom ranking results when using outer joins.
Perspectives
-
Previously, in the Sisense semantic model, perspectives did not always correctly inherit LEFT JOIN relationships defined in the root model. In some cases, joins that were configured and displayed as LEFT JOIN in the UI were executed as INNER JOIN in the generated SQL for perspective‑based widgets, causing inconsistent and inaccurate results. This has been fixed and Perspectives apply the join type from the root model, ensuring LEFT JOINs execute as expected.
Report Manager
-
Previously, in some cases, when exporting a report from Report Manager in a live model, the export failed due to a broken retry mechanism. This has been fixed by modifying the retry behavior for report exports.
-
Previously, in some cases, scheduled emails sent by Report Manager to external recipients failed with a vague error description in the UI that could not be used to troubleshoot. This has been fixed and the UI now displays a clear error message.
-
Previously, in some cases, Report Manager UI indicated a scheduled report was sent even though some recipients did not receive the report. This has been fixed and the UI now accurately reflects actual report delivery.
Search
-
Previously, when performing a search in the left navigation panel, the UI occasionally froze for up to 10 seconds. This has been fixed by moving search functionality to the server, which subsequently frees up client resources.
Single Sign On (SSO)
-
Previously, users were sometimes unable to authenticate via SSO due to a malformed redirect URL (//openid) caused by the browser’s cache. This has been fixed by correcting the way URLs are constructed, thereby resolving failed logins without requiring users to clear their browser cache.
Sisense Intelligence
-
Previously, when the assistant generated a new visual or metric, you could only see the updated/new visual by clicking outside of the popup window and reopening the assistant. This has been fixed, and the visual is now updated in the existing widget.
-
Previously, it was not possible to scroll through the list of created charts in the assistant when the list exceeded the window height. Vertical scrolling has now been added to ensure all charts remain accessible.
User Parameters
-
Previously, when an admin manually created a user with an email address that contained an invisible (non-printing) character and the same user logged in via SSO without using the invisible character, Sisense treated them as 2 separate accounts. This led to duplicate accounts that appeared to have the same email address, causing issues with dashboard access and permissions. This has now been fixed by adding validation that blocks the use of email addresses containing invisible characters both in the Sisense UI and in the backend.
Widgets
-
Previously, in Pivot2 widgets, null values were sometimes displayed as 0 instead of N/A after changing the number of decimal places displayed in a column, leading to null values being interpreted as actual data. This has been fixed and Pivot2 widgets display null values as N/A.
-
Previously, in pivot widgets with many columns, the end of the last column was occasionally cut off, making the resizing handles and sorting button inaccessible. This has been fixed by updating the widget UI and scrolling logic so that all columns and buttons are visible regardless of the number of columns.
-
Previously, when clicking cancel while a widget is loading, the widget’s toolbar disappears and users cannot open or edit the widget. This has been fixed and the toolbar no longer disappears.
-
Previously, Pivot widgets with outer joins encountered a query error after an upgrade if joined tables contained columns with identical names. This has been fixed and Pivot widgets now function correctly, even when joined tables share column names.
-
Previously, in some cases, the scroll bar was hidden in table widgets with many columns, preventing users from scrolling through the table. This has now been fixed, and the scroll bar appears as expected regardless of screen resolution.
Deprecations
-
Nginx ingress is being deprecated. It is being replaced with Nginx Gateway Fabric (NGF).
-
The following old Narration endpoints are being deprecated:
-
/ai/nlg/queryResult
-
/ai/describe/query
-