Asset Auditor
Asset Auditor provides complete transparency into the data assets across your Sisense environment, helping teams optimize performance, reduce unnecessary costs, and ensure high-quality analytics. With dedicated dashboards, organizations can see all data sources, track dependencies, and pinpoint inefficiencies in data models, dashboards, and widgets.
Release Notes for Asset Auditor can be found here.
Installation and configuration
The Asset Auditor plugin can be installed by an Admin. Note that the Asset Auditor has a different installation process than other QBeeQ plugins.
The Asset Auditor is supported for Sisense customers that have Sisense installations:
- On-prem and Cloud
- Self-managed or Managed Cloud
- Live connections, Sisense Elasticubes, and Sisense Build to Destination
Operating system support:
- Linux
Asset Auditor requires using the Custom Code feature, which is unavailable on Windows.
Extract files from the zip archive
Download the files from the QBeeQ Framework Dashboard and extract the files from the zipped folder. Verify you have the following files before starting:
QBeeQ Asset Auditor Code.sipynb
QBeeQ Asset Auditor.smodel
QBeeQ Asset Auditor Dashboards.dash
Enable Custom Code
To enable the Custom Code feature:
- Navigate to Admin Tab > Feature Management > Advanced Analytics.
- Toggle Custom Code to on and click Save.
Import the data model and delete table
To import the Asset Auditor data model:
- Locate the zip file and extract the
QBeeQ Asset Auditor.smodelfile
- Navigate to the Data Tab and import the data model without assets, using the above file.
- Open the model QBeeQ Asset Auditor
- Delete the
RESTAPIMetadataDataModelstable from the model
Import custom code notebook
To import the code into a notebook:
- Click + Custom at the top of the Data Model page
- Select Add Custom Code from the dropdown
- Select Import Notebook

Open custom code in the notebook
- Click + Custom at the top of the Data Model page
- Select Add Custom Code from the dropdown
- Select the Notebook named QBeeQ Asset Auditor Code
- Click Open in Jupyter Notebook link. The Jupyter Notebook will open in a new browser tab.

Replace code variables
It is required to replace the following variables so that the Asset Auditor has access to the assets in your Sisense instance. In the Transformation section of the Notebook, the following variables are visible.
licensing_email = 'yourlicenseemail@mail.com'
hostname = "https://test.com"
bearerToken = "test"
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + bearerToken
}
TimeoutRequest=100 # set timeout for API request(default is 100)
model_skip= 0 # set 1 to skip the section Models
dashboard_skip=0 # set 1 to skip the section Dashboards
plugin_skip=0 # set 1 to skip the section PluginsThe licensing_email will be read from the system and automatically populated.
- Replace
hostnamewith your Sisense URL
When replacing the hostname, the new URL should not include the slash
✅ "https://myinstance.sisense.com"
❌ "https://myinstance.sisense.com/"
- Replace
bearerTokenwith your Sisense bearer token - Navigate to Admin Tab > REST API
- If not already selected, click 1.0
- Scroll to locate and expand the
authenticationendpoints - Expand the
GET/authentication/tokens/apiendpoint - Click the Try it button
- Click the Execute button
- Copy the token from the response
"token": "this_is_the_sample_token”and replace in the Notebook
The Sisense bearerToken is not the same as your individual API key and must be generated from the REST API


Run code in notebook
- Run the code in the Notebook by clicking Run > Run All Cells from the top menu bar

- When completed successfully, save the Notebook

