Map Help
Hi everyone, I am trying to create a heatmap style visual using latitude and longitude. I have a column called location that has data that looks like this -26.27389, 28.127951. Is there something I am misunderstanding when trying to input this as location data? Thanks.16Views0likes1CommentGeneric JDBC ClickHouse live model with custom dialect
Hello, I am using a Generic JDBC driver to query our ClickHouse cluster. It works quite well on ElasticCube, except for handling date types and date functions. Therefore, I would like to use a live model with a custom dialect. However, I haven't found any documentation about that. I noticed that the analytical engine is enabled for my connector and that it's based on Apache Calcite. Additionally, I saw that there is a custom dialect for ClickHouse in the Apache Calcite project. https://github.com/apache/calcite/blob/main/core/src/main/java/org/apache/calcite/sql/dialect/ClickHouseSqlDialect.java I tried to download the Java file for ClickHouse dialect and upload it, but it doesn't seem to work as expected. Although no errors appeared in the UI, I noticed a 400 error in the network with the following message: "Failed to update dialect with response = ServiceResponse(status=INSTALL_DIALECT_FAILED, value=null, error=Failed to validate Dialect for connector GenericJDBC_clickhouse, statusCode=0), for connector GenericJDBC_clickhouse." Could you help me figure it out? ThanksSolved2.2KViews0likes9CommentsConfigure Sisense for multiple domains
We would like to configure our Azure application gateway to allow access to Sisense under 2 totally different domains. One is a legacy domain and one is our new domain. I raised a ticket with Sisense support. Sisense itself cannot by configured. they suggested setting up routing in our load balancer / DNS to do this. So I did this, but Azure Application gateway throws an error. The problem is the SSL certificate installed in Sisense is for the old domain. anybody got round this . perhaps a forwardiing instead of a redirect?167Views0likes4CommentsEmail template changes not reflected
Hello, I'm trying to rebrand Sisense email templates, including the social links. According to this post, things like the email messages and social links can be edited in email-templates.js, but any changes I've made are not reflected, both editing text for existing fields and fields I've added myself. They just appear blank when referenced in the header or footer files. I've tried editing both email-templates.js, and the language.js file in the emails folder, and tried rebooting the system, but changes still do not appear. Is there anything else I may be missing?267Views0likes2CommentsMetadata translations - question
Hi, There are a couple of languages possible to choose from in the user preferences. We would like to add some more for our users, and already found in File Management the 'translations' folder, where we can add a new folder with the respective translations. Then we adjusted the language name in the settings.json, and it seems to work. However, there is this JSON folder, containing more translations, but no english version. Is there an english version of the files therein that we can use as master? or are they not in use anymore? Thanks in advance for any insights, MarthaSolved485Views0likes2CommentsSharing the datacube with multi tenants
Hi Team, I am currently implementing multi-tenancy in Sisense and sharing a single Elasticube across multiple tenants while enforcing Row-Level Security (RLS). The goal is to ensure that each tenant only accesses their respective data while using the same cube. I successfully shared the Elasticube with Tenant1, but when trying to access it, I get the following error: Error Loading Model Unexpected error value: { isOperational: false, message: "Request failed with status code 500", code: undefined, statusCode: 500, method: {some html tags and ids} Contact your system administrator for more information. The error persists even after confirming that: The Elasticube is correctly shared with Tenant1. Tenant1’s users, designers, and admin have access permissions. Multi-Tenancy is enabled in Sisense. Has anyone faced a similar issue when sharing an Elasticube across tenants? Any insights or suggestions would be greatly appreciated! Thanks in advance for your help.362Views0likes2Commentsfree trial
Hi I discovered that sisense now stops providing free trial version so may I ask the reason why stop providing free trial and if it is possible that I can use free trial again in the future since I really want to try this product in a more detailed way and watching a demo still restricts a lot Thank you!533Views0likes1CommentCustom Widget/Dashboard script to return full digit numbers
Disclaimer: Please note, that this blog post contains one possible custom workaround solution for users with similar use cases. We cannot guarantee that the custom code solution described in this post will work in every scenario or with every Sisense software version. As such, we strongly advise users to test solutions in their own environment prior to deploying them to ensure that the solutions proffered function as desired in their environment. For the avoidance of doubt, the content of this blog post is provided to you “as-is” and without warranty of any kind, express, implied or otherwise, including without limitation any warranty of security and or fitness for a particular purpose. The workaround solution described in this post incorporates custom coding which is outside the Sisense product development environment and is therefore not covered by not covered by Sisense warranty and support services. This article does cover the use case when you would like to display full size of number instead of the default logic approach we use when numbers are shorted, example: After the solution would be applied: Here is the widget script that you could use to effect the specific widget Chart: // Function to convert shortened numbers to full numbers function convertToFullNumber(value) { if (typeof value !== 'string') { throw new Error("Input must be a string."); } let multiplier = 1; let number = parseFloat(value); if (isNaN(number)) { throw new Error("Invalid numeric value."); } const lowerValue = value.toLowerCase(); if (lowerValue.includes('m')) { multiplier = 1e6; // Million } else if (lowerValue.includes('k')) { multiplier = 1e3; // Thousand } else if (lowerValue.includes('b')) { multiplier = 1e9; // Billion } else if (!/^\d+(\.\d+)?$/.test(lowerValue)) { throw new Error("Invalid format. Only numbers with 'k', 'm', or 'b' are allowed."); } return Math.round(number * multiplier); } widget.on('beforedatapointtooltip', (widget, query) => { let value = query.context.points[0].value; try { const convertedValue = convertToFullNumber(value); query.context.points[0].value = convertedValue; } catch (error) { console.error("Conversion error: " + error.message); query.context.points[0].value = value; // Keep the original value if conversion fails } }); Dashboard script which effects many chart widgets: // Function to convert shortened numbers to full numbers function convertToFullNumber(value) { if (typeof value !== 'string') { throw new Error("Input must be a string."); } let multiplier = 1; let number = parseFloat(value); if (isNaN(number)) { throw new Error("Invalid numeric value."); } const lowerValue = value.toLowerCase(); if (lowerValue.includes('m')) { multiplier = 1e6; // Million } else if (lowerValue.includes('k')) { multiplier = 1e3; // Thousand } else if (lowerValue.includes('b')) { multiplier = 1e9; // Billion } else if (!/^\d+(\.\d+)?$/.test(lowerValue)) { throw new Error("Invalid format. Only numbers with 'k', 'm', or 'b' are allowed."); } return Math.round(number * multiplier); } // Widget event handler example prism.on("dashboardloaded", function (e, args) { args.dashboard.on('widgetready', (dashboard, args) => { var array = []; dashboard.widgets.toArray().forEach(widget => { if (widget.type === 'chart/bar') { widget.on('beforedatapointtooltip', (widget, query) => { let value = query.context.points[0].value; try { const convertedValue = convertToFullNumber(value); query.context.points[0].value = convertedValue; } catch (error) { console.error("Conversion error: " + error.message); // Optionally handle the error or show a fallback value query.context.points[0].value = value; // Keep the original value if conversion fails } }) } }); }); });465Views1like0Comments