Sisense Community logo
     
    • Community Feedback
    • Chapters
    • Events
    • Forums
      • Help and How To
      • Product Feedback Forum
      • Strategy & Use Cases
    • Blogs
    • KB Docs
      • KB Docs
      • Add-Ons & Plug-Ins
      • APIs
      • Best Practices
      • Blox
      • CDT
      • Cloud Managed Service
      • Data Models
      • Data Sources
      • Embedding Analytics
      • How-Tos & FAQs
      • Onboarding
      • PySisense
      • Security
      • Sisense Administration
      • Sisense Intelligence & AI
      • Troubleshooting
      • Widget & Dashboard Scripts
    • Support
    • Learning
      • Sisense Academy: Free Courses and Certifications
      • Official Developer Documentation
      • Official Product Documentation
      • Official Sisense Youtube Channel
      • Sisense Compose SDK Playground
      • Official Sisense Discord
    • Use Case Gallery
    •      
    Discussions
    •                    
    •                    
    •                    
    •                    
    •                    
    •                    
    •                    
    •                    
    •                    
    •                    
    •                    
    •                    
    •                    
    •                    
    •                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
    Discussions
    • HomeChevronRightIcon
    • All postsChevronRightIcon
    Help and How-To

    Created Mar 17, 2026

    18 members

    600 discussions

    Connect, learn, and master Sisense with help from your peers and experts. 💡

    Help and How-To
                       
                                       
    • Garrett Wolfe

      Garrett Wolfe

      Adding Dashboard Descriptions with a Modal Info Icon
                       

      Every widget in Sisense supports descriptions, but what about dashboards themselves? Sometimes you need to explain a dashboard's purpose or guide users on how to interact with it effectively. We solved this by adding an info icon to the top toolbar that triggers a modal with the dashboard description. Add this script at the dashboard level and update the CONFIG object at the top with your custom text. We also included a feedback email in the configuration, making it easy for users to reach out with questions or suggestions. If you'd prefer, you could split this into a separate feedback button instead of including it in the description modal. Another nice touch: you can swap the ℹ️ emoji for a different icon to match the style of Sisense's built-in widget info icons. Let me know if this is helpful or if it this feature already exists and I have missed it.  // Configuration - update these values for your dashboard const CONFIG = { feedbackEmail: 'feedback@feedback.com', description: 'You can put your additional context here.' }; $(document).ready(function() { setTimeout(function() { // Clean up any existing instances $('#dashboard-info-icon, #dashboard-info-modal').remove(); // Create info button const infoButton = $('<button id="dashboard-info-icon" title="Dashboard info">ℹ️</button>').css({ cursor: 'pointer', background: 'none', border: 'none', fontSize: '20px', padding: '5px 10px', color: '#666' }); // Add button to toolbar (after Widget button if found, otherwise append to toolbar) const widgetButton = $('button:contains("Widget")').filter(':visible').first(); if (widgetButton.length) { widgetButton.after(infoButton); } else { $('.dashboard-toolbar').append(infoButton); } // Create modal const modal = $(` <div id="dashboard-info-modal" style="display:none; position:fixed; z-index:10000; left:0; top:0; width:100%; height:100%; background:rgba(0,0,0,0.5);"> <div style="background:white; margin:15% auto; padding:30px; border-radius:8px; width:500px; max-width:90%; box-shadow:0 4px 6px rgba(0,0,0,0.1);"> <h2 style="margin-top:0; color:#333;">Dashboard Description</h2> <p style="line-height:1.6; color:#555;">${CONFIG.description}</p> <p style="line-height:1.6; color:#555; margin-top:20px;"> <strong>Feedback:</strong> <a href="mailto:${CONFIG.feedbackEmail}" style="color:#0078d4; text-decoration:none;">${CONFIG.feedbackEmail}</a> </p> <div style="text-align:right; margin-top:20px;"> <button id="close-modal" style="background:#0078d4; color:white; border:none; padding:10px 24px; border-radius:4px; cursor:pointer; font-size:14px; font-weight:500;">OK</button> </div> </div> </div> `); $('body').append(modal); // Event handlers infoButton.click(function() { modal.fadeIn(200); }); $('#close-modal').click(function() { modal.fadeOut(200); }); // Close when clicking outside modal modal.click(function(e) { if (e.target.id === 'dashboard-info-modal') { modal.fadeOut(200); } }); // Close with ESC key $(document).keydown(function(e) { if (e.key === 'Escape' && modal.is(':visible')) { modal.fadeOut(200); } }); }, 1000); });  

      5 months agolast reply 3 weeks ago
      3
               
      • Help and How-ToChevronRightIcon
      More information with less scrolling: here's how tab-based navigation can level up your Sisense dashboards
      Mia Isaacson
      Mia IsaacsonPosted 3 weeks ago
               
      0
               
      • Help and How-ToChevronRightIcon
                       
      Single Filter against multiple columns
      ramansingh89
      ramansingh89
      Posted 1 year ago • Last reply 1 month ago
      8
               
      • Help and How-ToChevronRightIcon
      If your dashboard toolbar helping your users? Or is it just....there?
      Mia Isaacson
      Mia IsaacsonPosted 1 month ago
               
      0
               
    • Rose Holmes-Minton

      Rose Holmes-Minton

      Is it possible to dynamically change the data model for an accrd or drill dashboard
                               

      I created a Accordion dashboard and a Drill dashboard to test the Accordion and Jumpto Sisense features.   The features work well as long as the data model for the Accordion dashboard and the main dashboard are the same. However, when I change the data model for the main dashboard to a different data model, the datamodel for sub dashboard does not change. Therefore the data in the sub dashboard is not displaying information that pertains to currently selected data model. What can I do to remedy this?

      2 months agolast reply 1 month ago
      4
               
      • Help and How-ToChevronRightIcon
                       
      Amending Automated Email Content
      Mark Holt
      Mark Holt
      Posted 1 month ago • Last reply 1 month ago
      1
               
      • Help and How-ToChevronRightIcon
      Are your end users losing filter context every time they switch dashboards?
                                                                                       
      Mia Isaacson
      Mia IsaacsonPosted 1 month ago
               
      0
               
      • Help and How-ToChevronRightIcon
      Your Sisense charts are clean, but are your tooltips telling the whole story?
                                                                                               
      Mia Isaacson
      Mia IsaacsonPosted 1 month ago
               
      0
               
    • dsonam

      dsonam

      Feature Request: Expose build error details via /api/v2/builds endpoint
               

      We're using the /api/v2/builds endpoint to track ElastiCube build outcomes (successes, failures, retries). The endpoint works well for tracking basic build task status, but we are running into severe limitations regarding failure visibility. Currently, when the build fails, the API response only returns a status of [Failed] with no accompanying error message or failure reason. The actual error detail is visible in the Sisense UI under the cube's build history, but there is no way to retrieve it through the REST API. Request:  Expose the build error message or error category as fields in the GET /api/v2/builds and GET /api/v2/builds{buildId} response objects. Even a brief top-level error summary would be sufficient to make monitoring and alerting useful. This would benefit any team building operational dashboards and alerting scripts around Sisense build reliability, making automated monitoring truly actionable.  

      4 months agolast reply 1 month ago
      1
               
    • Jake Raz

      Jake Raz

      Check if the same date across different records is in the same month or not
                       

      Hi! In our system we have Invoice data. There's an Invoice table with various details about the invoice, and each invoice also has multiple line items, tracked on a separate Line Item table. On the Line Item table is a field called "Service Date". I want to find Invoices that contain Line Item Service Dates that are in different months . This is against our billing guidelines, which say that invoices must only contain line items that are within the same calendar month as each other. I know how to do this in Excel using MAXIF and MINIF formulas to compare the earliest and latest Service Dates within a given Invoice. However, I can't figure out how to do this in Sisense. Please note: we're on an older Windows-based version of Sisense, v8.2.1.10110. I also do not have access to the ElastiCube configuration, so I cannot create new fields or modify the existing tables. Ideally I'd like to be able to do this within the existing UI in the Sisense front-end with formulas, if possible. I tried using this formula to render the difference in months as a number, with the idea that I could filter for anything greater than zero: MDIFF(MIN([Months in Invoice Line Item Service Date]),MAX([Months in Invoice Line Item Service Date])) . However, the formula window in Sisense displayed an error and says " Error in function definition (MDiff): Expecting parameter of type 'Dimension Expression' but found 'Numeric Expression'. " If I remove the MIN/MAX functions, so it's just MDIFF([Months in Invoice Line Item Service Date],[Months in Invoice Line Item Service Date]) , the error message goes away, but then the formula doesn't work properly: it'll just display a "0" for all invoices, even ones that I know should show a 1 or more due to their service dates spanning across multiple months. (Presumably this is because, without the MIN & MAX, it doesn't know which particular Service Dates to compare.) If I try just subtracting the MIN from the MAX without using the MDIFF function, like MAX([Months in Invoice Line Item Service Date])-MIN([Months in Invoice Line Item Service Date1]) , the formula window lets me submit the formula, but then the whole widget displays a yellow exclamation point error, and the error message says " Query number 0: types tinyint(8,0) and timestamp(7,0) are not equal ".  If I try just a MIN or MAX by itself , like MAX([Months in Invoice Line Item Service Date]) , then I get a slightly different error: " Invalid cast from 'DateTime' to 'Double'. Couldn't store <date> in <bunch of numbers> Column. Expected type is Double. "  Is it truly not possible to calculate this? It seems like there should be at least  some way to accomplish this, but I still can't figure it out. (I tried also asking various AI chatbots but none of them were helpful...)

      3 months agolast reply 1 month ago
      2
               
      • Help and How-ToChevronRightIcon
                       
      Word-wrap for an indicator title
      Rose Holmes-Minton
      Rose Holmes-Minton
      Posted 2 months ago
      0
               
    • Mia Isaacson

      Mia Isaacson

      Dashboard script: automatically reset filters to default when a dashboard is opened
                                               

      Hey everyone 👋 Here's one that comes up more than you'd think. You've got a dashboard with filters. A user applies a bunch of selections, and the next time they (or someone else) opens it, those filters are still there from the last session. Depending on your use case, that might be exactly what you want... but sometimes it isn't. If you'd rather your dashboard always open in a clean, predictable state, with filters resetting to the defaults you set at design time, this dashboard script does exactly that. Every time the dashboard is activated, it removes whatever filters are currently applied and restores the defaults automatically. Here's the full script: dashboard.on("activated", (e, args) => { const dashFilters = args.dashboard.filters; dashFilters.$$items = dashFilters.$$items.splice(0, dashFilters.$$items.length); let filters = args.dashboard.defaultFilters; var options = { save: true, refresh: true, unionIfSameDimensionAndSameType: false, }; if (!Array.isArray(filters)) { filters = [filters]; } dashFilters.update(filters, options); }); Here's what each part is doing: Trigger This fires whenever the dashboard becomes active (when a user opens it or navigates to it). That's the moment everything below kicks off. dashboard.on("activated", (e, args) => { ... }) Step 1: Clear the current filters This grabs the live filter collection and empties it out completely — whatever the user had applied before is gone. const dashFilters = args.dashboard.filters; dashFilters.$$items = dashFilters.$$items.splice(0, dashFilters.$$items.length); Step 2: Grab the default filters defaultFilters is the filter state saved at design time. Whatever you configured as the intended starting point when you built the dashboard. const filters = args.dashboard.defaultFilters; Step 3: Apply the defaults This normalizes the filters into an array, then applies them back with save: true so the reset persists, and refresh: true so the data reloads immediately. The unionIfSameDimensionAndSameType: false setting makes sure it replaces rather than tries to merge with anything. var options = { save: true, refresh: true, unionIfSameDimensionAndSameType: false, }; if (!Array.isArray(filters)) { filters = [filters]; } dashFilters.update(filters, options); When would you actually use this? Shared dashboards where you don't want one user's filter selections to carry over for the next person who opens it Executive or presentation dashboards where the default view is intentional and should always be what people land on Dashboards embedded in portals or apps where a consistent starting state matters Anywhere you've had someone complain that the dashboard "looks different than it usually does" — often it's just leftover filters from a previous session One thing worth knowing The $$items approach in Step 1 is manipulating an internal Sisense array directly. The $$ prefix is a convention for internal Angular properties. It works well, but it's worth keeping in mind that if Sisense changes the internal structure down the road, that line could break without much warning. Something to keep an eye on if you're on this script after an upgrade. Hope this is useful for someone, and happy to answer questions if you run into anything! Mia from QBeeQ, a Sisense Gold Implementation Partner www.qbeeq.io

      2 months ago
      0
               
    …