Depending on the number of Elasticubes and Dashboards on the server, executing code in the Notebook could take around 10 minutes to an hour, or more.
- Leave the Notebook tab, but leave it open. Do not close the tab.
Add custom code RESTAPIMetadataDataModels
- Click + Custom at the top of the Data Model page
- Select Add Custom Code from the dropdown
- Select the Notebook named QBeeQ Asset Auditor Code
- Click Done
- Hover over the table New Custom Code newNotebook, and click the three-dot menu
- Rename the new table as RESTAPIMetadataDataModels
Build the Elasticube
- Build the Elasticube and select Replace All
The RESTAPIMetadataDataModels table does not need to be connected to any of the other tables within the model.
Import dashboards
- Locate the zip file
QBeeQ Asset Auditor Dashboards.dash
- Create a new folder, named QBeeQ Asset Auditor
- Hover over Dashboards list in the home page and click the + symbol.
- You can also right-click anywhere in the dashboards list, or click on the menu of one of your existing folders to import a dashboard into a folder.
- Select Import Dashboard from the menu.
- Select
QBeeQ Asset Auditor Dashboards.dashfile and click OK
Troubleshooting
Below are troubleshooting tips for common issues you may experience when installing and configuring the Asset Auditor. If you are unable to resolve issues, contact support@qbeeq.io
Troubleshooting Scenarios and Steps
bearerToken has expired
If the code worked before but later started showing format-related errors, the issue might be an expired token. Try regenerating the token and updating it in the Notebook before running the code again.
Sisense Custom Code Notebook has timed out
If the build error shows a timeout message for 900 seconds and the cube takes more than 15 minutes to build, you need to adjust the settings:
- Go to Admin tab > Feature Management > 5 clicks on Sisense Logo > Build section.
- Change the customCodeNotebookTimeoutSec.value to a higher value (1880).
- Click Save
Code does not run successfully in Jupyter Notebooks
If the code fails to run, update the TimeoutRequest variable in the Transformation section. This will increase the timeout for API requests.
Only change the TimeoutRequest variable if you encounter an API-related error
The Jupyter Notebook crashes on the first run
If the notebook crashes on the first run, set one or more of the following variables to identify the problematic section
model_skip
dashboard_skip
plugin_skip
The default is set to 0 and will run all sections of the code. Setting the value to 1 will ignore/skip that section.
Using the Asset Auditor Dashboards
The Asset Auditor was built as a diagnostic tool to help users visualize and understand the data assets within their Sisense environment. The Asset Auditor includes seven different dashboards that provide information on the usage and utilization of these data assets:
- Overview
- Data Models
- Data Models Utilization
- Dashboards
- Dashboards Validation
- Plugins
- Plugins Validation
- Users
- Users Validation
Each asset has two dashboards:
- The first dashboard provides a general overview of what is happening with that asset across the environment/tenants.
- The second dashboard identified areas of underutilization, errors, and issues. This dashboard also includes recommendations/next steps for taking action to address the above areas.
Interpreting the Asset Auditor Dashboards
The Asset Auditor Dashboards display both Sisense-specific terminology (such as connector type and data model type) and custom terms defined by our team. These labels are designed to help users accurately interpret the underlying data, configurations, and system relationships shown across dashboards.
Data Models
Term | Description | Notes |
Data Model Type | Describes the method in which data is imported, stored, and accessed | A data model can be either extract or live
In extract data models, datasets are either extract or custom
In live data models, datasets are either live or custom, meaning data is accessed directly from the source in real time |
Connector Type | The component that enables access to a specific data source | |
Utilization | Utilization measures how many columns from a data model are represented across the dashboard widgets | |
Used | A data model that has been built, and has been connected to a dashboard | |
Unused | Data models are considered unused when they are not connected to a dashboard | ⚠️ If a data model is used as a data source for another data model, it is still considered unused |
Empty | A data model is considered empty when they have been created, but not built | ⚠️ Data models in draft status are not shown. |
Tables
Term | Description | Notes |
Utilization | Determined by the percentage of a table’s columns that are represented on dashboards | |
Type | extract, custom, live, custom_code | |
Unused | Tables are considered unused when no columns within the table are represented on dashboards | ⚠️ Tables used as data sources for custom queries are not considered used, but should not be deleted. |
Columns
Term | Description | Notes |
Utilization | Utilization measures how many columns from a data model are represented across the dashboards and widgets | |
Unused | Columns are considered unused when they are not referenced in any dashboard widgets, filters, or formulas | ⚠️ Columns may still be used in custom queries |
Dashboards
Term | Description |
Empty | Dashboard are considered empty when there are no widgets. Dashboards may or may not have a data source |
Data Reference Errors | Data reference errors occur when a dashboard or its widgets points to missing, renamed, or invalid fields in a data model |
Data Reference Errors - Data Model | Data model reference errors occur when the data model connected to a dashboard is no longer available (deleted, unpublished, etc.) |
Data Reference Errors - Tables & Columns | Table and column reference errors occur when the tables and/or columns are missing, renamed, or invalid |
Data Reference Errors - Disabled Plugins | |
Data Reference Errors - Missing Plugins |
Widgets
A widget is an element on a dashboard that visually represents data or provides interactivity. Widgets are often powered or extended by plugins to add extra visualization types or functions.
If you utilize widgets/plugins from other providers beyond Sisense native or QBeeQ, the classification for Widget or Functional Plugin may need to be adjusted in the custom query for the Plugins table. Please reach out to support@qbeeq.io for assistance.
Term | Description |
Widget Reference Errors - Disabled Plugins | See Plugin States |
Widget Reference Errors - Missing Plugins | See Plugin States |
Plugins
A plugin is a non-native feature or extension installed via file management and enabled through the Add-ons page in Sisense. Plugins enhance or modify the core functionality of the Sisense platform, its dashboards, and/or its widgets.
Plugin Sources
Plugins can come from Sisense or third parties (custom/external), and the source is identified in the plugin’s metadata as isSisense .
Term | Description | Example |
Sisense Plugin | Official plugin provided and maintained by Sisense | dynamicElasticubes |
Plugin | Custom or external plugin developed outside of Sisense (Partner, Community, etc.) | QBeeQAdvancedIndicator |
Plugin Types
Plugins can be categorized into two types: Functional and Widget.
Term | Description | Example |
Functional | Extends Sisense capabilities or actions beyond visualization — e.g., adds data manipulation, automation, or interactivity features to the environment. | Action buttons, custom scripts, data refresh triggers |
Widget | Adds or enhances visualization options directly on dashboards — e.g., new chart types or display components. | Custom chart, KPI card, map visual |
Plugin States
Plugins can exist in different states depending on whether they’re installed, enabled, and connected to a dashboard, each affecting visibility and potential viewer errors.
State | Description | Visible to Designer? | Visible to Viewer? |
Installed | Installed and enabled on the Add-ons page | ✅ Yes | ✅ Yes |
Active | Installed and enabled on the Add-ons page, and used on at least one dashboard | ✅ Yes | ✅ Yes |
Unused | Installed and enabled on the Add-ons page, but not used on any dashboard | ✅ Yes | ❌ No |
Disabled | Installed but disabled on the Add-ons page; does not appear as an option in the widget editor | ❌ No | ❌ No |
Missing | Referenced by a dashboard but not installed; causes an error for viewers | ❌ No | ⚠️ Yes |
Editing the Asset Auditor Dashboards
The Asset Auditor dashboards can be edited by users with a Sisense Admin or Designer role.
This is beneficial so that users can make changes to dashboards to better suit specific use cases. We have provided the tables included in the model, as well as canonical column names and descriptions for the data in the QBeeQ Asset Auditor data model.
It is recommended to create your own dashboards when creating new charts so that when dashboards are updated by QBeeQ, bespoke charts do not get removed.
Column_Types
Column Name | Definition | Notes |
ColumnType | A type property specifying the data type of the column using an int code | |
ColumnTypeName | The plaintext translation of the assigned data type int code |
Dashboard_Share
Column Name | Definition | Notes |
TenantID | Identifier of the tenant or organization to which the user belongs | Only relevant for a multi-tenant environment
ℹ️ This field is hidden in the data model |
DashboardID | The unique ID of the dashboard | ℹ️ This field is hidden in the data model |
DashShareType | Indicates if a Dashboard is shared with a user and/or a user group | group, user |
DashShareRuleIndex | Defines the index assigned to each user role within the data models sharing rules | If a user has multiple roles, an index is assigned based on the following order:
Can Edit = 1
Can Read = 2
Can Use = 3 |
DashShareRule | Indicates the level of access the Shared User received.
https://docs.sisense.com/main/SisenseLinux/sharing-dashboard.htm | Designer, Viewer, Owner, Co-Owner |
DashShareGroupID | The unique ID of the group | ℹ️ Available when DashShareType=group |
DashShareUserID | The unique ID of the user from shared group or direct users | |
DashShareID | The unique ID of hte | 🛑 If DashShareType=group this field contains DashShareGroupID, if DashShareType=user then it contains DashShareUserID |
DashShareName | 🛑If DashShareType=group this field contains name of the group, if DashShareType=user then it contains user email | |
ShareKey | The concatenation of DashboardID and DashShareID | |
IsMainRole | A flag that defines the the priority of the role based on DashShareRuleIndex |
Dashboards
Column Name | Definition | Notes |
DashboardID | The unique ID of the dashboard | |
TenantID | Identifier of the tenant or organization to which the user belongs | Only relevant for a multi-tenant environment |
TenantName | The name of the tenant | |
DashboardName | The name of the dashboard | |
DashboardOwner | The plaintext email address of the dashboard owner | |
DashboardEmptyCheck | A flag that indicates if the dashboard is empty | false: the dashboard contains widgets
true: the dashboard contains no widgets |
DashboardLink | The HTML version of URL associated with the dashboard, clickable when added to a table |
Dashboards_Validation
Column Name | Definition | Notes |
TenantID | Identifier of the tenant or organization to which the user belongs | Only relevant for a multi-tenant environment
ℹ️ This field is hidden in the data model |
DashShareUserID | The unique ID of the user | |
DashboardID | The unique ID of the dashboard | |
DashboardLink | The HTML version of URL associated with the dashboard, clickable when added to a table | |
DataModelID | The unique ID of the data model | |
DataModelLink | The HTML version of URL associated with the data model, clickable when added to a table | |
ModelIsShared | A flag that indicates if the model is shared to a user that has access to the dashboard | false: the model has not been shared
true: the model has been shared |
DataModels
Column Name | Definition | Notes |
TenantID | Identifier of the tenant or organization to which the user belongs | ℹ️ This is only relevant for a multi-tenant environment |
TenantName | The name of the tenant | |
DataModelID | The unique ID of the data model | |
DataModel | The name of the data model | |
DataModelLink | The HTML version of URL associated with the data model, clickable when added to a table | |
DataModelType | The type of the data model in Sisense
| extract, live, custom |
IsUnusedModel | A flag that indicates if the model is unused |
Groups
Column Name | Definition | Notes |
GroupID | The unique ID of the user group | |
GroupName | The name of the user group | |
GroupDefaultRole | The default role assigned to the group | |
GroupCreated | The timestamp when the user group was created | |
GroupLangauge | The default language for a group, set by an Admin | |
TenantID | Identifier of the tenant or organization to which the user belongs | ℹ️ This is only relevant for a multi-tenant environment |
GroupThemeId | The default theme for a group, set by an Admin |
License
The information in this table is sourced from the server’s License Utilization data, which can be found in Admin > License Utilization. This area of Admin is accessible to System Administrators only.
Roles allocated to a tenant count toward the total number of utilized licenses, even if the corresponding users have not yet been created within the tenant.
Column Name | Definition | Notes |
LicenseMail | The email address of the license holder | |
LicenseExpirationDate | The date when your Sisense license expires | |
Role | Category of user roles associated with licensing (Admin, Designer, Viewer) | Administrator licenses include: Admin, Sys.Admin, and Data Admin
Designer licenses include: Designers and Data Designers |
LicenseMax | The maximum number of licenses available | |
LicenseInUse | The number of licenses allocated/assigned to users | ⚠️ Admin roles allocated to a tenant count toward the total number of utilized licenses, even if the corresponding admin accounts have not yet been created within the tenant |
Model_Validation
Column Name | Definition | Notes |
TenantID | Identifier of the tenant or organization to which the user belongs | ℹ️ This is only relevant for a multi-tenant environment |
ElastiCubeShareUserID | The unique ID of the user | |
DataModelID | The unique ID of the data model | |
DataModelLink | The HTML version of URL associated with the data model, clickable when added to a table | |
DashboardID | The unique ID of the dashboard | |
DashboardLink | The HTML version of URL associated with the dashboard, clickable when added to a table | |
IsDashSharedWithUser | A flag indicating whether the dashboard is shared with a user who has access to the related data model | 0: a user has access to the data model but the corresponding dashboard is not shared
1: the dashboard is shared with the user |
Models_Shares
Column Name | Definition | Notes |
TenantID | Identifier of the tenant or organization to which the user belongs | ℹ️ This is only relevant for a multi-tenant environment
|
DataModelID | The unique ID of the data model | |
ElastiCubeShareGroupID | The unique ID of the group | |
ElastiCubeShareRule | Indicates the access permissions for a data model | Can Use, Can Edit, Can Read |
ElastiCubeShareRuleIndex | Defines the index assigned to each user role within the data models sharing rules | If a user has multiple roles, an index is assigned based on the following order:
Can Edit = 1
Can Read = 2
Can Use = 3 |
ElastiCubeShareType | Indicates if an Elasticube is shared with a user and/or a user group | user, group |
ElastiCubeShareUserID | The unique ID of the user | |
ElastiCubeShareID | The unique ID of the the shared entity in an ElastiCube | If ElastiCubeShareType = group, this field contains the ElastiCubeShareGroupID
If ElastiCubeShareType = user, it contains the ElastiCubeShareUserID |
ElastiCubeShareName | The name of the shared entity in an ElastiCube | If ElastiCubeShareType=group this field contains name of the group
If ElastiCubeShareType=user then it contains user email |
ShareKey | Combination of DataModelIDand ElastiCubeShareID | |
IsMainRole | A flag that defines the the priority of the role based on ElastiCubeShareRuleIndex |
Plugins
If you utilize widgets/plugins from other providers beyond Sisense native or QBeeQ, the classification for Widget or Functional plugins may need to be adjusted in the custom query for the Plugins table.
Please reach out to support@qbeeq.io for assistance.
Column Name | Definition | Notes |
PluginName | The name of the plugin defined by the plugin author | |
PluginActive | Indicates whether the plugin is enabled (active) | true: Plugin is enabled
false: Plugin is not enabled |
PluginVersion | The version of the plugin currently installed | |
isSisense | Specifies whether the plugin is an official Sisense plugin | Sisense Plugin: A plugin provided by Sisense
Plugin: A plugin provided by a third-party or a custom plugin |
pluginType | Specifies the plugin type
| widget: A visualization-related plugin based on a predefined list
functional : All other types of plugins |
nativeWidget | A flag that indicates if the widget is provided natively by Sisense | 0: Indicates a non-native widget
1: Indicates a native widget |
Tables_and_Columns
Column Name | Definition | Notes |
URL | The plaintext version of URL associated with the data model | |
TenantID | Identifier of the tenant or organization to which the user belongs | ℹ️ This is only relevant for a multi-tenant environment
|
DataModelID | The unique ID of the data model | |
DataModel | The name of the data model | |
Database | The name of the database in the source connection, if available | |
DatasetName | Full name of the data set as defined in Sisense | |
DatasetType | Type of the dataset
| live: Live connections for data models
extract: Data imported (ex. Excel or DB)
custom: Custom tables in the model created by data designer |
Dataset | The source of the data within the data model | A data model can include multiple sources |
SchemaName | The name of the schema in the source connection, if available | |
TableName | The name of the table in the data model | |
TableSourceName | The name of the table in the source connection, if available | Depending on the data model, the table name may appear as either readable text or an ID |
TableID | The unique ID of the table | |
ColumnID | The unique ID of the column | |
ColumnName | The name of the column in the table in the data model | |
ColumnSourceName | The name of the table in the source table, in the source connection, if available. | For some data sources, this value may appear as an ID, instead of plain text |
ColumnType | A type property specifying the data type of the column using an int code | |
key | The concatentation of DataModel, TableName and ColumnName for relationship between tables in the data model | |
RelationFlag | Shows whether the column is part of any relationship in the data model | 0: The column has no a relation(s)
1: The column has a relation(s) |
EmptyDataModel | A flag that indicates if the data model is empty | 1: The data model is empty |
Tenants
Column Name | Definition | Notes |
TenantID | Identifier of the tenant or organization to which the user belongs | ℹ️ This is only relevant for a multi-tenant environment |
TenantDefault | A flag that indicates the main (default) tenant | |
TenantName | The name of the tenant |
Users
Column Name | Definition | Notes |
UserID | Unique identifier for the user record | |
UserRole | The specific role assigned to this user | Sys.Admin, Admin, Designer, Viewer |
UserRoleGroup | The default role assigned to the user group, if available | |
UserCreated | Timestamp when the user account was first created | |
UserLastUpdated | Timestamp when any attribute of the user record was last modified | |
TenantID | Identifier of the tenant or organization to which the user belongs | ℹ️ This is only relevant for a multi-tenant environment |
UserEmail | The email of the user in the user record | |
UserFirstName | The first name of the user in the user record | |
UserLastName | The last name of the user in the user record | |
UserLanguage | The language selected by the user | |
UserLastLogin | Timestamp of the user’s most recent successful login | |
UserLastActivity | Timestamp of the user’s last activity | |
UserDomain | The email domain associated with the user in the user record |
Users_with_Groups
Column Name | Definition | Notes |
TenantID | Identifier of the tenant or organization to which the user belongs | This is only relevant for a multi-tenant environment |
UserID | Unique identifier for the user record | |
UserRole | The specific role assigned to a unique user | Sys.Admin, Admin, Designer, Viewer |
UserCreated | The timestamp when the user was created | |
UserLastUpdated | The timestamp when the user was last updated | |
UserGroup | The user group(s) that the user is added to by the admin | |
UserEmail | The email of the user in the user record | |
UserFirstName | The first name of the user in the record | |
UserLastName | The last name of the user int eh record | |
UserLanguage | The language selected by the user | |
UserLastLogin | The timestamp of the user’s most recent successful login | |
UserLastActivity | Timestamp of the user’s last activity |
Widgets
Column Name | Definition | Notes |
DashboardID | The unique ID of the dashboard | |
TenantID | Identifier of the tenant or organization to which the user belongs | ℹ️ This is only relevant for a multi-tenant environment |
WidgetLink | The HTML version of URL associated with the widget, clickable when added to a table | |
URL | The plaintext version of the URL associated with the widget | |
ObjectType | Type of the object on the dashboard | Widget: a widget from the dashboard
Filter: a filter from dashboard filter panel
⚠️ The Filter object type is being filtered out from dashboard content, however, it is available to use when adjusting or creating your own charts |
Widgetid | The unique ID of a widget | |
WidgetType | Indicates the type of widget. Values are based on Sisense and custom naming.
| Sample values:
Filter Filter from dashboard filter panel
indicator Sisense indicator widget
pivot2 Sisense pivot table widget |
QBeeQWidget | A flag that indicates if the plugin is by QBeeQ
| 0: The plugin is provided by another vendor or custom
1: The plugin is by QBeeQ |
DatasourceName | The name of the data model(s) that are referenced as data sources for widgets on a dashboard. | ℹ️ A dashboard can have many data sources, but a widget can only have one. |
Field | NEED DESCRIPTION | |
Dim | The name of the dimension that was used in the widget query | |
TableName | The name of the table from data model that was used in the widget | |
ColumnName | The name of the column from table from data model in the widget | |
ColumnKey | The concatenation of the TableName and ColumnName | |
key | The concatenation of DatasourceName, TableName and ColumnName for relationship between tables in the data model | |
ReferencingMissingColumnOrTable | A flag that indicates if the column or table used in the widget/filter is missing from the data model
| 0:
1: A missing value is referenced |
ReferencingMissingDataSource | A flag that indicates if the data model used in the widget/filter is missing | 0:
1: The data model is missing |
DashboardHasError | A flag that indicates if the dashboard contains at least one error related to missing data references | 0: Dashboard has no errors
1: Dashboards has at least one error |
DashboardErrorMessage | The message that describes the type of dashboard error
| This message is visible when DashboardHasError=1
Possible messages:
Empty Dashboard, Deleted Data Model, Deleted Table or Column |
nativeWidget | A flag that indicates if the widget is provided natively by Sisense | 0: Indicates a non-native widget
1: Indicates a native widget |
IsInPluginList | A flag that indicates if the widget is present in the Plugins table | 0: Not present in table
1: Present in table |
Last updated on August 4, 2021