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.io5Views0likes0CommentsIs 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?18Views0likes0CommentsTired 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!47Views1like1CommentWidget 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.io14Views1like0CommentsCheck 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...)25Views0likes0CommentsPivot2.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?118Views1like1CommentHow 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?240Views0likes0CommentsEnabling 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 appreciated228Views0likes1CommentHow 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 [email protected] www.causeandeffectstrategy.com204Views2likes0Comments