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
    • TagsChevronRightIcon
    dashboard design
    • Rose Holmes-Minton

      Help and How-To

               
      Rose Holmes-Minton
      Posted 1 month ago • Last reply yesterday at 3:14 PM
      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
               
    • Jake Raz

      Help and How-To

               
      Jake Raz
      Posted 1 month ago • Last reply 1 week ago
      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...)

                                             
      1
               
    • Mia Isaacson

      Help and How-To

               
      Mia Isaacson
      Posted 1 month ago
      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

                                             
      0
               
    • Mia Isaacson

      Help and How-To

               
      Mia Isaacson
      Posted 1 month ago • Last reply 1 month ago
      Tired of stacking indicator widgets? There's a better way.
                                                       

      If you've ever found yourself stacking indicator widget after indicator widget just to show a handful of KPIs, you're not alone. It's a common dashboard design (and performance) frustration, and it's exactly what the KPI Card from QBeeQ was built to solve. What is the KPI Card? The KPI Card is a free, partner-supported plugin from QBeeQ that provides an alternative to the native indicator widget, but with a lot more flexibility. Where Sisense's built-in indicator is limited to one primary and one secondary metric, the KPI Card lets you consolidate multiple metrics, trend indicators, and time-series sparklines into a single compact widget. The result is cleaner dashboards, less cognitive overload, and more context for your end users without adding more widgets. What it can do Feature Description Multiple Metrics Display primary and secondary values together in one widget Trend Indicators Up/down icons with conditional color formatting to show direction at a glance Sparklines Embed mini line, area, or bar charts directly in the widget — no separate chart needed Tooltips Hover over any sparkline point to surface deeper data instantly Click-to-Filter Click a data point or drag a range to filter your entire dashboard Jump-to-Dashboard Link directly to a related dashboard from a primary value or sparkline data point Full Color Customization Match your dashboard's branding with per-value color control and conditional formatting A few use cases where it shines Sales & revenue tracking — Show revenue, growth %, and a monthly trend sparkline in one card Operations dashboards — Monitor multiple performance metrics side-by-side without the clutter Finance reporting — Surface current period values alongside prior period comparisons and directional trends Embedded analytics — Give end users more context in less space, especially in tighter dashboard layouts Before and after The top row uses the native Sisense indicator chart and displays the primary and secondary metrics.  The bottom row uses the KPI Card to show the same metrics, plus additional context using sparklines, trend metrics, trend icons, and Jump to Dashboard It's free — part of the QBeeQ Starter PowerUp The KPI Card is included in QBeeQ's Starter PowerUp , a free bundle of 10 plugins built specifically for Sisense. It's available at no cost and is actively maintained and supported by the QBeeQ team. 👉 Get the free Starter PowerUp   🔗 KPI Card Marketplace Listing   📄 KPI Card Documentation   Have questions or want to share how you're using it? Drop a comment below! 

                                             
      1
               
    • Mia Isaacson

      Help and How-To

               
      Mia Isaacson
      Posted 1 month ago
      Widget script: hide value labels and empty legend items on native bar and column charts
                                                       

      Hey everyone 👋 Ever built a stacked bar or column chart and found yourself wishing you could just... turn the labels off? Maybe you've got a lot of segments, and they're all squishing together, or the chart just doesn't have quite enough room to breathe in your dashboard layout, and the labels end up overlapping and making things harder to read rather than easier. Or, does it bother you that your legend still shows entries for categories that have no data at all for certain dimension values? So you've got these ghost entries sitting in the legend that don't correspond to anything visible in the chart. Sisense doesn't have a native toggle for either of these, so here's a widget script that handles both. It works on bar and column charts (stacked or single value) and does two things: Hides the value labels from displaying on the bars or columns Removes any series from the legend if all of its values are null or zero widget.on("beforeviewloaded", function(w, args){ var allEmpty = arr => arr.every(v => v.y === null || v.y === 0); for (e in args.options.series) { var serie = args.options.series[e]; if (allEmpty(serie.data)) { serie.showInLegend = false; } } }); A few situations where this comes in handy: You have a stacked chart with a lot of segments where the labels are colliding with each other Your dashboard is on the tighter side, and there just isn't room to make the chart large enough for labels to display cleanly Your legend is cluttered with entries for categories that have no data for certain dimension values, which can confuse users into thinking something is missing The chart is more of a visual overview and the exact values aren't the point, users can always hover for tooltips anyway You just prefer a cleaner, less noisy look overall Nothing groundbreaking, just a handy little script if you've ever hit this wall.  Mia from QBeeQ, a Sisense Gold Implementation Partner www.qbeeq.io

                                             
      0
               
    • Tim von Ahsen

      Help and How-To

               
      Tim von Ahsen
      Posted 2 months ago • Last reply 2 months ago
      Pivot2.0 JavaScript Column Width
                               

      My PivotTable has 3 columns. I want javascript to set the width of Column2 to 10px. I've already changed the contents of Column2 to all empty strings. I tried DOM-manipulation. The Pivot DOM structure is complicated; even if I succeed, the resulting code will be hard to maintain and vulnerable to future changes by Sisense. Has someone done this before, either using DOM-manipulation or a better way?

                                             
      1
               
    • bminehart

      Help and How-To

               
      bminehart
      Posted 2 months ago
      Anyone using Dashboard Co-Ownership Feature?
               

      We've left the co-ownership feature turned off since it was first introduced but now I'm getting requests to consider enabling it. Is anyone on this forum using co-ownership in theri Sisense tenant? Any feedback or advice to share?

                                             
      0
               
    • Astroraf

      Help and How-To

               
      Astroraf
      Posted 2 months ago
      How to Break By with Two Values
                                       

      I saw this post DRay​   Benji_PaldiTeam​ but didn't seem to be resolved.  Breakby with multiple Values | Sisense Community Is there a solution to this? I am trying to do a bar chart for the first value and second value to be a line chart with a breaky by. Is there a way to achieve this?

                                             
      0
               
    • Luke Flett

      Help and How-To

               
      Luke Flett
      Posted 3 months ago • Last reply 2 months ago
      Enabling Jump to Dashboard on Left-Click in Sisense Column Charts
                       

      Afternoon Sisense Community, In a Column chart, a user would like the ability to open a jump to dashboard by left-clicking on a column, rather than the current requirement to right-click for this functionality. Is it possible to enable this feature for left-click actions? I’ve looked at something like seen here, but I couldn't get it to working JTD:  https://community.sisense.com/kb/widget_and_dashboard_scripts/customize-onclick-of-column-chart/9245 Any advice on getting a JTD dashboard working on a column chart via left click would be greatly appreciated

                                             
      1
               
    • Astroraf

      Help and How-To

               
      Astroraf
      Posted 3 months ago
      How to add Scientific Units to a pivot table
                                       

      Hello Sisense world, Sometimes you are working with scientific units or any units for that matter that are not available in the number formatting within Sisense. i.e. Currency values, number or percentage. With the widget edit script provided below you can add a scientific unit or any type of symbol that lets your audience know what the measure/value is being calculated by.   const myTarget = { type: ['value'], values: [ { title: 'Total Quantity' // desired column } ] }; widget.transformPivot(myTarget, function(metadata, cell) { if (cell.value !== null && cell.value !== undefined) { cell.content = cell.value + " J⋅s"; } }); Here at Cause and Effect we provide a lot of useful solutions to enhance your analytics with Sisense, feel free to reach out to us to enhance your Models, Dashboard, Embedded Dashboards, etc. We have helped out hundreds of clients to produce dashboards that are easily digestable to their audience and bring their KPI's to life.   Rafael Ferreira Cause + Effect Strategy rferreira@cestrategy.us www.causeandeffectstrategy.com

                                             
      0