Dashboard Design Guard - A plugin for enforcing dashboard best practices and organizational standards
The Dashboard Design Guard plugin enforces dashboard design best practices and organizational policies by placing configurable guardrails directly into the dashboard creation experience.
Overview
Dashboard Design Guard is a plugin that enforces dashboard design best practices and organizational policies. It's built to help maintain clean, performant, and user-friendly dashboards by placing configurable guardrails directly into the dashboard creation experience.
Dashboard designers often unintentionally overload dashboards with too many widgets, deep filter hierarchies, or multiple heavy pivot tables. While this might seem like a way to provide rich insights, it can lead to slow load times, rendering issues, and a confusing user experience. Over time, these design patterns contribute to poor adoption, performance bottlenecks, and increased maintenance overhead. This plugin helps address these challenges by allowing admins to define three design thresholds:
- number of widgets
- number of pivot tables
- depth of cascading filter levels
and enforce them automatically. Instead of relying solely on documentation or training to drive best practices, the plugin warns or restricts certain UI actions (create new widget, duplicate existing widget, etc) when limits are reached. This add-on can be set to either display a warning message, disable (grey out) or hide the UI controls depending on the configuration.
Disable | |
Remove | |
Warn |
The Dashboard Design Guard plugin acts as a lightweight governance layer that:
- Prevents overly complex dashboards that degrade performance
- Reduces manual oversight by automatically enforcing design standards
- Promotes consistent, performance-aware design across the organization
- Provides visual feedback when limits are exceeded
Additionally, when the "warn" mode is used, the warning pop-up follows the same color and font settings as defined in your Look & Feel configurations. This ensures that the pop-up integrates seamlessly with your theme, keeping a consistent and visually cohesive experience.
Limitations
The Dashboard Design Guard is a client-side plugin and works entirely within the user's browser. This means that:
- The plugin does not enforce restrictions at the server level or during REST API calls.
- Users with technical knowledge (e.g., developers, users with some experience in DOM manipulation) could potentially bypass some restrictions by modifying the DOM through the browser console.
- Hiding the UI elements may offer stronger deterrence for more technical users than greying them out (see the Configurations section below), although neither method fully prevents client-side overrides.
It should be seen as a helpful UX guardrail, not a security mechanism.
Installation instructions
- Download and unzip the plugin zip file. Extract the files directly (do not extract into a new folder); the plugin files are already organized within a folder in the zip file.
- Upload the DashboardDesignGuard folder to the plugins directory on your Sisense server (/opt/sisense/storage/plugins).
- Check the Add-ons page in the Admin tab (under Server & Hardware) and make sure the new plugin is listed and enabled.
- Edit the configuration config.js file to match your dashboard governance policies.
This can be done before or after uploading the plugin.
Configurations
Threshold Settings
These configurations define the limits you want to enforce on dashboard design:
- maxNumberOfWidgets: The maximum number of widgets allowed on a single dashboard. This helps prevent overcrowded layouts that can negatively impact performance.
- The default value is 10 (Sisense-recommended limit on widget count).
- The default value is 10 (Sisense-recommended limit on widget count).
- excludeWidgetTypeList: A list of widget types that should not count toward the widget total. To ensure performance-related limits are effective, only non-querying widgets (e.g., Text Widget, Tabber) should be excluded.
- The default values are ['richtexteditor', 'WidgetsTabber'], which are both non-querying widget types.
- The default values are ['richtexteditor', 'WidgetsTabber'], which are both non-querying widget types.
- maxNumberOfPivots: The maximum number of pivot tables allowed per dashboard. Pivot tables are the most resource-intensive widget type, so setting a limit helps maintain optimal dashboard performance.
- The default value is 2 (Sisense-recommended limit for pivot tables).
- The default value is 2 (Sisense-recommended limit for pivot tables).
- maxNumberOfCascadingFilterLevels: The maximum number of fields allowed in a set of cascading/dependent filters. This prevents excessive nesting in filters, which can degrade dashboard interactivity.
- The default value is 10 (Sisense-recommended limit for dependent filters).
Enforcement behavior settings
These configurations determine what happens when a threshold is reached and how restrictions are communicated, whether by hiding the options entirely, greying them out with informative tooltips, or simply displaying a pop-up warning (no UI restrictions). For each of the following options, set to "disable" to grey out the button or menu item, "remove" to hide it entirely, or "warn" to display a warning message, when the corresponding limit is reached:
- widgetButtonMode: Controls the “+ Widget” button in the dashboard toolbar.
- duplicateOptionMode: Controls the “Duplicate” option in the widget menu.
- pivotOptionMode: Controls the “Pivot” option in the widget type dropdown.
- createButtonMode: Controls the “Create” and “Advanced Configuration” buttons in the "New Widget" pop-up window, and the “Apply” button in the widget editor.
- filterAddButtonMode: Controls the “+” button used to add dependent filter levels.
Best Practice: For most users, greying out UI elements with an informative tooltip is the preferred approach. It clearly communicates why an action is unavailable, providing a more user-friendly and less disruptive experience. For more technical users, hiding the control altogether offers a stronger visual deterrent, as hidden elements are less likely to be discovered or restored using browser developer tools (see the Limitations section above).
Additional settings for "Warn" mode
If you prefer to use the "warn" mode, these additional configurations can be used to define the frequency and the content of the pop-up message:
- guardConfig.showWarningOnEveryClick: determines whether the pop-up warning will appear every time the user clicks the relevant button or menu option, even if the threshold has already been reached. Note: The “shown” flag is reset when the page is refreshed, so warnings can appear again on a new page load.
- guardConfig.widgetCountWarningMessage: defines the message displayed when the widget limit is reached or exceeded.
- guardConfig.pivotCountWarningMessage: defines the message displayed when the pivot table limit is reached or exceeded.
- guardConfig.filterLevelWarningMessage: defines the message displayed when the nested filter level limit is reached or exceeded.
For the content of the warning messages, placeholders can be used to dynamically display relevant values. These special keywords are replaced with actual values at runtime:
- reachedOrExceeded → replaced with "reached" when the threshold is met, or "exceeded" when it is surpassed.
- currentWidgetCount → replaced with the current number of widgets on the dashboard.
- currentPivotCount → replaced with the current number of pivot tables on the dashboard.
- currentFilterLevelCount → replaced with the current number of nested filter levels.
You can also reference the policy thresholds defined in the config object using these variables:
- ${guardConfig.maxNumberOfWidgets} → the maximum allowed number of widgets per dashboard.
- ${guardConfig.maxNumberOfPivots} → the maximum allowed number of pivot tables per dashboard.
- ${guardConfig.maxNumberOfCascadingFilterLevels} → the maximum allowed depth of dependent filter levels.
Note: HTML tags are supported in all messages.
Guardrail explanations and examples
When the widget count threshold is reached.
1. The "+ Widget" button is greyed out (with an explanatory tooltip on hover), hidden, or shows a warning message when clicked.
Disable | |
Remove | |
Warn |
2. Widgets' "Duplicate" button is greyed out (with an explanatory tooltip on hover), hidden, or shows a warning message when clicked.
Disable | |
Remove | |
Warn |
When the pivot tables threshold is reached.
1. When creating a new widget, the "Advanced Configuration" link and the "Create" button in the "New Widget" pop-up window are greyed out (with an explanatory tooltip on hover), hidden, or show a warning message, when Pivot table is selected as the new widget's type.
Disable | |
Remove | |
Warn |
2. Existing Pivot tables' "Duplicate" button is greyed out (with an explanatory tooltip on hover), hidden, or shows a warning message when clicked.
Disable | |
Remove | |
Warn |
3. The "Pivot" option is greyed out or hidden in the widget type dropdown, preventing users from changing an existing widget into a Pivot table, or shows a warning message when clicked.
Disable | |
Remove | |
Warn |
When either or both the widget or pivot table thresholds are reached.
If users try to create a new widget or Pivot table using the new widget direct URL, the "Apply" button is greyed out (with an explanatory tooltip on hover) or hidden, preventing them from saving the widget, or shows a warning message when clicked.
Disable | |
Remove | |
Warn |
When the dependent filter's threshold is reached.
The “+” button used to add dependent filter levels is greyed out (with an explanatory tooltip on hover), hidden, or shows a warning message when clicked.
Disable | |
Remove |
|
Warn |
Disclaimer
This post outlines a potential custom workaround for a specific use case or provides instructions regarding a specific task. The solution may not work in all scenarios or Sisense versions, so we strongly recommend testing it in your environment before deployment. If you need further assistance with this, please let us know.