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

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:

  1. Navigate to Admin Tab > Feature Management > Advanced Analytics.
  1. Toggle Custom Code to on and click Save.

Import the data model and delete table

To import the Asset Auditor data model:

  1. Locate the zip file and extract the QBeeQ Asset Auditor.smodel file
  1. Navigate to the Data Tab and import the data model without assets, using the above file.
  1. Open the model QBeeQ Asset Auditor
  1. Delete the RESTAPIMetadataDataModels table from the model

Import custom code notebook

To import the code into a notebook:

  1. Click + Custom at the top of the Data Model page
  1. Select Add Custom Code from the dropdown
  1. Select Import Notebook
 
Notion image

Open custom code in the notebook

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

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 Plugins
 
ℹ️

The licensing_email will be read from the system and automatically populated.

  • Replace hostname with your Sisense URL
    • ⚠️

      When replacing the hostname, the new URL should not include the slash

      ✅ "https://myinstance.sisense.com"

      ❌ "https://myinstance.sisense.com/"

  • Replace bearerToken with your Sisense bearer token
    • ⚠️

      The Sisense bearerToken is not the same as your individual API key and must be generated from the REST API

      1. Navigate to Admin Tab > REST API
      1. If not already selected, click 1.0
      1. Scroll to locate and expand the authentication endpoints
      1. Expand the GET/authentication/tokens/api endpoint
      Notion image
      1. Click the Try it button
      1. Click the Execute button
      1. Copy the token from the response "token": "this_is_the_sample_token” and replace in the Notebook
Notion image

Run code in notebook

  1. Run the code in the Notebook by clicking Run > Run All Cells from the top menu bar
Notion image
  1. When completed successfully, save the Notebook
    1. Notion image
ℹ️

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.

  1. Leave the Notebook tab, but leave it open. Do not close the tab.

Add custom code RESTAPIMetadataDataModels

  1. Click + Custom at the top of the Data Model page
  1. Select Add Custom Code from the dropdown
  1. Select the Notebook named QBeeQ Asset Auditor Code
  1. Click Done
  1. Hover over the table New Custom Code newNotebook, and click the three-dot menu
  1. Rename the new table as RESTAPIMetadataDataModels

Build the Elasticube

  1. 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

  1. Locate the zip file QBeeQ Asset Auditor Dashboards.dash
  1. Create a new folder, named QBeeQ Asset Auditor
  1. Hover over Dashboards list in the home page and click the + symbol.
    1. 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.
  1. Select Import Dashboard from the menu.
  1. Select QBeeQ Asset Auditor Dashboards.dash file 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
Widget Reference Errors - Missing Plugins

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
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
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
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
 
Did this answer your question?
😞
😐
🤩

Last updated on August 4, 2021