# Context Setting Source: https://docs.explo.co/ai-features/context-setting Use Context Setting to apply additional contexts for your AI Assistant on a per Report Builder basis. ## Step 1: Create Context Settings in **Explo Settings > AI Settings > Context** Dashboard AI is coming soon! Step 1 ## Step 2: Create a new context and follow the suggested prompts. These will be passed to your AI Assistant at the start of each conversation, resulting in a tailored conversation with higher quality interactions for your end user. Step 2 ## Step 3: Choose this context on a per Report Builder basis using the Report Builder AI Settings. Step 3 # Customer Endpoints Source: https://docs.explo.co/api-reference/customer-api Collection of endpoints to manage customers List all of your Customers Get or create a new Customer Update an existing Customer. Delete an existing Customer. Refresh a Customer token Permission Customers to the Customer Portal # Configure Customer Portal Source: https://docs.explo.co/api-reference/customer-api/configure-portal POST /api/configure_customer_portal/ This endpoint lets you programmatically permission customer emails to the Customer Portal. ### Body This is the embed\_id of the dashboard that will be used in the portal. This is the ID you use to identify this customer in your database that you provided to explo. This is a list of strings, where each string is an email allowed to authenticate in the portal to see the respective dashboard. ### Response Indicates whether the call was successful. 1 if successful, 0 if not. ```bash Example Request theme={null} curl --location --request POST 'https://api.explo.co/api/configure_customer_portal/' \ --header 'Content-Type: application/json' \ --header 'Explo-Authorization: Token ' \ --data-raw '{ "dashboard_embed_id": "Ab123CdefG", "provided_id": "test_id_1", "emails": ["apple@explo.co", "orange@explo.co"] }' ``` ```json Response theme={null} { "success": 1 } ``` # [Deprecated] Get all customers (v1) Source: https://docs.explo.co/api-reference/customer-api/customers GET /api/customers/ This endpoint gets all of your customers. This list will be filtered to the customers your API token has access to. Filters customers to those with specified parent provided id. Filters customers to those within the specified hierarchy level. ### Response Indicates whether the call was successful. 1 if successful, 0 if not. The contents of each customer The customer token (customerToken or CUSTOMER\_TOKEN) that will be used to identify which customer is viewing the dashboard. You should save this on your end to use when rendering an embedded dashboard by passing this token into the web component or iframe. Example usage [here](/embedding-documentation/dashboard/option-1-web-component/). The display name you provided for your customer in Explo. The ID you use to identify this customer in your database that you provided. This is also the ID you will use to reference your customer in Explo queries or access your customer via the API. For more information on example usage, check out [this section](/creating-dashboards/variables/tips). An array of email addresses you provided for your customer. An array of group tag names that have been assigned to this customer. The name of the assigned hierarchy level. If present, the name of the assigned data visibility group. True if this customer is a demo customer, which means that data panels will include a demo watermark for the customer. Demo customers do not count towards paid customers. A set of key-value pairs assigned to this customer. These will be accessible through variables in the dashboards and SQL editor. More information on properties can be found in [this section](/creating-dashboards/variables/passing-in-variables). A properties object based on the provided properties of this customer and any inherited properties from parent customers. A set of key-values pairs that map a schema id to the data source that this customer loads data from. For more information on schemas and data sources, check out [this section](/database-setup/data-sources-and-schema/). A schema datasource mapping object based on the parent\_schema\_datasource\_mapping of the customer and any inherited parent\_schema\_datasource\_mapping from parent customers. ```bash Example Request theme={null} curl --location --request GET 'https://api.explo.co/api/customers/' \ --header 'Content-Type: application/json' \ --header 'Explo-Authorization: Token ' ``` ```json Response theme={null} { "success": 1, "new_customer": true, "customers": [{ "token": "", "name": "Example 1", "provided_id": "example_1", "is_demo_group": false, "emails": ["example@example.com"], "group_tags": ["designers", "engineers"], "properties": { "filterValue": "value" }, "computed_properties": { "filterValue": "value" }, "access_group": "Development", "parent_schema_datasource_mapping": {"40": "213": "134": "386"}, "computed_parent_schema_datasource_mapping": {"40": "213": "134": "386"}, "hierarchy_level": "Level 1" }, { "token": "", "name": "Example 2", "provided_id": "example_2", "is_demo_group": false, "emails": ["example2@example.com"], "group_tags": [], "properties": { "filterValue": "value" }, "computed_properties": { "filterValue": "value" }, "access_group": "Production", "parent_schema_datasource_mapping": {"40": "213": "134": "386"}, "computed_parent_schema_datasource_mapping": {"40": "213": "134": "386"}, "hierarchy_level": "Level 2" }] } ``` # Get all customers (v2) Source: https://docs.explo.co/api-reference/customer-api/customers-v2 GET /v2/api/customers/ This endpoint gets all of your customers. This list will be filtered to the customers your API token has access to. Filters customers to those with specified parent provided id. Filters customers to those within the specified hierarchy level. The result page number to request. Defaults to 1. The result page size. Defaults to 20. The max is 1000 ### Response The total number of results possible. Response wrapper object. Contains the customers response field. The contents of each customer The customer token (customerToken or CUSTOMER\_TOKEN) that will be used to identify which customer is viewing the dashboard. You should save this on your end to use when rendering an embedded dashboard by passing this token into the web component or iframe. Example usage [here](/embedding-documentation/dashboard/option-1-web-component/). The display name you provided for your customer in Explo. The ID you use to identify this customer in your database that you provided. This is also the ID you will use to reference your customer in Explo queries or access your customer via the API. For more information on example usage, check out [this section](/creating-dashboards/variables/tips). An array of email addresses you provided for your customer. An array of group tag names that have been assigned to this customer. The name of the assigned hierarchy level. If present, the name of the assigned data visibility group. True if this customer is a demo customer, which means that data panels will include a demo watermark for the customer. Demo customers do not count towards paid customers. A set of key-value pairs assigned to this customer. These will be accessible through variables in the dashboards and SQL editor. More information on properties can be found in [this section](/creating-dashboards/variables/passing-in-variables). A properties object based on the provided properties of this customer and any inherited properties from parent customers. A set of key-values pairs that map a schema id to the data source that this customer loads data from. For more information on schemas and data sources, check out [this section](/database-setup/data-sources-and-schema/). A schema datasource mapping object based on the parent\_schema\_datasource\_mapping of the customer and any inherited parent\_schema\_datasource\_mapping from parent customers. ```bash Example Request theme={null} curl --location --request GET 'https://api.explo.co/v2/api/customers/?pageSize=2&page=1' \ --header 'Content-Type: application/json' \ --header 'Explo-Authorization: Token ' ``` ```json Response theme={null} { "total_count": 10, "results": { "customers": [ { "token": "", "name": "Example 1", "provided_id": "example_1", "is_demo_group": false, "emails": ["example@example.com"], "group_tags": ["designers", "engineers"], "properties": { "filter_value": "value" }, "computed_properties": { "filter_value": "value" }, "access_group": "Development", "parent_schema_datasource_mapping": { "40": "213", "134": "386" }, "computed_parent_schema_datasource_mapping": { "40": "213", "134": "386" }, "hierarchy_level": "Level 1" }, { "token": "", "name": "Example 2", "provided_id": "example_2", "is_demo_group": false, "emails": ["example2@example.com"], "group_tags": [], "properties": { "filter_value": "value" }, "computed_properties": { "filter_value": "value" }, "access_group": "Production", "parent_schema_datasource_mapping": { "40": "213", "134": "386" }, "computed_parent_schema_datasource_mapping": { "40": "213", "134": "386" }, "hierarchy_level": "Level 2" } ] } } ``` # Delete Customer Source: https://docs.explo.co/api-reference/customer-api/delete DELETE /api/delete_customer/ This endpoint deletes an existing Customer. You cannot delete a customer that has children. You must either delete the child customers first or remove the parent relationship from each child. ### Body This is the current Customer token you have for the Customer you want to delete ### Response Indicates whether the call was successful. 1 if successful, 0 if not. ```bash Example Request theme={null} curl --location --request DELETE 'https://api.explo.co/api/delete_customer/' \ --header 'Content-Type: application/json' \ --header 'Explo-Authorization: Token ' \ --data-raw '{ "current_token": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" }' ``` ```json Response theme={null} { "success": 1 } ``` # Generate Embed JWT Source: https://docs.explo.co/api-reference/customer-api/generate-jwt POST /api/generate_jwt/ This endpoint generates a JWT (JSON Web Token) with the provided customer id and embed id encoded in it. This token expires at the provided time, default is 24 hours after creation. ### Body This is the id you've provided Explo for the customer you'd like to encode in this JWT. This is the id of the dashboard or report builder you're embedding. This is the id of the key you'd like to use to encrypt your JWT. This ID can be taken from the `Data Visibility Groups` section of the settings page. If no key id is provided, Explo will generate one. This is the date time that you want your JWT to expire at, in [ISO08601 duration format](https://en.wikipedia.org/wiki/ISO_8601#Durations). If not provided, this will be set to 24 hours after creation. If embedding a single chart, provide the id of the chart here. This feature must be enabled by Explo. Controls what functionality end users can access in report builders. If `null` or `["*"]`, all functionality will be allowed. Learn more about configuring read-only report builders [here](/report-builder-features/read-only). An optional argument that disables your end user from editing the editable section at the bottom of the dashboard if enabled. The domain of the embed, which ensures that the JWT is only valid from that origin. An optional argument for increased security. ### Response The JWT you requested. You can use this immediately in your embed. ```bash Example Request theme={null} curl --location --request POST 'https://api.explo.co/api/generate_jwt/' \ --header 'Content-Type: application/json' \ --header 'Explo-Authorization: Token ' \ --data-raw '{ "provided_id": "customer_1", "embed_id": "abcde", "expiration": "PT1H", "key_id":"aa111111-1a11-111a-aa11-1aaaa11a1a11", "rb_allowed_features": ["flt", "srt"], "disable_editable_section_editing": true, "embed_origin": "https://your-domain.com/" }' ``` ```json Response theme={null} { "success": 1, "jwt": "" } ``` # Get Customer Source: https://docs.explo.co/api-reference/customer-api/get POST /api/get_customer/ This endpoint gets an existing customer. ### Body The ID you use to identify this customer in your database. This is also the ID you use to reference your customer in Explo queries or access your customer via the API. For more information on example usage, check out [this section](/creating-dashboards/variables/tips). ### Response Indicates whether the call was successful. 1 if successful, 0 if not. The contents of the customer The customer token (customerToken or CUSTOMER\_TOKEN) that will be used to identify which customer is viewing the dashboard. You should save this on your end to use when rendering an embedded dashboard by passing this token into the web component or iframe. Example usage [here](/embedding-documentation/dashboard/option-1-web-component/). The display name you provided for your customer in Explo. The ID you use to identify this customer in your database that you provided. This is also the ID you will use to reference your customer in Explo queries or access your customer via the API. For more information on example usage, check out [this section](/creating-dashboards/variables/tips). An array of email addresses you provided for your customer. An array of group tag names that have been assigned to this customer. The name of the assigned hierarchy level. If present, the name of the assigned data visibility group. True if this customer is a demo customer, which means that data panels will include a demo watermark for the customer. Demo customers do not count towards paid customers. A set of key-value pairs assigned to this customer. These will be accessible through variables in the dashboards and SQL editor. More information on properties can be found in [this section](/creating-dashboards/variables/passing-in-variables). A properties object based on the provided properties of this customer and any inherited properties from parent customers. A set of key-values pairs that map a schema id to the data source that this customer loads data from. For more information on schemas and data sources, check out [this section](/data-sources/data-sources-and-schema/). A schema datasource mapping object based on the parent\_schema\_datasource\_mapping of the customer and any inherited parent\_schema\_datasource\_mapping from parent customers. ```bash Example Request theme={null} curl --location --request POST 'https://api.explo.co/api/get_customer/' \ --header 'Content-Type: application/json' \ --header 'Explo-Authorization: Token ' \ --data-raw '{ "provided_id": "example_1" }' ``` ```json Response theme={null} { "success": 1, "customer": { "token": "", "name": "Example 1", "provided_id": "example_1", "is_demo_group": false, "emails": ["example@example.com"], "group_tags": ["sales"], "properties": { "filterValue": "value" }, "computed_properties": { "filterValue": "value" }, "access_group": "Production", "parent_schema_datasource_mapping": {"40": "213": "134": 386"}, "computed_parent_schema_datasource_mapping": {"40": "213": "134": 386"}, "hierarchy_level": "Customer" } } ``` # Get or Create Customer Source: https://docs.explo.co/api-reference/customer-api/get-or-create POST /api/create_customer/ This endpoint gets or creates a new customer. If a customer with the given provided\_id does not exist, a new customer will be created. The response contains the created or already-existing customer and a flag denoting whether a new customer was created. ### Body The display name of your customer in Explo. The ID you use to identify this customer in your database. This is also the ID you will use to reference your customer in Explo queries or access your customer via the API. For more information on example usage, check out [this section](/creating-dashboards/variables/tips). A set of key-values pairs that map a schema id to the data source that this customer loads data from. For more information on schemas and data sources, check out [this section](/data-sources/data-sources-and-schema/). A boolean representing whether this customer is a "demo customer." Setting this to true will make data panels include a demo watermark for the customer. Demo customers do not count towards paid customers. Default value is false. An array of email addresses to add to the customer. An array of group tag names to assign to the customer. Group tag names must be of existing group tags, and these can be created with the create\_group\_tag endpoint. The name of the hierarchy level to assign to the customer. Must be an existing hierarchy level. If no level is specified, the created customer will be assigned to the root (highest) level of the hierarchy. If you do not have a hierarchy set up and would like one, reach out to customer support. An identifier for a parent customer matching the parent's `provided_id`. If provided, the customer will be set as a child of the parent customer, and will have its `computed_properties` and `computed_parent_schema_datasource_mapping` fields inherit values from the parent customer. Parents must belong to the same data visibility group as their children. Parents must also be at a strictly higher hierarchy level than their children, so you'll need to explicitly set the `hierarchy_level_name` to be at a level below the parent's level. You can contact customer support to set up a hierarchy for your customers. A set of key-value pairs assigned to this customer. These will be accessible through variables in the dashboards and SQL editor. More information on properties can be found in [this section](/creating-dashboards/variables/passing-in-variables). ### Response Indicates whether the call was successful. 1 if successful, 0 if not. Indicates whether a new customer was created. The contents of the customer The customer token (customerToken or CUSTOMER\_TOKEN) that will be used to identify which customer is viewing the dashboard. You should save this on your end to use when rendering an embedded dashboard by passing this token into the web component or iframe. Example usage [here](/embedding-documentation/dashboard/option-1-web-component/). The display name you provided for your customer in Explo. The ID you use to identify this customer in your database that you provided. This is also the ID you will use to reference your customer in Explo queries or access your customer via the API. For more information on example usage, check out [this section](/creating-dashboards/variables/tips). An array of email addresses you provided for your customer. An array of group tag names that have been assigned to this customer. The name of the assigned hierarchy level. If present, the name of the assigned data visibility group. True if this customer is a demo customer, which means that data panels will include a demo watermark for the customer. Demo customers do not count towards paid customers. A set of key-value pairs assigned to this customer. These will be accessible through variables in the dashboards and SQL editor. More information on properties can be found in [this section](/creating-dashboards/variables/passing-in-variables). A properties object based on the provided properties of this customer and any inherited properties from parent customers. A set of key-values pairs that map a schema id to the data source that this customer loads data from. For more information on schemas and data sources, check out [this section](/data-sources/data-sources-and-schema/). A schema datasource mapping object based on the parent\_schema\_datasource\_mapping of the customer and any inherited parent\_schema\_datasource\_mapping from parent customers. ```bash Example Request theme={null} curl --location --request POST 'https://api.explo.co/api/create_customer/' \ --header 'Content-Type: application/json' \ --header 'Explo-Authorization: Token ' \ --data-raw '{ "provided_id": "example_1", "name": "Example 1", "mapping": {"40": "213", "134": "386"}, "properties": {"filterValue": "value"}, "emails": ["example@example.com"], "group_tags" : ["sales"], "hierarchy_level_name": "Customer" }' ``` ```json Response theme={null} { "success": 1, "new_customer": true, "customer": { "token": "", "name": "Example 1", "provided_id": "example_1", "is_demo_group": false, "emails": ["example@example.com"], "group_tags": ["sales"], "properties": { "filterValue": "value" }, "computed_properties": { "filterValue": "value" }, "access_group": "Production", "parent_schema_datasource_mapping": {"40": "213": "134": 386"}, "computed_parent_schema_datasource_mapping": {"40": "213": "134": 386"}, "hierarchy_level": "Customer" } } ``` # Refresh Customer Token Source: https://docs.explo.co/api-reference/customer-api/refresh-token POST /api/refresh_customer_token/ This endpoint refreshes a customer token. This is useful when you want to force a customer token to rotate because an existing one may be compromised. ### Body This is the current customer token you have for the customer that you want to rotate. ### Response Indicates whether the call was successful. 1 if successful, 0 if not. The contents of the customer The customer token (customerToken or CUSTOMER\_TOKEN) that will be used to identify which customer is viewing the dashboard. You should save this on your end to use when rendering an embedded dashboard by passing this token into the web component or iframe. Example usage [here](/embedding-documentation/dashboard/option-1-web-component/). The display name you provided for your customer in Explo. The ID you use to identify this customer in your database that you provided. This is also the ID you will use to reference your customer in Explo queries or access your customer via the API. For more information on example usage, check out [this section](/creating-dashboards/variables/tips). An array of email addresses you provided for your customer. True if this customer is a demo customer, which means that data panels will include a demo watermark for the customer. Demo customers do not count towards paid customers. A set of key-value pairs assigned to this customer. These will be accessible through variables in the dashboards and SQL editor. More information on properties can be found in [this section](/creating-dashboards/variables/passing-in-variables). A properties object based on the provided properties of this customer and any inherited properties from parent customers. A set of key-values pairs that map a schema id to the data source that this customer loads data from. For more information on schemas and data sources, check out [this section](/database-setup/data-sources-and-schema/). A schema datasource mapping object based on the parent\_schema\_datasource\_mapping of the customer and any inherited parent\_schema\_datasource\_mapping from parent customers. ```bash Example Request theme={null} curl --location --request POST 'https://api.explo.co/api/update_customer/' \ --header 'Content-Type: application/json' \ --header 'Explo-Authorization: Token ' \ --data-raw '{ "current_token": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" }' ``` ```json Response theme={null} { "success": 1, "customer": { "token": "", "name": "Example 1", "provided_id": "example_1", "is_demo_group": false, "emails": ["new_email@example.com"], "properties": { "filterValue": "new_value" }, "computed_properties": { "filterValue": "new_value" }, "parent_schema_datasource_mapping": {"40": "213": "134": 386"}, "computed_parent_schema_datasource_mapping": {"40": "213": "134": 386"} } } ``` # Update Customer Source: https://docs.explo.co/api-reference/customer-api/update POST /api/update_customer/ This endpoint updates an existing customer. Provided\_id is required to request a customer, and only the other provided fields will be updated. ### Body This is the ID you use to identify this customer in your database. Set this field if you'd like to change the ID used to identify the customer in the database. This will replace the current `provided_id`. This is the name of the customer. This is a JSON mapping of schema id to either the data source that this user group should be associated with. Set this boolean parameter to true to make data panels include a demo watermark for the customer. Demo customers do not count towards paid user groups. Default value is false. This is a JSON object for properties assigned to this customer. These will be accessible through variables in the dashboards and SQL editor This is an array of email addresses to add to the customer. An array of group tag names to assign to the customer. This will override previous group tag assignment if specified. Supplying the empty array will remove all group tags. Group tag names must be of existing group tags, and these can be created with the create\_group\_tag endpoint. The name of the hierarchy level to assign to the customer. Must be an existing hierarchy level. This will override previous assignment. If you do not have a hierarchy set up and would like one, reach out to customer support. This is an identifier for a parent customer matching the parent's `provided_id`. If provided, the customer will be set as a child of the parent customer, and will have its `computed_properties` and `computed_parent_schema_datasource_mapping` fields inherit values from the parent customer. Note that parents must be at a strictly higher hierarchy level than their children. You can contact customer support to set up a hierarchy for your customers. ### Response Indicates whether the call was successful. 1 if successful, 0 if not. The contents of the customer The customer token (customerToken or CUSTOMER\_TOKEN) that will be used to identify which customer is viewing the dashboard. You should save this on your end to use when rendering an embedded dashboard by passing this token into the web component or iframe. Example usage [here](/embedding-documentation/dashboard/option-1-web-component/). The display name you provided for your customer in Explo. The ID you use to identify this customer in your database that you provided. This is also the ID you will use to reference your customer in Explo queries or access your customer via the API. For more information on example usage, check out [this section](/creating-dashboards/variables/tips). An array of email addresses you provided for your customer. An array of updated group tag names that have been assigned to this customer The name of the assigned hierarchy level. If present, the name of the assigned data visibility group. True if this customer is a demo customer, which means that data panels will include a demo watermark for the customer. Demo customers do not count towards paid customers. A set of key-value pairs assigned to this customer. These will be accessible through variables in the dashboards and SQL editor. More information on properties can be found in [this section](/creating-dashboards/variables/passing-in-variables). A properties object based on the provided properties of this customer and any inherited properties from parent customers. A set of key-values pairs that map a schema id to the data source that this customer loads data from. For more information on schemas and data sources, check out [this section](/database-setup/data-sources-and-schema/). A schema datasource mapping object based on the parent\_schema\_datasource\_mapping of the customer and any inherited parent\_schema\_datasource\_mapping from parent customers. ```bash Example Request theme={null} curl --location --request POST 'https://api.explo.co/api/update_customer/' \ --header 'Content-Type: application/json' \ --header 'Explo-Authorization: Token ' \ --data-raw '{ "provided_id": "example_1", "properties": {"filterValue": "new_value"}, "emails": ["new_email@example.com"], "group_tags": ["engineers", "sales"], "hierarchy_level_name": "Level 1" }' ``` ```json Response theme={null} { "success": 1, "customer": { "token": "", "name": "Example 1", "provided_id": "example_1", "is_demo_group": false, "emails": ["new_email@example.com"], "group_tags": ["engineers", "sales"], "properties": { "filterValue": "new_value" }, "computed_properties": { "filterValue": "new_value" }, "access_group": "Production", "parent_schema_datasource_mapping": {"40": "213": "134": 386"}, "computed_parent_schema_datasource_mapping": {"40": "213": "134": 386"}, "hierarchy_level": "Level 1" } } ``` # End User Endpoints Source: https://docs.explo.co/api-reference/end-user-api Collection of endpoints to manage end users The End User API is now deprecated and has been replaced by the Customer API. Get or create a new user Update an existing end user. Delete an existing end user. # Delete End User Source: https://docs.explo.co/api-reference/end-user-api/delete DELETE https://api.explo.co/api/delete_end_user/ The End User API is now deprecated and has been replaced by the Customer API. ### Body The ID of the end user you provided in creation The ID of the end user group the end user belongs to ### Response Indicates whether the call was successful. 1 if successful, 0 if not. ```bash Example Request theme={null} curl --location --request DELETE 'https://api.explo.co/api/delete_end_user/' \ --header 'Content-Type: application/json' \ --header 'Explo-Authorization: Token ' \ --data-raw '{ "provided_id": "example_1" "customer_id": 123 }' ``` ```json Response theme={null} { "success": 1 } ``` # Get or Create End User Source: https://docs.explo.co/api-reference/end-user-api/get-or-create POST https://api.explo.co/api/create_end_user/ The End User API is now deprecated and has been replaced by the Customer API. This endpoint gets or creates an end user. If the provided\_id does not exist for the provided `customer_id`, a new end user will be created and information about the user will be sent back. If the provided\_id does exist for the `customer_id`, the existing user will be returned. ### Body The ID you use to identify this end user in your database The email adress of your end user The ID of the end user group the new user should belong to A json mapping of key values you can use to load user-specific data into your dashboards. Any key value is valid, but header and footer are reserved keys that you can use to load html to display in the header and footer of your email ### Response Indicates whether the call was successful. 1 if successful, 0 if not. The data of the end user This was the provided\_id provided in the request body This was the email provided in the request body This was the set of attributes provided in the request body ```bash Example Request theme={null} curl --location --request POST 'https://api.explo.co/api/create_end_user/' \ --header 'Content-Type: application/json' \ --header 'Explo-Authorization: Token ' \ --data-raw '{ "provided_id": "example_1", "email": "example@explo.co", "customer_id": 123 }' ``` ```json Response theme={null} { "success": 1, "end_user": { "provided_id": 3, "email": "example@explo.co", "attributes": "{'name': 'Example', 'header': '
'" } } ``` # Update End User Source: https://docs.explo.co/api-reference/end-user-api/update POST https://api.explo.co/api/update_end_user/ The End User API is now deprecated and has been replaced by the Customer API. ### Body The ID of the end user you provided in creation The ID of the end user group the end user belongs to A new email to associate the end user with A new set of attributes to associate the end user with ### Response Indicates whether the call was successful. 1 if successful, 0 if not. The data of the end user This was the provided\_id provided in the request body This was the email provided in the request body This was the set of attributes provided in the request body ```bash Example Request theme={null} curl --location --request POST 'https://api.explo.co/api/update_end_user/' \ --header 'Content-Type: application/json' \ --header 'Explo-Authorization: Token ' \ --data-raw '{ "provided_id": "example_1", "email": "example@explo.co", "customer_id": 123 }' ``` ```json Response theme={null} { "success": 1, "end_user": { "provided_id": 3, "email": "example@explo.co", "attributes": "{'name': 'Example', 'header': '
'" } } ``` # End User Group Endpoints Source: https://docs.explo.co/api-reference/end-user-group-api Collection of endpoints to manage end user groups The End User Group API is now deprecated and has been replaced by the Customer API. Each End User Group entity corresponds to a Customer entity, with its `user_group_id` corresponding to a Customer `customer_id`. Get or create a new user group Update an existing user group. Delete an existing user group. Refresh a user group token # Delete User Group Source: https://docs.explo.co/api-reference/end-user-group-api/delete DELETE /api/delete_user_group/ The End User Group API is now deprecated and has been replaced by the Customer API. Each End User Group entity corresponds to a Customer entity, with its `user_group_id` corresponding to a Customer `customer_id`. This API method has been replaced by Delete Customer. This endpoint deletes an existing user group. ### Body This is the current user group token you have for the user group you want to delete ### Response Indicates whether the call was successful. 1 if successful, 0 if not. ```bash Example Request theme={null} curl --location --request DELETE 'https://api.explo.co/api/delete_user_group/' \ --header 'Content-Type: application/json' \ --header 'Explo-Authorization: Token ' \ --data-raw '{ "current_token": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" }' ``` ```json Response theme={null} { "success": 1 } ``` # Get or Create User Group Source: https://docs.explo.co/api-reference/end-user-group-api/get-or-create POST /api/create_user_group/ The End User Group API is now deprecated and has been replaced by the Customer API. Each End User Group entity corresponds to a Customer entity, with its `user_group_id` corresponding to a Customer `customer_id`. This API method has been replaced by Get or Create Customer. This endpoint gets or creates a new user group. If the user\_group\_id does not exist, a new user group will be created and information about the group will be sent back. If the user\_group\_id exists, no action will be taken but the same information about the group will be sent back. There will be a flag in the response indicating if a new user group was created. ### Body This is the name of the user group. This is the ID you use to identify this user group in your database. This is a JSON mapping of schema id to either the data source that this user group should be associated with or id of the datasource you provided when creating it. Set this boolean parameter to true to make data panels include a demo watermark for the user group. Demo user groups do not count towards paid user groups. Default value is false. This is a JSON object for properties assigned to this user group. These will be accessible through variables in the dashboards and SQL editor ### Response Indicates whether the call was successful. 1 if successful, 0 if not. Indicates whether a new user group was created. The contents of the user group This is Explo's internal ID for this user group. You don't need to record this information, since you will not need to use it. This is the user group token (customerToken or CUSTOMER\_TOKEN) that will be used to identify which user group is viewing the dashboard. You should save this on your end to use when rendering an embedded dashboard. This is the name of the user group provided in the request body. This is the user\_group\_id provided in the request body. If set to true, data panels displayed for the user group will include a demo watermark. This is the properties object if it was provided in the request body ```bash Example Request theme={null} curl --location --request POST 'https://api.explo.co/api/create_user_group/' \ --header 'Content-Type: application/json' \ --header 'Explo-Authorization: Token ' \ --data-raw '{ "user_group_id": "example_1", "name": "Example 1", "mapping": {"40": "213", "134": "386"}, "properties": {"filterValue": "value"} }' ``` ```json Response theme={null} { "success": 1, "new_user_group": true, "user_group": { "team_id": 3, "token": "", "name": "Example 1", "provided_id": "example_1", "is_demo_group": false } } ``` # Refresh User Group Token Source: https://docs.explo.co/api-reference/end-user-group-api/refresh-token POST /api/refresh_user_group_token/ The End User Group API is now deprecated and has been replaced by the Customer API. Each End User Group entity corresponds to a Customer entity, with its `user_group_id` corresponding to a Customer `customer_id`. This API method has been replaced by Refresh Customer Token. This endpoint refreshes a user group token. This is useful when you want to force a user group token to rotate because an existing one may be compromised. ### Body This is the current user group token you have for the user group that you want to rotate. ### Response Indicates whether the call was successful. 1 if successful, 0 if not. The contents of the user group This is Explo's internal ID for this user group. You don't need to record this information, since you will not need to use it. This is the user group token (customerToken or CUSTOMER\_TOKEN) that will be used to identify which user group is viewing the dashboard. You should save this on your end to use when rendering an embedded dashboard. This is the name of the user group provided in the request body. This is the user\_group\_id provided in the request body. This is the environment tag of the user group. Possible values are 'Customer' and 'Testing'. User group id's must be unique to each environment, so you can not create multiple user groups with with same id. If you have a production customer and a test user group with the same id, you will be required to label one as 'Customer' and another as 'Testing' ```bash Example Request theme={null} curl --location --request POST 'https://api.explo.co/api/refresh_user_group_token/' \ --header 'Content-Type: application/json' \ --header 'Explo-Authorization: Token ' \ --data-raw '{ "current_token": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" }' ``` ```json Response theme={null} { "success": 1, "user_group": { "team_id": 3, "token": "", "name": "Example 1", "provided_id": "example_1" } } ``` # Update User Group Source: https://docs.explo.co/api-reference/end-user-group-api/update POST /api/update_user_group/ The End User Group API is now deprecated and has been replaced by the Customer API. Each End User Group entity corresponds to a Customer entity, with its `user_group_id` corresponding to a Customer `customer_id`. This API method has been replaced by Update Customer. This endpoint updates an existing user group. ### Body This is the name of the user group. This is the ID you use to identify this user group in your database. This is a JSON mapping of schema id to either the data source that this user group should be associated with or id of the datasource you provided when creating it. Set this boolean parameter to true to make data panels include a demo watermark for the user group. Demo user groups do not count towards paid user groups. Default value is false. This is a JSON object for properties assigned to this user group. These will be accessible through variables in the dashboards and SQL editor ### Response Indicates whether the call was successful. 1 if successful, 0 if not. The contents of the user group Indicates whether a new user group was created. This is the user group token (customerToken or CUSTOMER\_TOKEN) that will be used to identify which user group is viewing the dashboard. You should save this on your end to use when rendering an embedded dashboard. This is the name of the user group provided in the request body. This is the user\_group\_id provided in the request body. If set to true, data panels displayed for the user group will include a demo watermark. This is the properties object if it was provided in the request body This is the environment tag of the user group. Possible values are 'Customer' and 'Testing' ```bash Example Request theme={null} curl --location --request POST 'https://api.explo.co/api/update_user_group/' \ --header 'Content-Type: application/json' \ --header 'Explo-Authorization: Token ' \ --data-raw '{ "user_group_id": "example_1", "name": "Example 1", "mapping": {"40": "213", "134": "386"}, "properties": {"filterValue": "value"} }' ``` ```json Response theme={null} { "success": 1, "user_group": { "team_id": 113, "token": "", "name": "Example 1", "provided_id": "example_1", "is_demo_group": false } } ``` # Explo's Authentication Source: https://docs.explo.co/api-reference/explos-authentication Explo utilizes token-based authentication. To correctly make a call to the API, you must include the Explo-Authorization header with a valid team token. Below is an example of what the header would look like, replacing with a valid token. ```bash theme={null} 'Explo-Authorization': 'Token ' ``` ## API Tokens You can create multiple API tokens with different levels of permissions and access. On your team settings page, you can generate new tokens, refresh a current token value, delete tokens, and edit these permissions. The API Token you authenticate your request with is associated with a [Data Visibility Group](/managing-permissions/visibility-groups). When creating an customer, the token used will determine which visibility group the customer is added to. When otherwise getting or modifying customers, only groups in the associated visibility group will be accessible. ### Permissions Currently Explo supports two types of API Token permissions, read-only and read-write. Granting a token read-write permissions will allow it to create, delete, and edit any customer in its visibility group, while granting a token read-only permissions will only allow it to pull those customers. For more information about how API tokens interact with their visibility group, see [the visibility groups documentation](/managing-permissions/visibility-groups). # Group Tag Endpoints Source: https://docs.explo.co/api-reference/group-tag-api Collection of endpoints to manage group tags List all of your Group Tags Create a new group tag Rename an existing group tag Delete an existing group tag # Create Group Tag Source: https://docs.explo.co/api-reference/group-tag-api/create POST /api/create_group_tag/ This endpoint creates a new group tag. If a group tag with the given name already exists, an error will occur. The group tag will belong to the team associated with your Authorization Token. ### Body The display name of your group tag in Explo. ### Response Indicates whether the call was successful. 1 if successful, 0 if not. The contents of the Group Tag. The group tag's display name. ```bash Example Request theme={null} curl --location --request POST 'https://api.explo.co/api/create_group_tag/' \ --header 'Content-Type: application/json' \ --header 'Explo-Authorization: Token ' \ --data-raw '{ "name": "tag" }' ``` ```json Response theme={null} { "success": 1, "group_tag": { "name": "tag" } } ``` # Delete Group Tag Source: https://docs.explo.co/api-reference/group-tag-api/delete POST /api/delete_group_tag/ This endpoint deletes an existing Group Tag. ### Body This is the display name of the group tag to delete. An error will be thrown if the group tag does not exist. ### Response Indicates whether the call was successful. 1 if successful, 0 if not. ```bash Example Request theme={null} curl --location --request POST 'https://api.explo.co/api/delete_group_tag/' \ --header 'Content-Type: application/json' \ --header 'Explo-Authorization: Token ' \ --data-raw '{ "name": "tag" }' ``` ```json Response theme={null} { "success": 1 } ``` # Get all group tags Source: https://docs.explo.co/api-reference/group-tag-api/group-tags GET /api/group_tags/ This endpoint gets all of your group tags. This list will be filtered to the group tags your API token has access to. ### Response Indicates whether the call was successful. 1 if successful, 0 if not. The contents of each group tag object The group tag's display name. ```bash Example Request theme={null} curl --location --request GET 'https://api.explo.co/api/group_tags/' \ --header 'Content-Type: application/json' \ --header 'Explo-Authorization: Token ' ``` ```json Response theme={null} { "success": 1, "group_tags": [ { "name": "marketing" }, { "name": "designer" }, { "name": "engineers" }, { "name": "sales" } ] } ``` # Rename Group Tag Source: https://docs.explo.co/api-reference/group-tag-api/rename POST /api/rename_group_tag/ This endpoint renames a group tag. ### Body The current display name of the group tag you'd like to rename. The new display name of the group tag. ### Response Indicates whether the call was successful. 1 if successful, 0 if not. The contents of the Group Tag. The group tag's new display name. ```bash Example Request theme={null} curl --location --request POST 'https://api.explo.co/api/rename_group_tag/' \ --header 'Content-Type: application/json' \ --header 'Explo-Authorization: Token ' \ --data-raw '{ "name": "tag", "new_name": "new tag" }' ``` ```json Response theme={null} { "success": 1, "group_tag": { "name": "new tag" } } ``` # Overview Source: https://docs.explo.co/api-reference/overview For all api requests, you must have a trailing slash (/) at the end of your request. Otherwise, your request will be rejected as 'Method not allowed' ## API Endpoints ### Customer API Use the Customer API to programmatically pull customers when embedding your dashboards. This allows you to use Explo without necessarily storing any of our tokens in your database, keeping your integration more clean and flexible. You'll reference your customer both in the API and in your Explo queries using a provided\_id, which is the id you give us when creating a customer. Usually, this is the id of your customer in your own database. The API Token you authenticate your request with is associated with a [Data Visibility Group](/managing-permissions/visibility-groups). Only customers in that visibility group will be pulled. ### Export Dashboard API Use the Export Dashboard API to programmatically pull PDF or image screenshots of your dashboards. ### Resource API The Resource API was formerly referred to as the Dashboard API. Use the Resource API to pull a list of all your Explo resources and their various attributes. ### Partners API To get set up with the Partners API, reach out to Explo Sales. Use the Partners API to allow your customers to easily create accounts in Explo with your data sources connected. ### End User Group API The End User Group API is now deprecated and has been replaced by the Customer API. Each End User Group entity corresponds to a Customer entity, with its `user_group_id` corresponding to a Customer `customer_id`. Use the End User Group API to programmatically pull end user groups when embedding your dashboards. This allows you to use Explo without necessarily storing any of our tokens in your database, keeping your integration more clean and flexible. The API Token you authenticate your request with is associated with a [Data Visibility Group](/managing-permissions/visibility-groups). Only end user groups in that visibility group will be pulled. ### End User API The End User API is now deprecated and has been replaced by the Customer API. Use the End User API to programmatically manage individual end users information. # Partners Endpoints Source: https://docs.explo.co/api-reference/partners-api Endpoints to allow your users to easily create accounts with your databases in Explo To get access to the Partners API, reach out to Explo Sales. Create a team in Explo and automatically connect a data source to that workspace # Connect to Explo Source: https://docs.explo.co/api-reference/partners-api/connect POST /api/partners/connect ### Body The email of your user. When the team is created, they'll get an email inviting them to Explo. The name of the team to create. A JSON representing credentials that Explo will use to create the data source for the new team. For typings corresponding to your database, reach out to Explo Support. ### Response Indicates whether the call was successful. 1 if successful, 0 if not. ```bash Example Request theme={null} curl --location --request POST 'https://api.explo.co/api/partners/connect' \ --header 'Content-Type: application/json' \ --header 'Explo-Authorization: Token ' \ --data-raw '{ "email": "customer@site.com", "team_name": "Customer Team", "connection_info": "{\"@type\": \"database_type\", \"configuration\": {}}" }' ``` ```json Response theme={null} { "success": 1 } ``` # Resource Endpoints Source: https://docs.explo.co/api-reference/resource-api Collection of endpoints to manage resources Get all dashboards belonging to the team Get all report builders belonging to the team Publish a dashboard or report builder to an environment Email a screenshot of your dashboard Email a dashboard report, configured in Explo Copy an editable dashboard section’s metadata from one customer to another # Email Dashboard Report Source: https://docs.explo.co/api-reference/resource-api/email-report POST /api/dashboard/report This endpoint sends a formatted email that contains the dashboard screenshot in the email itself. The email format is configured in the Explo application. This endpoint is rate limited based on the corresponding docs [here](/security/security-faqs#do-explos-api-endpoints-have-a-rate-limit). If a dashboard version is tagged with an `email` environment tag, that version will be used for the emails. Otherwise, the version tagged with `production` will be used. If both do not exist, then it will use the most recent version or draft. ### Body This is your id for your customer that you'd like to screenshot for. This controls what data the dashboard loads with in the screenshot. This is the token you use to embed your dashboard in your site. You can find this on the Dashboards page in Explo. The email you'd like this screenshot to be send to. Set subject for report email. By default this set to Dashboard Email Report. Set variables for your report. These will function the same way as variables you provide in your embed. A custom url for the screenshot to link to. If not provided, it will use Explo's share link. ### Response Indicates whether the call was successful initiated. 1 if successful, 0 if not. ```bash Example Request theme={null} curl --location --request POST 'https://api.explo.co/api/dashboard/report' \ --header 'Content-Type: application/json' \ --header 'Explo-Authorization: Token ' \ --data-raw '{ "provided_id": "123", "dashboard_embed_id": "abc123", "email": "customer@site.com", "subject": "Dashboard Email Report", "variables": { "url": "https://google.com", "date_range":{"startDate": "2024-04-09","endDate": "2024-04-12"} }, "custom_url": "https://google.com" }' ``` ```json Response theme={null} { "success": 1 } ``` # List Team Dashboards Source: https://docs.explo.co/api-reference/resource-api/get-dashboard GET /api/dashboard ### Response Indicates whether the call was successful. 1 if successful, 0 if not. The list of dashboards in your team's workspace Your team ID Name of dashboard ID of the dashboard for embedding Attribute values assigned to dashboard The name of the attribute The value assigned for the attribute ```bash Example Request theme={null} curl --location --request GET 'https://api.explo.co/api/dashboard/' \ --header 'Content-Type: application/json' \ --header 'Explo-Authorization: Token ' ``` ```json Response theme={null} { "success": 1, "dashboards": [ { "team_id": 1, "name": "Example Dashboard", "embed_id": "vcjTgL2wdX", "attributes": [ { "attribute": "Team", "value": "Engineering" } ], "is_drilldown": false }, { "team_id": 1, "name": "Production Dashboard", "embed_id": "JQvCTLT76V", "attributes": [ { "attribute": "Status", "value": "Ready" }, { "attribute": "Team", "value": "Marketing" } ], "is_drilldown": true } ] } ``` # List Team Report Builders Source: https://docs.explo.co/api-reference/resource-api/list-report-builders GET /api/reports ### Response Indicates whether the call was successful. 1 if successful, 0 if not. The list of report builders in your team's workspace Name of report builder ID of the report builder for embedding ```bash Example Request theme={null} curl --location --request GET 'https://api.explo.co/api/reports/' \ --header 'Content-Type: application/json' \ --header 'Explo-Authorization: Token ' ``` ```json Response theme={null} { "success": 1, "reports": [ { "name": "Example Report", "embed_id": "vcjTgL2wdX" }, { "name": "Production Report", "embed_id": "JQvCTLT76V" } ] } ``` # Publish to Environment Source: https://docs.explo.co/api-reference/resource-api/publish-resource POST /api/publish ### Body The embed id of your resource. The type of resource you're publishing - must be either "dashboard" or "report" The name of the environment you're publishing to. The version number of the resource that you want to publish. ### Response Indicates whether the call was successful. 1 if successful, 0 if not. ```bash Example Request theme={null} curl --location --request POST 'https://api.explo.co/api/publish/' \ --header 'Content-Type: application/json' \ --header 'Explo-Authorization: Token ' --data-raw '{ "embed_id": "123", "resource_type": "report", "environment": "production", "version_number": 15 }' ``` ```json Response theme={null} { "success": 1 } ``` # Email Dashboard Screenshot as Attachment Source: https://docs.explo.co/api-reference/resource-api/screenshot-dashboard POST /api/dashboard/screenshot This endpoint takes a screenshot of the dashboard and emails it as an attachment. This endpoint is rate limited based on the corresponding docs [here](/security/security-faqs#do-explos-api-endpoints-have-a-rate-limit). This API will send the most recent version or draft of this dashboard. ### Body This is your id for your customer that you'd like to screenshot for. This controls what data the dashboard loads with in the screenshot. This is the token you use to embed your dashboard in your site. You can find this on the Dashboards page in Explo. The email you'd like this screenshot to be send to. If this is not provided, then a short-lived download link to your screenshot will be returned instead. The name you'd like the file to be called in the download. By default, this is set to dashboard\_screenshot\_download.\{png | pdf}. The file type for the screenshot. Must be "image" (for a png) or "pdf" (for a pdf). By default, this is "image." Set subject for screenshot email. By default this is set to Requested Data Export: \{download\_file\_name} \{export\_type}. Set variables for your screenshot. These will function the same way as variables you provide in your embed. Width in pixels for the screenshot. Must be greater than 0 ### Response Indicates whether the call was successfully initiated. 1 if successful, 0 if not. If an email is not provided, this will be the download url for your screenshot. ```bash Example Request theme={null} curl --location --request POST 'https://api.explo.co/api/dashboard/screenshot' \ --header 'Content-Type: application/json' \ --header 'Explo-Authorization: Token ' \ --data-raw '{ "provided_id": "123", "dashboard_embed_id": "abc123", "email": "customer@site.com", "download_file_name": "your_dashboard_screenshot", "export_type": "image", "subject": "Requested Data Export: your_dashboard_screenshot image", "variables": {"example_var": 123} }' ``` ```json Response theme={null} { "success": 1 } ``` # Dataset Editor Source: https://docs.explo.co/creating-dashboards/dataset-editor The dataset editor has recently been revamped. The old version looked like this: Datasets Panel The updated dataset editor is now on the left configuration panel. You can navigate to it by clicking on the "Datasets" Tab. Datasets Panel ## Dataset Management You can perform the following actions from the datasets panel: Datasets Panel * Add a dataset (and select its schema) * Edit a dataset's name * Delete a dataset * A dataset can only be deleted if it is not tied to any charts or filters * Select a dataset to open up the editor ## Dataset Editor Once a dataset has been selected, you can use the editor to create, edit, execute, and save a query. You can also format the data generated. ## Query Datasets Query Tab ### Raw Query This is where you write your raw SQL query to be executed. You can perform the following actions on the query: * Revert draft: Undo the most recent changes. * Format query: Apply syntax formatting to the query. * Preview query: Run the query without saving it. * Save & Run: Run and save the query. All charts and/or filter elements that use this query will be affected. ### Executed Query Once a query has been run, you can see the executed version of it. Read more about how to use the executed query for debugging [here](/creating-dashboards/debugger-panel). ### Output This section shows a data table with the result of the executed query. If there are errors with your query, they will be displayed here. If you have `AI` enabled for your account, you can get error resolution suggestions here as well. ### Schema This section shows the available columns in each of the tables present in the selected schema. You can also swap schemas here, but doing so may cause your charts to load different data. ### Variables This section displays the variables that are available for use in the query. Read more about how to use variables [here](/creating-dashboards/variables). ## Formatting Datasets Formatting Tab Once the query has been executed, you can use the formatting tab to modify and style the table shown in the underlying data modal. Read more about exposing the underlying data on your charts [here](/creating-dashboards/drilldowns/underlying-data-drilldowns). # Debugger Panel Source: https://docs.explo.co/creating-dashboards/debugger-panel Explo offers a dashboard debugger and also dataset debugger to help with your dashboard building experience. To access the debugger panel, select the right panel button at the top of the dashboard editor or choose the debugger view for the dataset editor. Debugger Panel ## Query * Connection time: time it took to connect to your database, before the query itself is run * If this is too much time, you should consider performance improvements like increasing the number of available connections to your database. Reach out to Explo support for suggestions and help. * Querying time: time it took to run the query in your database * If this is too much time, you should consider looking at your datasets in Explo to see if they can be optimized. If AI is enabled for your account, you can also use it for help with query optimization. * Processing time: time it took for Explo to read the results of the query * Total runtime: total runtime it took to run and return the query * `cache miss` or `cache hit`: If cache is missed, the query will run in your database and the metrics above will be returned. If cache is hit, the metrics above are not shown as the resulting data is pulled directly from the cache. **Dataset Debugger** \ The same debugger view is available on the dataset editor's query tab in the "Executed Query" section. This view will show you the query that was run with variables inserted and the same statistics as above. ## Data This tab shows the data returned from the query or cache. The data tab is a great way to double check if the results that are returned are expected. Most of the time, these are the same values that will be reflected on your visualization, but there are certain cases where some light calculations are computed on the frontend after the data is returned. # Overview Source: https://docs.explo.co/creating-dashboards/drilldowns Drilldowns are useful interactions in dashboards that allow your customers to click into visualizations to further understand their data. In Explo we offer two types of drilldown interactions: 1. **Underlying data drilldowns**: expose the underlying data powering visualizations. This option let’s your users dive deeper into their data by providing additional details on data points. 2. **Filter drilldowns**: use visualizations as filters for other components. This option gives your users the ability to interact with charts and graphs as opposed to just control components. 3. **Dashboard drilldowns**: enable viewers to dive deeper into a chart's data by bringing them to an additional dashboard view focused on the selected data from that chart. # Dashboard Drilldowns Source: https://docs.explo.co/creating-dashboards/drilldowns/dashboard-drilldowns Dashboard Drilldowns enable viewers to dive deeper into a chart's data by bringing them to an additional Dashboard View focused on the selected data from that chart. Dashboard Drilldown ## Demo Video To see a Dashboard Drilldowns demo, check out this Loom [here](https://www.loom.com/share/2b2588d9fd2848baa99740b2d785d313). ## Getting Started with Dashboard Drilldowns Here’s a few steps to start using Dashboard Drilldowns **Step 1: Choose a Dashboard** Navigate to the Edit view of a Dashboard that you’d like to create a Dashboard Drilldown View for. **Step 2: Navigate to the new Views section of the Edit modal** You’ll find a new tab on the right side of the Edit modal, allowing you to view Layers for your Dashboard. **Step 3: Create a new Dashboard Drilldown View** Click the plus sign to add a new View to your dashboard. When creating a new View, you’ll be asked to choose a Chart and Source Column for your Dashboard Drilldown to reference. Once you have created a new View, you’ll find that the reference Chart now has additional Actions while edited that are focused on Dashboard Drilldowns. **Step 4: Build out your Dashboard** Build out your new Dashboard as you would any other dashboard. You’ll find all datasets that have been imported previously are available for use in your Dashboard Drilldown. **Step 5: Save and Publish your new Dashboard Drilldown View** Saving and publishing processes remain the same with added Dashboard Views. Use Explo’s preview function to test out your new Dashboard Views! ## FAQ **Dashboard Drilldowns are currently in Early Release. What does Early Release mean?** Dashboard Drilldowns are available to be used in production environments, but you need to reach out to [support@explo.co](mailto:support@explo.co) in order to have it enabled for your account. **Which Charts does Dashboard Drilldowns work with today?** Today, Dashboard Drilldowns are available for two dimensional charts. In the future, you’ll find additional chart types added to this functionality. **How many Dashboard Views are able to be created for a dashboard?** In early release, Dashboards are able to have up to three levels of views to drill into. # Overview Source: https://docs.explo.co/creating-dashboards/drilldowns/filter-drilldowns Filter drilldowns allow you to filter charts based on selections made on other charts. For example you can select a row on table to further filter down a bar chart to only show orders based on the row selected. ## Using filter drilldowns Filter drilldowns can be linked to other visualizations the same way as control components. You have the option of configuring them in filter section or using the variables directly in the dataset editor. ## Charts that support drilldowns * Bar Charts * Tables # Bar Charts Source: https://docs.explo.co/creating-dashboards/drilldowns/filter-drilldowns/bar-charts Here's how to enable drilldowns for bar charts ### Enable Drilldowns The first step to setting up the drilldown is to enable it in the bar chart itself. In the config you can enable category selection in the drilldown menu. Select the option to turn on the drilldown. ### Variables When drilldown is turned on for that bar chart, a variable will be created for that chart. The underlying value will be assigned to a variable with the format `chart_id.category` as shown below. You can then use the new variable as you would any other variable generated from a filter or dropdown in the SQL editor or in the filter config for individual charts. For more information on how to use variables, you can reference the docs [here](/creating-dashboards/variables/using-variables). If the bar chart is grouped then two variables will be set once a value is selected like below. # Data Tables Source: https://docs.explo.co/creating-dashboards/drilldowns/filter-drilldowns/data-tables Here's how to enable drilldowns for data tables ### Enable Drilldowns In the config menu turn on drilldowns and then select a column from the table. The value for that column in the row you have selected will be set as the variable. ### Variables Once a row has been selected the value of the column set will be set as a variable with the key being the id of the table as seen below. # Underlying Data Drilldowns Source: https://docs.explo.co/creating-dashboards/drilldowns/underlying-data-drilldowns Easily expose the data powering different visualizations on your dashboard. Turn on underlying data drilldowns, go to the `actions` tab and enable the option “**Open a modal with a table of the underlying data**”. To open the drilldown modal, users can do one of the following: 1. Select the option in the triple dot menu on the top right of each component. 2. Click on a data point (bar, slice, point, etc.). This will create a table view of only data for that specific slice of the data. Once the modal has been opened the underlying data table can be treated as standard data tables. All filtering and exporting options are available on the drilldown tables. # Overview Source: https://docs.explo.co/creating-dashboards/ui-elements Explo offers a number of UI Elements you can add onto your dashboards. These elements are defined in 3 categories: Controls, Export, and Display. * Drag and drop these UI Elements onto your dashboard to use them. * To edit a UI element, **double-click on the component** and the editor will appear in the left side panel. ## Adding a new UI Element Drag a component onto the canvas to add it to your dashboard. Adding new components is easy! Simply drag the component onto the canvas to get started. You will see a hovering shadow, indicating where the component will go when you drop it. ## Filtering You can now filter charts directly from the UI elements. Scroll down to the bottom of the `Setup` page to see the configuration options. With the setup process, you will setup the following relationship:
`Selected Field` `Operator` `UI Element Value`
Some concrete examples:
`ecommerce_order_shipment_date` `is between` `date range`
`category_field` `is in` `multiselect dropdown values`
And so on...
The configuration process is below. First, select your operator. At this point, the charts on the dashboard will tell you that you need to Select a Field that the operator applies to. You can now select the field and which charts you want the filter to apply to. You will then get the message from the chart that the filter is configured. And now you have a filter configured for the charts! # Apply Filter Button Source: https://docs.explo.co/creating-dashboards/ui-elements/controls/apply-filter-button An apply filter button is used to enable your customers to trigger a refresh of the dashboard once certain filters have been changed. ## What it does The apply filter button is used to: * prevent the dashboard from reloading when configured filters are modified * instead allow your users to trigger the reload when they are done changing the filters ## Configuration ### Basic Configuration | Configuration Option | Description | | ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | Button Text | This is the text displayed on the button on the dashboard. It defaults to "Apply Filters" | | Show Icon | When toggled on, a filter icon is shown on the left side of the text in the button. It defaults to on. | | Show number of filters blocked | When toggled on, whenever a user changes a filter that is being controlled by the apply filter button, a number appears to the right of the button text indicating how many filters are currently stale and would be updated if the user clicks the button. | | Input Selection | This section shows you all the inputs you have on your dashboard (represented by the element ID). You then check the boxes for all inputs you would like to be linked to this button.
Any options selected will not refresh the dashboard automatically when changed. The values for the filter are only applied once the apply button is pressed | # Date Source: https://docs.explo.co/creating-dashboards/ui-elements/controls/date Date pickers allows your customers to filter the dashboard to a specific slice of data in time. ## What it does This component allows you to create a date picker input which your users can use to filter data. The data picker can be a single date, or a date range. When the element is added to the dashboard, it looks like: ### Single Date ### Date Range ## Configuration #### Single Date ### Single Date Basic Configuration | Configuration Option | Description | | --------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Include Time Selection | Toggle to allow users to select a time with the date | | Selectable Range | Define from which range users can select the single date value from. You can input exact dates (such as April 1 - April 20) or relative ranges (such as the last month). | | Default Value | Define the default value on dashboard loads. | | Label | Define the label of the component in the dashboard. | | Enable clearing selection | Allow users to clear the input with an X mark. | | Enable Dependency Selection | When enabled, you may create a dependency between this element and other elements on the dashboard. When this element is dependent on an element selected, it will be disabled until a value is selected by the user. | #### Date Range ### Date Range Basic Configuration | Configuration Option | Description | | --------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Selection UI | Allow your users to select from a preset list of options (such as previous quarter), allow a custom range they define, or both. | | Default Value | Define the default value on dashboard loads. | | Label | Define the label of the component in the dashboard. | | Enable clearing selection | Allow users to clear the input with an X mark. | | Set end date to end of day | This toggle allows you to select the end date in the range to refer to the end of the day, which is useful for SQL queries. Otherwise, it will refer to the beginning of the day. | | Use portal for popover | This toggle makes it so that the dropdown or multiselect components, when the dropdown portion is opened, won't be cutoff when extending beyond a container or the embed frame. | | Enable Dependency Selection | When enabled, you may create a dependency between this element and other elements on the dashboard. When this element is dependent on an element selected, it will be disabled until a value is selected by the user. | ### Customizable Date Range Presets If the pre-defined date ranges are insufficient (e.g. Today, Yesterday, Last 7 Days, etc.), you can create custom date range presets. Date range presets appear in the dropdown alongside the pre-defined date ranges. #### Usage Configuration for Start Date / End Date: * Now - Today's Date * Plus - Add to today's date (for future dates) * Minus - Subtract from today's date (for past dates) * StartOf - Sets the time to 00:00:00 * EndOf - Sets the time to 23:59:59 A preview of the current date range is shown to help you understand the range you are creating. Example of the Last 10 Days: Example of previous week: Example of last 12 completed months: ## Variable Usage To access the elements in the SQL editor, use the following syntax: For users connected to a BigQuery warehouse, you will need to cast the data variable to the correct data type using the code below. #### Single Date ```sql Typical Usage theme={null} WHERE 1=1 [[AND date_field >= {{datepicker1}}]] [[AND date_field <= {{datepicker2}}]] [[AND DATE(date_field) = {{datepicker3}}]] ``` ```sql Casting to Date Type theme={null} WHERE 1=1 [[AND date_field >= DATE({{datepicker1}})]] [[AND date_field <= DATE({{datepicker2}})]] [[AND DATE(date_field) = DATE({{datepicker3}})]] ``` ```sql Casting to Timestamp Type theme={null} WHERE 1=1 [[AND date_time >= TIMESTAMP({{datepicker1}})]] [[AND date_time <= TIMESTAMP({{datepicker2}})]] [[AND TIMESTAMP(date_time) = TIMESTAMP({{datepicker3}})]] ``` #### Date Range Date range pickers have two variables, `startDate` and `endDate`. All date ranges are updated when the dashboard is loaded or refreshed, filters are re-applied, or the date range is changed. These variables can be used in SQL queries like so: ``` --to reference the first date {{date_range_picker.startDate}} --to reference the second date {{date_range_picker.endDate}} --example WHERE 1=1 [[AND date_field >= {{date_range_picker.startDate}}]] [[AND date_field <= {{date_range_picker.endDate}}]] ``` ## Filtering UI Elements can filter charts, see [the overview page filtering section](/creating-dashboards/ui-elements#filtering). # Date Group Toggle Source: https://docs.explo.co/creating-dashboards/ui-elements/controls/date-group-toggle Date Group Toggles can be used to allow your users to group charts by selected time intervals A Date Group Toggle can be linked to charts to configure which time interval the chart is grouped by. This allows your users to select daily, weekly, monthly, or yearly views of their data. The date group toggle can only be linked to certain charts such as bar charts and line charts. It also requires a the data to be grouped by a date field. To configure a date group toggle, first drag the component onto the dashboard. Example of configured Date Group Toggle Next, select the chart you want to link, and click on the arrow beside the date field to group on. Select Date Group Toggle under user inputs. Select the correct component from the dropdown below. Your chart will now be configured to change based on the data group selected. ## Configuration #### Setup #### Preferences ### Basic Configuration Available by accessing the `Setup` and `Preferences` tabs | Configuration Option | Description | | --------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Filter Type | Choose whether your users can access the filter value via a dropdown or toggle element | | Set the filter values | Choose which filter values your users will have available to them | | Set the default value | Set the default selected value on dashboard load | | Label | Set the label for the Time Dropdown your users will see | | Group Labels | Change the labels of the dropdown options that your users see | | Enable Dependency Selection | When enabled, you may create a dependency between this element and other elements on the dashboard. When this element is dependent on an element selected, it will be disabled until a value is selected by the user. | ## Filtering You can now filter directly your charts in the UI elements themselves. For more information on this process, see the [filtering section of the overview page](/creating-dashboards/ui-elements#filtering). # Dropdown Source: https://docs.explo.co/creating-dashboards/ui-elements/controls/dropdown Dropdowns allow your customers to dynamically change the dashboard based on options they select. ## What it does This component allows you to create a select input that your users can interact with to filter and group data on the dashboard. There are three different configuration options: ### Dropdown Allows for a user to select a single value from a dropdown ### Multiselect Allows for a user to select multiple values from a dropdown ### Toggle Allows for a user to select a single value from a toggle view ## Configuration Setup Configuration panel for dropdown Preferences Configuration panel for dropdown ### Basic Config | Configuration Option | Description | | -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | Label | This text is the label given to the dropdown select on the dashboard. The label is placed above the dropdown. This field can be empty. | | Descriptive tooltip | Enable this element and use the textfield that pops up to give a tooltip element to your users to hover over to understand what the dropdown/multiselect/toggle does. | | Placeholder | This is the message shown in the dropdown when no option has been selected by the user yet (this option is not available for the toggle) | | Enable Filtering | This toggle controls whether or not the dropdown options menu is filterable. By default, the menu is filterable.
When filterable, a search input appears above the options that allows users to type text and filter down the options. This is recommended when your dropdown has a long list of options (this option is not available for the toggle). | | Disable dropdown if there are no items | This toggle allows for you to disable the dropdown if no options are present for selection (this option is not available for the toggle). | | Enable clearing selection | This toggle controls whether or not the user can click the "x" button to clear the selected option.
By default, this feature is enabled, meaning that users can clear out the selected option in a dropdown.
Disabled clearing selections in order to ensure that the dropdown will always have a value. | | Use Portal for Popover | This toggle makes it so that the dropdown or multiselect components, when the dropdown portion is opened, won't be cutoff when extending beyond a container or the embed frame. | | Enable Dependency Selection | When enabled, you may create a dependency between this element and other elements on the dashboard. When this element is dependent on an element selected, it will be disabled until a value is selected by the user. | ### Manual vs. Query There are two ways to supply options to the dropdown. **Manual** dropdowns allow you to provide hardcoded values. **Query** dropdowns allow you to specify the options based on a dataset defined on the dashboard. This is useful for when you want to dynamically populate the dropdown with options from you database ### Manual Config Manual dropdowns are powered by hardcoded lists of strings or numbers. You may provide only a `Values` list, in which case the values will be use to display the options. The Values, Displays, and Default Value fields all take in inputs as javascript. This means that you must put quotes around strings. For example: **Invalid**: `[option-1, option-2, option-3]` **Valid**: `["option-1", "option-2", "option-3"]` | Configuration Option | Description | | --------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Values | This option takes in a list of strings and numbers. When a user selects an option from the dropdown, the associated value is what will be used in the SQL query to filter or group the data.
This list is defined as javascript and so you must use quotes on strings. | | Displays | This option takes in a list of strings and numbers. This will define what the dropdown options look like when a user opens the dropdown.
When the user selects an option, the value used in the SQL query will be the corresponding `Value` option.
The `Displays` list should have the same number of elements as the `Values` list. | | Default Value | This option takes in a string or number. This defines what option the dropdown will start with when the page loads.
Use this option, in tandem with the disabling clearing selections, to ensure that the dropdown always has a value present. | | Enable Dependency Selection | When enabled, you may create a dependency between this element and other elements on the dashboard. When this element is dependent on an element selected, it will be disabled until a value is selected by the user. | ## Query Config Query dropdowns use a dataset to power the contents of the dropdown. You must define the dataset to power the dropdown using the SQL editor on the dashboard editing page. | Configuration Option | Description | | ----------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Dataset | This is a dataset defined on the dashboard which will be used to populate values for the dropdown | | Values Field | From the selected dataset, the columns on the table are available to select for the values field. This field represents what value will be used when the dropdown is selected. If no display field is selected, this will also be used to display the options | | Displays Field | Also from the selected dataset, the columns on the table are available to select for the display field. The associated display will be shown in the dropdown. If the user selects that option, the value is what will be used in the [variable](/creating-dashboards/variables). | | Default to first option | If you would like to make your dropdown start with a default value, you can select this option. We will then pick the first value from the dataset when we query it and load the dashboard with that value. | | Sort Options | Pick from amongst the sort options to pick how you would like the dataset sorted in the dropdown or multiselect (not available for the toggle). | Use the DISTINCT statement in SQL to only pull a distinct list of options for the dropdown options ## Variable Usage In the SQL query, when using dropdown or toggle, use the following ```sql theme={null} --- basic usage: WHERE 1=1 [[AND column_1 = {{name_of_dropdown_or_toggle}}]] ``` In the SQL query, when using multiselect, use the following ```sql theme={null} --- basic usage: WHERE 1=1 [[AND column_1 in {{name_of_multiselect}}]] ``` ## Filtering You can now filter directly your charts in the UI elements themselves. For more information on this process, see the [filtering section of the overview page](/creating-dashboards/ui-elements#filtering). # JS Event Button Source: https://docs.explo.co/creating-dashboards/ui-elements/controls/js-event-button The JavaScript Event Button enables users to trigger custom JavaScript events. ## What it does The Javascript Event Button emits a custom JavaScript event, facilitating the execution of additional scripts in response. ## Configuration ### Basic Configuration | Configuration Option | Description | | -------------------- | ----------------------------------------------------------------------------------------------------------- | | Button Text | This is the text displayed on the button on the dashboard. It defaults to "JS Event" | | JS Event Name | Specifies the custom JavaScript event name to emit. Note: Leaving this field blank will disable the button. | The detail body that is passed with the javascript event contains the `customerName` and the `customerProvidedId` for the customer who clicked the button. ### Example Code ``` ``` # Refresh Dashboard Button Source: https://docs.explo.co/creating-dashboards/ui-elements/controls/refresh-dashboard-button A refresh dashboard button is used to enable your customers to trigger a refresh of the dashboard manually. This component may cause undesired behavior if the cache is enabled. For more information, visit [this page.](/dashboard-features/dashboard-caching#how-dashboard-caching-works-in-practice) ## What it does The refresh dashboard button is used to manually refresh all of the data panels on the dashboard to ensure they have the most up-to-date data ## Configuration ### Basic Configuration | Configuration Option | Description | | -------------------- | ------------------------------------------------------------------------------------------------------- | | Button Text | This is the text displayed on the button on the dashboard. It defaults to "Refresh Dashboard" | | Show Icon | When toggled on, a refresh icon is shown on the left side of the text in the button. It defaults to on. | # Slider Source: https://docs.explo.co/creating-dashboards/ui-elements/controls/slider Sliders allow your customers to be able to select values within a range. ## What it does This component allows your customers to select values within a range. These values can be used to filter the data. ## Configuration ### Basic Configuration | Configuration Option | Description | | --------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Label | The is the label that appears on the left side of the slider. It defaults to "Slider". The toggle allows you to choose whether or not to display this label. | | Descriptive Tooltip | This can be configured to display a helpful popover to the customer. The toggle allows you to choose whether or not to display the tooltip. | | Show thumb labels | This allows you to show or hide value labels below each thumb on the slider. | | Set Default Value | Specify the default values for the thumbs. | | Enable Dependency Selection | When enabled, you may create a dependency between this element and other elements on the dashboard. When this element is dependent on an element selected, it will be disabled until a value is selected by the user. | | Minimum value | The minimum (leftmost) value of the slider. | | Maximum value | The maximum (rightmost) value of the slider. | | Number of thumbs | The number of thumbs on the slider. | | Step size | How much each thumb jumps between values. The minimum step size is 1. | ## Variable Usage Each thumb on the slider has a corresponding variable. The leftmost thumb is `thumb_1`, the second (from the left) thumb is `thumb_2`, etc. In the SQL query, use the following syntax ```sql theme={null} --- basic usage: WHERE 1=1 [[AND column_1 > {{slider_1.thumb_1}} AND column_1 < {{slider_1.thumb_2}}]] ``` ## Filtering You can now filter directly your charts in the UI elements themselves. For more information on this process, see the [filtering section of the overview page](/creating-dashboards/ui-elements#filtering). # Switch Source: https://docs.explo.co/creating-dashboards/ui-elements/controls/switch Switches allow your customers to be able to move between two configured states of your dashboard. ## What it does This component allows you to configure your dashboard so your customer can shift between two different states. ## Configuration ### Basic Configuration | Configuration Option | Description | | --------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Label | The is the label that appears on the left side of the switch. It defaults to "Switch". The toggle allows you to choose whether or not to display this label. | | Descriptive Tooltip | This can be configured to display a helpful popover to the customer. The toggle allows you to choose whether or not to display the tooltip. | | On/Off Label | This is the label that appears on the right side of the switch, and it denotes the status of the switch. The toggle allows you to choose whether or not to display this label. | | On/Off Value | This allows you to configure the value of the corresponding variable for this element. The default values are `true` for On and `false` for Off. | | Set Default Value | Specify if default should be on or off | | Enable Dependency Selection | When enabled, you may create a dependency between this element and other elements on the dashboard. When this element is dependent on an element selected, it will be disabled until a value is selected by the user. | ## Variable Usage In the SQL query, use the following syntax ```sql theme={null} --- basic usage: WHERE 1=1 [[AND column_1 = {{switch1}}]] --- filter a chart based on a column if switch is on, do nothing if switch is off WHERE [[(({{switch1}} = 'true' AND column_1 = true) OR ({{switch1}} = 'false'))]] ``` ## Filtering You can now filter directly your charts in the UI elements themselves. For more information on this process, see the [filtering section of the overview page](/creating-dashboards/ui-elements#filtering). # Text Input Source: https://docs.explo.co/creating-dashboards/ui-elements/controls/text-input The text input element allows you to process user inputted text on your dashboard. Text Input element ## What it does The text input allows you to capture a users text input and configure the dashboard to respond to the inputted text. ## Configuration ### Basic Configuration Available by accessing the `Setup` and `Preferences` tabs | Configuration Option | Description | | --------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Allowable entries | Select between whether a user can input all characters, or just numbers in the textfield | | Default Value | Set a default value for the text input available on load | | Label | This label appears above the text input and can be configured to describe how the text input should be used. | | Placeholder Text | This is the message shown in the text input when no input has been written by the user yet. | | Search Icon | This icon can be toggled on if the text input is being used as a search bar. | | Enable Dependency Selection | When enabled, you may create a dependency between this element and other elements on the dashboard. When this element is dependent on an element selected, it will be disabled until a value is selected by the user. | ## Variable Usage In the SQL query, use the following syntax ```sql theme={null} --- search bar usage: If you wish to use this text input element as a search bar for, --- a data table, you can configure the SQL editor like this, and the user will be --- able to search the table based on column_1 WHERE 1=1 [[AND column_1 = {{text_input1}}]] ``` ## Filtering You can now filter directly your charts in the UI elements themselves. For more information on this process, see the [filtering section of the overview page](/creating-dashboards/ui-elements#filtering). # Time Dropdown Source: https://docs.explo.co/creating-dashboards/ui-elements/controls/time-dropdown Time Dropdown allows your users to select time periods in your dashboards. Time Dropdown element ## What it does This element allows your users to select time periods in your dashboards. Example of configured Time Dropdown ## Configuration ### Basic Configuration Available by accessing the `Setup` and `Preferences` tabs | Configuration Option | Description | | --------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Set Filter Values | In this section, you can add and reorder options your users can select from. You choose the name of the value (ex. Last 7 days) and the minutes that represents (ex. 10,080). | | Default Value | Set the default selection for the Time Dropdown | | Label | Set the label your users see for the dropdown | | Enable Filtering | Allow your users to search within the dropdown for values | | Enable Clearing Selection | Allow your users to clear the dropdown with an X | | Use Portal for Popover | When enabled, prevents the dropdown options from being hidden when overflowing. Applicable to both overflow from a container and the embed component itself. | | Enable Dependency Selection | When enabled, you may create a dependency between this element and other elements on the dashboard. When this element is dependent on an element selected, it will be disabled until a value is selected by the user. | ## Variable Usage In the SQL query, use the following syntax ```sql theme={null} WHERE 1=1 [[AND DATE_DIFF(CURRENT_TIMESTAMP(), timestamp, MINUTE) < {{time_period_dropdown_1}}]] ``` ## Filtering You can now filter directly your charts in the UI elements themselves. For more information on this process, see the [filtering section of the overview page](/creating-dashboards/ui-elements#filtering). # Toggle Source: https://docs.explo.co/creating-dashboards/ui-elements/controls/toggle The Toggle element allows you to create a single select toggle in your dashboard. Toggle element ## What it does The toggle element allows for you to create a single select element to pick from. What a toggle looks like This view is also configurable from the Dropdown component. For more on the Toggle element, see the [Dropdown Section](/creating-dashboards/ui-elements/controls/dropdown). # Container Source: https://docs.explo.co/creating-dashboards/ui-elements/display/container Containers can be used to group other components together and organize your dashboard. ## What it does This component allows you to group elements together on your dashboard. For example: A container with 3 different charts inside of it ## Adding elements To add an element to a container, drag it in over the container. # IFrame Source: https://docs.explo.co/creating-dashboards/ui-elements/display/iframe IFrames can be used to insert another html document within your dashboard ## What it does This component allows you to insert another html document within your dashboard. ## Configuration | Configuration Option | Description | | -------------------- | ---------------------------------------------------------------------- | | IFrame URL | This is the url of the web page you want to insert into your dashboard | # Image Source: https://docs.explo.co/creating-dashboards/ui-elements/display/image Images can be added to your dashboard via this UI element. ## What it does This component allows you to add an image to your dashboard. ## Configuration | Configuration Option | Description | | ------------------------------------ | ------------------------------------------------------------------------------------------------ | | Image URL | This is the url of the image you want to add. | | Fit entire image in container toggle | Sets if the image should auto fill the size of the container or be the default size of the image | # Text Source: https://docs.explo.co/creating-dashboards/ui-elements/display/text Text elements allow you to communicate information in markdown to your customers. ## What it does This component allows you to add a block of text to your dashboard. Use this component for any labeling and providing additional information for your user. The **Text Component** supports Markdown to give you the flexibility to configure the style and sizing of your text. You can reference the article [here](https://www.markdownguide.org/basic-syntax/) for Markdown. You can also utilize variables in your text component by using the `{{element#}}`notation. This is great for adding company names into your dashboards or dynamically describing charts and graphs. ## Configuration Configuration for a text element | Configuration Option | Description | | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | Text | This is a text area that allows you to type in free form text. Our text elements understand markdown, enabling you to make complex text views in your dashboards. | | Text Size | This allows you to manage the size of the text that appears on the dashboard.
There are three options:
• Normal (default)
• Large
• Extra Large | | Alignment | Alignment defines the horizontal & vertical placement of the text inside of the container on the dashboard. There are 3 options in the horizontal direction:
• Left aligned (default)
• Center aligned
• Right aligned
There are 3 options in the vertical direction:
• Top aligned (default)
• Center aligned
• Bottom aligned | ## Markdown formatting The text element uses markdown formatting to format the text onto the page. This gives you access to powerful text formatting. Please reference a markdown guide, such as [this one](https://www.markdownguide.org/basic-syntax/), for more information on the specific syntax available. ## Dynamically Generated Values You may use dynamically generated values in your text elements by using the `{{ }}` notation, similar to the dataset SQL editor. These values can either be generated from custom variables or through data queried against your Explo datasets. ### Using Variables The variables you have access to are all the variables in the page defined by user inputs, the customers, and passed in from the embedded component. A variable being used in a text component For example, in the above dashboard we are using the `customer_name` variable to make the text shown on the screen be dynamic. ### Using Datasets For dynamic values from datasets, you need to supply both the table name and the column you would like read from. Explo will select the first row of whatever column and table you specify, so you will likely want to make a specific dataset that aggregates a value and then pass that dataset to the text component. A dataset being used in a text component For example, in the above dashboard we are using the *customers* column from *dataset1* to make the text shown on screen to be dynamic. # Share Button Source: https://docs.explo.co/creating-dashboards/ui-elements/export/share-button Share Button allows for you to create sharing and export options for your users on your dashboard. ## What it does This element allows for you to create sharing and export options for your users on your dashboard. When the element is added to the dashboard, it looks like: ## Configuration Configuration panel for dropdown select ### Basic Configuration | Configuration Option | Description | | -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | | Button Label | Specify the label of the share button users will see | | Popover Title | Specify the title when someone selects "Share to Web" | | Popover Subtitle | Specify the subtitle when someone selects "Share to Web" | | Share Link Toggle | Specify whether users can "Share to Web" | | Share Page Title | Specify the title of the webpage users with the share link see in their browser tab when visiting the page | | Share Link Expiration | Specify the amount of time a share link is active before it expires[ISO08601 duration format](https://en.wikipedia.org/wiki/ISO_8601#Durations) | | Enable Password Protection | Specify a password is required to see the share link page | | Enable Username Protection | Specify a username is required to see the share link page | | Enable Image Download | Specify whether users can download an image via the share link | | Enable PDF Export | Specify whether users can download a PDF | | Download file name | Specify the filename users will see when downloaded | # Overview Source: https://docs.explo.co/creating-dashboards/variables Variables are used to filter and manipulate queries throughout dashboards and reports. Variables can be used to segment data depending on the viewer to ensure they only see their own data as well as provide interactions for your viewers. ## What are Variables? Variables are created by default for every dashboard or report you build. You can also create variables by adding any control component or creating custom variables that you can pass in. Learn more about the different types of variables [here](/creating-dashboards/variables/types-of-variables). You can find all the variables you have access to by selecting the icon in the top-middle of your screen and then "Variables" on the right tab. You can find all the variables you have access to by selecting the `{}` icon at the top of the left hand side configuration tab. Create and manage custom embedded variables in the variables panel by selecting "Variables" and "Add an embed variable". # Passing in Variables Source: https://docs.explo.co/creating-dashboards/variables/passing-in-variables ### Embedded Component When you embed an Explo Dashboard using an embedded component, you can pass in variables directly which are then available anywhere in the dashboard that accepts variables. ```html theme={null} ``` As demonstrated above, you can pass in a set of key value pairs that define new variables that you can use in your dashboard. Full documentation for the embedded component can be found [here](/embedding-documentation/dashboard/option-1-web-component). ### URL Parameters On any page that loads an Explo dashboard, such as with the embedded component, an IFrame URL, or the share URL, Explo looks at the URL to see if any variables are defined there. Here are some example IFrame `src`'s showing how to embed variables: ```html theme={null} src='https://app.explo.co/iframe/[JWT]/?var_1="hello"' src='https://app.explo.co/iframe/[JWT]/?var_2=%22hello%22' src='https://app.explo.co/iframe/[JWT]/?var_3=["49b11f75-15ad-446f-836c-29d0028ac3b7","d621e24b-4af3-4218-a47e-88bfc4e99b25"]' src='https://app.explo.co/iframe/[JWT]/?var_4=%5B%2249b11f75-15ad-446f-836c-29d0028ac3b7%22%2C%22d621e24b-4af3-4218-a47e-88bfc4e99b25%22%5D' src='https://app.explo.co/iframe/[JWT]/?var_5="{\"result\":[{\"dateChanged\":\"2010-10-10T10:10:10.000Z\",\"stores\":[\"All\"]}]}"' ``` The Explo dashboard will take the value set to `var_1`, `var_2`, etc as a variable and use the associated value. To test the variables that may be passed in via URL, look at the Variables tab. When passing in a variable via the URL, it must be URL encoded. Below is an example dashboard and the associated variables that may be passed in via URL: # Tips Source: https://docs.explo.co/creating-dashboards/variables/tips ### Segmenting customer data `{{customer_id}}` * The customer variable is a default variable that's already created in every dashboard. * It is important to use this variable in every dataset that a panel is built off of if you want it to be customer specific. To configure this, select the field that has your customer's ID and set it equal to `{{customer_id}}` ```sql Example theme={null} SELECT * FROM table_1 [[WHERE user_id = {{customer_id}}]] ``` ### Additional operators Variables can be used with other operators as well to achieve different filtering needs ```sql theme={null} --use the in operator when configuring a multi-select component [[WHERE field1 in {{element1}}]] --filter for similar values using like [[WHERE field_3 LIKE '%' || {{element3}} || '%']] --relative date and number operators [[WHERE field_3 >= {{element3}}]] ``` ### Improving query speed by filtering before joining In general, it is best to filter tables before joining to other tables, by doing so, you can significantly cut down the calculation and query time needed to compute the entire query. ```sql Example theme={null} --Original Query SELECT * FROM models_operation INNER JOIN models_flow ON models_flow.resource_ptr_id = models_operation.flow_id INNER JOIN models_datasource ON models_datasource.id = models_operation.data_source_id [[WHERE models_datasource.team_id = {{customer_id }}]]; --Improved Query SELECT * FROM models_operation INNER JOIN models_flow ON models_flow.resource_ptr_id = models_operation.flow_id INNER JOIN (SELECT * FROM models_datasource [[WHERE models_datasource.team_id = {{customer_id }}]] ) AS ds ON ds.id = models_operation.data_source_id; ``` # Overview Source: https://docs.explo.co/creating-dashboards/variables/types-of-variables There are a few main ways that variables are introduced into the application: 1. Customer-Specific Varibles 2. Dashboard Elements (Controls) 3. Data Panels (Drilldowns) 4. Embed Variables 5. Dataset Fields 6. Raw Variables # Customer-Specific Variables Source: https://docs.explo.co/creating-dashboards/variables/types-of-variables/customer-object A customer entity is an object representing a customer at any level of the customer hierarchy. Customer entities can be referenced as a variable in: * Dataset queries * Text components * Chart titles * Goal lines * Progress goal totals Customer image Customer entity specific variables that are created on the Customers page or via the API can be referenced. These variables are all automatically set based on the customer entity viewing the data. ### Archetype Variables In order to filter down data to a specific customer entity, a few variables are provided depending on where the customer exists within the hierarchy. We call these archetype variables, and they must be defined in order to be used in a query. If an archetype variable is referenced in a query without being defined and it is not explicitly marked as optional, the data panel will error out. By default, your team will have two hierarchy levels. The top level will be named `Customer` and the bottom level will be named `User`. You will receive archetype variables that correspond to these hierarchy level names, and they are detailed in the section below. You can view and change the hierarchy level and parent configuration for each customer entity on the Customers page. You can also view customer entity archetype variables on the Customers page. If you'd like a different hierarchy setup or archetype variable configuration than the default, please reach out to customer support. ### Default Archetype Variables If the customer entity belongs to the top-level of the hierarchy (Customer level): * `customer_id` : This is the given `provided_id` for this customer entity when you [create a customer](/api-reference/customer-api). * `customer_name` : This is the `name` provided for this customer entity when the customer is created. If the customer entity belongs to the bottom-level of the hierarchy (User level): * `user_id` : This is the given `provided_id` for this customer entity. * `user_name` : This is the `name` provided for this customer entity. * **\[inherited]** `customer_id` : If this customer entity has a parent set, this field will be inherited from its parent. So, it will be the `provided_id` of the parent customer entity. If this customer entity does not have a parent, `customer_id` will be null, and you will not be able to use it in a query unless you explicitly mark it as `optional`. This means your data panel will error out. * **\[inherited]** `customer_name` : If this customer entity has a parent set, this field will be inherited from its parent. So, it will be the `name` of the parent customer entity. If this customer entity does not have a parent, `customer_name` will be null, and you will not be able to use it in a query unless it is marked as `optional`. This means your data panel will error out. ### Optional Archetype Variables You may want to be able to use the same query to view as customer entities across hierarchy levels. You can use the explicit `.optional()` syntax to enable this. When viewing a dashboard as an entity at the higher hierarchy level, there are no lower hierarchy level archetype variables defined. From the default example above, the archetype variable `user_id` is not defined at the Customer hierarchy level since it only exists on the User level. That means this query would fail: ``` select * in table where 1=1 [[AND customer_id = {{ customer_id }}]] [[AND user_id = {{ user_id}}]] ``` To remedy this, we can mark the `user_id` variable as optional. It will now be removed from the query when undefined instead of raising an error. A dashboard that uses this query can be viewed by customer entities on both the Customer and User hierarchy levels. ``` select * in table where 1=1 [[AND customer_id = {{ customer_id }}]] [[AND user_id = {{ user_id.optional() }}]] ``` ### Custom Properties In addition to the archetype variables, you may also add your own, custom properties on the Customers page. When setting up your own properties, you may not overwrite any of the archetype variables. Customer entities at any hierarchy level will have access to: * `properties.*` : All variables passed in the `properties` object when the customer entity is created are accessed through this format. So for example if you have a key in the properties object called `filter_value` then you can access that value by using `properties.filter_value`. This will include any `properties` a customer entity has inherited from a set parent. You can see which properties have been inherited versus which have been set on the Customers page when editing a customer entity. ### Summary Table Here is a summary of which variables are available for a customer entity at each hierarchy level with the default archetype configuration: | | Top (Customer) Level | Bottom (User) Level | | -------------- | -------------------- | -------------------------------------------------------------- | | customer\_id | available | available if inherited from parent | | customer\_name | available | available if inherited from parent | | user\_id | unavailable | available | | user\_name | unavailable | available | | properties.\* | available | available (and includes inherited properties if parent is set) | Customer variable names including `properties` and any of the archetype variable names are reserved and cannot be used for dashboard elements or custom variables. To learn more about how to set these variables when creating the customers, reference our customer API docs [here](/api-reference/customer-api). # Dashboard Elements (Controls) Source: https://docs.explo.co/creating-dashboards/variables/types-of-variables/dashboard-elements-controls Customer objects can be referenced as a variable in: * Dataset queries * Text components * Chart titles * Goal lines * Progress goal totals **General** \ All controls create variables when they are dragged onto the dashboard. Filter variable To use dashboard elements, simply reference the component ID. For instance, in the example above the component ID is `filter_1`. **Date Range Picker** \ The [date range picker](/creating-dashboards/ui-elements/date-range-picker) creates two variables, one for the start date and another for the end date. Both will be shown on the variables tab in the debugger panel. Assuming, in this example, the component ID for the date range picker is `date_range_picker` these are the two variables created: * `date_range_picker.startDate` * `date_range_picker.endDate` **Default values** \ These variables get set when your users interact with the element and select a value. When configuring the component, you will also have the option to set default values so that the dashboard loads preselected with certain options. # Data Panels (Drilldowns) Source: https://docs.explo.co/creating-dashboards/variables/types-of-variables/data-panels-drilldowns Customer objects can be referenced as a variable in: * Dataset queries * Text components * Chart titles * Goal lines * Progress goal totals Data panels can be used as filters when category selection is enabled. To learn more about enabling category selection, reference the docs [here](/creating-dashboards/drilldowns). * `data_panel.category`: enable on format tab for bar charts and tables # Dataset Fields Source: https://docs.explo.co/creating-dashboards/variables/types-of-variables/dataset-fields Any field in a dataset can be referenced as a variable in different components such as: * Text components * Chart titles * Goal lines * Progress goal totals To use a value, use the following syntax. Note that this can only pull the value in the first row of that dataset. * `dataset_name.field_name`: This is the dataset name and which field you want to reference in that dataset Dataset fields can only be used in dashboard components and can not be referenced in other datasets. # Embed Variables Source: https://docs.explo.co/creating-dashboards/variables/types-of-variables/embed-variables Customer objects can be referenced as a variable in: * Dataset queries * Text components * Chart titles * Goal lines * Progress goal totals * Any input field on a chart Format tab that has a `` by the name. Embed variables allow users to pass in parameters through the embed code and not on-dashboard components. Click on `Add an embed variable` on the [variable tab](/creating-dashboards/variables) to create and delete embed variables. Embed variables can be created in the Variables panel. These variables are referenced directly with the variable name that you provide. * `variable_name`: This is the variable name you entered when creating the custom variable ### Using embed variables for axis aggregation Some axes and chart types support aggregating date-type columns using embed variables. To use this feature, you must use pass in variables with the following format: * `DATE_HOUR`: Hour * `DATE_DAY`: Day * `DATE_WEEK`: Week * `DATE_MONTH`: Month * `DATE_YEAR`: Year * `DATE_PART_WEEK_DAY`: Day of Week * `DATE_PART_MONTH_DAY`: Day of Month * `DATE_PART_MONTH`: Month of Year * `DATE_PART_HOUR`: Hour of Day # Raw Variables Source: https://docs.explo.co/creating-dashboards/variables/types-of-variables/raw-variables Any field in a dataset can be referenced as a variable in different components such as: * Dataset queries Variables in **dataset queries** can be manipulated by adding different suffixes as follows: * `variable.raw()`: By default, the values that is pasted into queries are surrounded in quotes or formatted based on the variable type. Adding `.raw()` strips away any sort of formatting. This is often required if you are using a variable as a table name, or using the variable in clauses that don’t require the value to be in quotes. ``` -- use a variable name in the from statement select * [[from tablename.{{customer.table_name.raw()}}]] ``` # Using Variables Source: https://docs.explo.co/creating-dashboards/variables/using-variables ### In Datasets All variables are contained in double curly brackets `{{ }}`, Explo will recognize any text in-between curly brackets in your SQL query as a variable. Double square brackets `[[ ]]` are used for where clauses with variables such that if there is no variable selected, Explo will ignore the code between the square brackets. All variable clauses must be placed inside square brackets. Example of where clause using a variable in square brackets: ```sql theme={null} [[WHERE field1 = {{element1}}]] ``` When filtering by 2 different fields, you can use the syntax below to contain the "and" in the square brackets. The `1 = 1` is required here otherwise there will be an incomplete clause statement if neither filter is configured. ```sql theme={null} WHERE 1=1 [[and field1 = {{element1}}]] [[and field2 = {{element2}}]] ``` ### In Data Panels Instead of writing SQL to filter your datasets, you can filter specific data panels by variables directly. To do this, drag the field you want to filter into the Filter section. Then select the Variable option for the filter value input: Filtering a chart by date You will then have the option to select the variable defined on the page that you want to filter by. You will only be shown options for variables that are the correct type. For example, if you are filtering a date field, we will only show you date-picker variables. Now when the date picker is used, the data panel will filter down its data to the selected range! ### In JS Events Update variables with outgoing JS events. Learn more about outgoing JS events, like `updateExploDashboardVariable` [here](/general-features/custom-js-events#outgoing-events). ### Data Panel Built-In Variables **KPI Trend** The following variables can be used in the KPI panel's `Subtitle` field. The final result where the variables are replaced with the actual dates Using both variables in the subtitle field | Variable | Description | | ----------------------- | --------------------------------------------------------------------------------------------------------- | | `{{current_period}}` | This is the current period of data that will be used as the basis for comparison e.g. Jun 11 - Aug 12 | | `{{comparison_period}}` | This is the period that the current\_period is compared to for calculating the trend e.g. July 9 - Jun 10 | ### Text Component and Other Fields Variables can be used to replace static text and values in a variety of components and fields. Reference variables the same way you do in the dataset editor. * Text components * Chart titles * Goal lines * Progress goal totals # Area Chart Source: https://docs.explo.co/creating-dashboards/visualizations/charts/area-chart Available Area Chart Types: Area and 100% Area Chart ## Data Configuration #### Chart Type You can read about this section [here](/creating-dashboards/visualizations/data-tab#chart-type). #### X-Axis This section is for the field you wish to group the area chart by. #### Y-Axis This section is for the field you wish to aggregate the area chart on. You can add multiple columns into this section. Each column will appear as a separate line on the chart. #### Group By This section is for additional grouping on the area chart. If there is a column in this section, there will be as many areas on the chart as there are groups in the specified column. It is also possible to add multiple columns in this section. If multiple columns are selected, the end user will be able to toggle between the group by options on the chart. More info about this can be found [here](/creating-dashboards/visualizations/format-tab/chart-level-filters). It is not possible to have multiple aggregations **and** a group by column. #### Filter Read about the `Filter` section [here](/creating-dashboards/visualizations/data-tab#filter). ## Formatting #### Header Read about the `Header` section [here](/creating-dashboards/visualizations/format-tab/overview#header). #### X-Axis Read about the `X Axis` section [here](/creating-dashboards/visualizations/format-tab/x-axis). #### Y-Axis Read about the `Y Axis` section [here](/creating-dashboards/visualizations/format-tab/y-axis). #### Enable Download Read about the `Enable Download` section [here](/creating-dashboards/visualizations/format-tab/overview#enable-download). #### Tooltip Read about the `Tooltip` section [here](/creating-dashboards/visualizations/format-tab/overview#tooltip). #### Goal Line Read about the `Goal Line` section [here](/creating-dashboards/visualizations/format-tab/goal-lines). #### Area Chart * **Line Elasticity:** This section specifies the line elasticity of the line at the top of the area. It can either be curved or straight. * **Line Width:** This section specifies the width of the line at the top of the area. * **Show Markers:** This section enables dot markers at each point on the area chart. * **Include missing dates:** This section will extend the X-Axis to include dates that are not present in the data, but may be specified by the filters. * **Fill in missing dates with 0s:** This section will add zeros to the chart when there are missing dates in the data, when the X Axis is a timeseries. * **Fill in missing values with 0s:** This section will add zeros to the chart when there are dates with missing values in the data, when the X Axis is a timeseries. * **Reverse Group Order** This section will flip the order of the categories on the x axis. #### Data Labels Read about the `Data Labels` section [here](/creating-dashboards/visualizations/format-tab/data-labels). #### Legend Read about the `Legend` section [here](/creating-dashboards/visualizations/format-tab/legends). #### Colors Read about the `Colors` section [here](/creating-dashboards/visualizations/format-tab/overview#colors). #### URL Link Read about the `URL Link` section [here](/creating-dashboards/visualizations/format-tab/overview#url-link). #### No Data Configuration Read about the `No Data Configuration` section [here](/creating-dashboards/visualizations/format-tab/overview#no-data-configuration). #### Expose Underlying Data Read about the `Expose Underlying Data` section [here](/creating-dashboards/drilldowns/underlying-data-drilldowns). # Bar Chart Source: https://docs.explo.co/creating-dashboards/visualizations/charts/bar-chart Available Bar Chart Types: Vertical, 100%, Grouped, Grouped Stacked, Horizontal, Horizontal 100%, Horizontal Grouped, Horizontal Grouped Stacked ## Data Configuration ### Standard #### Chart Type You can read about this section [here](/creating-dashboards/visualizations/data-tab#chart-type). #### X-Axis This section is for the field you wish to group the bar chart by. #### Y-Axis This section is for the field you wish to aggregate the bar chart on. You can add multiple columns into this section. Depending on the type of bar chart, the additional columns in this section will appear either as stacks on top of each other, or bars next to each other. For Horizontal bar charts, the X and Y axis sections are swapped. #### Group By This section is for additional grouping on the bar chart. The type of bar chart will determine how the grouping is applied. For vertical bar charts, 100% charts, horizontal bar charts and horizontal 100% bar charts, the grouping will split the bar for each X-Axis category (Y-Axis for horizontal bar charts) into multiple sections stacked on top of each other. For grouped and horizontal grouped bar charts, the grouping will create multiple bars next to each other (on top of each other for horizontal bars) for each X-Axis category (Y-Axis for horizontal bar charts). It is also possible to add multiple columns in this section. If multiple columns are selected, the end user will be able to toggle between the group by options on the chart. More info about this can be found [here](/creating-dashboards/visualizations/format-tab/chart-level-filters). It is not possible to have multiple aggregations **and** a group by column. #### Filter Read about the `Filter` section [here](/creating-dashboards/visualizations/data-tab#filter). ### Advanced #### Clusters For grouped stacked bar charts, this section will split each bar on the X-Axis (Y-Axis for horizontal grouped stacked bar chart) into multiple sections, all stacked on top of each other in a single bar. #### Stacks For grouped stacked bar charts, this section will create multiple bars next to each other (on top of each other for horizontal grouped stacked bar chart) for each group in the specified field. ## Formatting #### Header Read about the `Header` section [here](/creating-dashboards/visualizations/format-tab/overview#header). #### Sorting Read about the `Sorting` section [here](/creating-dashboards/visualizations/format-tab/sorting). #### X-Axis Read about the `X Axis` section [here](/creating-dashboards/visualizations/format-tab/x-axis). #### Y-Axis Read about the `Y Axis` section [here](/creating-dashboards/visualizations/format-tab/y-axis). #### Enable Download Read about the `Enable Download` section [here](/creating-dashboards/visualizations/format-tab/overview#enable-download). #### Tooltip Read about the `Tooltip` section [here](/creating-dashboards/visualizations/format-tab/overview#tooltip). #### Goal Line Read about the `Goal Line` section [here](/creating-dashboards/visualizations/format-tab/goal-lines). #### Bar Chart * **Include missing dates:** This section will extend the X-Axis to include dates that are not present in the data, but may be specified by the filters. #### Data Labels Read about the `Data Labels` section [here](/creating-dashboards/visualizations/format-tab/data-labels). #### Legend Read about the `Legend` section [here](/creating-dashboards/visualizations/format-tab/legends). #### Colors Read about the `Colors` section [here](/creating-dashboards/visualizations/format-tab/overview#colors). #### URL Link Read about the `URL Link` section [here](/creating-dashboards/visualizations/format-tab/overview#url-link). #### No Data Configuration Read about the `No Data Configuration` section [here](/creating-dashboards/visualizations/format-tab/overview#no-data-configuration). #### Expose Underlying Data Read about the `Expose Underlying Data` section [here](/creating-dashboards/drilldowns/underlying-data-drilldowns). # Box Plot Source: https://docs.explo.co/creating-dashboards/visualizations/charts/box-plot ## Data Configuration #### Chart Type You can read about this section [here](/creating-dashboards/visualizations/data-tab#chart-type) #### Grouping This section is for the field you wish to group chart by. Each group will have a box and whisker plot. #### Calculation This section is for the field you wish to calculate the box and whisker values for. These values are: Maximum, Upper Quartile, Median, Lower Quartile, and Minimum. #### Filter This section is for filtering the chart based on certain columns. You can read about chart filtering [here](/creating-dashboards/visualizations/data-tab#filter). #### Header Read about the `Header` section [here](/creating-dashboards/visualizations/format-tab/overview#header). #### Y-Axis Read about the `Y Axis` section [here](/creating-dashboards/visualizations/format-tab/y-axis). #### X-Axis Read about the `X Axis` section [here](/creating-dashboards/visualizations/format-tab/x-axis). #### Enable Download Read about the `Enable Download` section [here](/creating-dashboards/visualizations/format-tab/overview#enable-download). #### Box Plot * **Fill Color:** This specifies the fill color of the boxes and the color of the whiskers. * **Median Color:** This specifies the color of the line that denotes the median value on the plot. * **Orientation:** This specifies the orientation of the box plot, either horizontal or vertical. * **Show Whisker:** This specifies if the whiskers are shown or hidden. #### Legend Read about the `Legend` section [here](/creating-dashboards/visualizations/format-tab/legends). #### Colors Read about the `Colors` section [here](/creating-dashboards/visualizations/format-tab/overview#colors). #### URL Link Read about the `URL Link` section [here](/creating-dashboards/visualizations/format-tab/overview#url-link). #### No Data Configuration Read about the `No Data Configuration` section [here](/creating-dashboards/visualizations/format-tab/overview#no-data-configuration). #### Expose Underlying Data Read about the `Expose Underlying Data` section [here](/creating-dashboards/drilldowns/underlying-data-drilldowns). # Choropleth Map Source: https://docs.explo.co/creating-dashboards/visualizations/charts/choropleth-map Build a boundary-based density map in Explo ## Data Configuration #### Chart Type You can read about this section [here](/creating-dashboards/visualizations/data-tab#chart-type). #### Boundary Column This section is for the field you wish to use to identify which boundary the column represents. #### Aggregation Column This section is for the field you wish to aggregate the map density value on. #### Filter Read about the `Filter` section [here](/creating-dashboards/visualizations/data-tab#filter). ## Formatting #### Header Read about the `Header` section [here](/creating-dashboards/visualizations/format-tab/overview#header). #### Map Options * **Boundary Type**: Define the granularity of boundaries. Examples include Country, US State, US Zip Code * **Boundary Format**: Define the format of the column used for identifying the boundary. Examples are: State Code (CA) and State Name (California) * **Map Style**: Define the visual style of the map. * **Minimum Color**: Define the color that will style the minimum color bucket shown on the map. If there is only one color bucket, it will be this color. * **Maximum Color**: Define the color that will style the maximum color bucket shown on the map. * **Color Steps**: Define the number of unique color buckets shown on the map. For example, if the value is 3, then three unique colors will be shown on the map and each boundary density will be one of those three colors from the minimum color to the maximum color. * **Save Initial View**: This configures the position, orientation, and zoom of the map that is shown when the map first loads. Map Options section must be filled out completely for the map to load. #### Tooltip Read about the `Tooltip` section [here](/creating-dashboards/visualizations/format-tab/overview#tooltip). #### Enable Download Read about the `Enable Download` section [here](/creating-dashboards/visualizations/format-tab/overview#enable-download). #### CSV Download * **Tab Delimited:** This specifies if the CSV download exported from the data table should have values separated by tabs. If not turned on, the separators will be commas. #### URL Link Read about the `URL Link` section [here](/creating-dashboards/visualizations/format-tab/overview#url-link). #### No Data Configuration Read about the `No Data Configuration` section [here](/creating-dashboards/visualizations/format-tab/overview#no-data-configuration). #### Expose Underlying Data Read about the `Expose Underlying Data` section [here](/creating-dashboards/drilldowns/underlying-data-drilldowns). # Collapsible List Source: https://docs.explo.co/creating-dashboards/visualizations/charts/collapsible-list This chart is deprecated. Please use the [Pivot Table V2 chart](charts/pivot-table-v2) instead. ## Data Configuration #### Rows This section specifies the rows of the collapsible list. This section supports multiple fields. Additional fields will appear nested beneath the each value in the preceding field. #### Aggregations This section specifies the aggregated columns of the collapsible list. This section also supports multiple fields. Each field in this section will appear as a separate column in the collapsible list. Available aggregations for these sections include `Count`, `Count Distinct`, and `Sum`. #### Filter Read about the `Filter` section [here](/creating-dashboards/visualizations/data-tab#filter). ## Formatting #### Header Read about the `Header` section [here](/creating-dashboards/visualizations/format-tab/overview#header). #### Footer Read about the `Footer` section [here](/creating-dashboards/visualizations/table-footer). #### Show Categories This toggle turns on category labels for each row in the first column of the collapsible list. In this section you can edit what the labels are in order to ensure they are human readable. #### Category Column Title This section specifies a column title for the first column header of the collapsible list. #### Column Names This section allows edits of the columns headers for the aggregation columns of the collapsible list. #### Rows This section contains formatting for the collapsible list categories, the values in the first column. Formatting for these cells is only available for numerical categories. There will be a carat by any rows that are numerical and therefore can be formatted. Read more about numerical formatting options [here](/creating-dashboards/visualizations/format-tab/value-formatting#number). #### Columns * **Sorting:** This specifies if sorting is configurable. If sorting is toggled on, each category will appear in this section, and there will be a dropdown that can be used to specify which column to use for sorting for that category, as well as the sort order, ascending or descending. This section also contains formatting for the collapsible list columns. Each column will appear with numerical formatting options. You can read more about the formatting options [here](/creating-dashboards/visualizations/format-tab/value-formatting#number). #### No Data Configuration Read about the `No Data Configuration` section [here](/creating-dashboards/visualizations/format-tab/overview#no-data-configuration). # Data Table Source: https://docs.explo.co/creating-dashboards/visualizations/charts/data-table ## Data Configuration ### Columns Included This section lists the columns that are displayed in the table. By default, all columns will intially be included in the data table. Click on the `X` to the right of the column to exclude it. This column will now appear in the section below, `Columns Excluded`. In this section, you can also specify certains columns to be initially hidden, but allow end users to be able to unhide these. To do this, enable the `Editing Columns` section in the Format Tab, and then in the Data Tab, click on the `Eye` icon for columns that you wish to hide initially. ### Columns Excluded This section lists the columns that are not displayed in the table. By default, this section will be empty. Click on the `+` icon to the right of columns that have been excluded to add them back to the table. ### Filter This section is for filtering the chart based on certain columns. You can read about chart filtering [here](/creating-dashboards/visualizations/data-tab#filter). ## Formatting ### Header * **Title:** This text will appear at the top of the table. * **Filtering:** This specifies if end users will be able to filter the table. If turned on, a filter icon will appear at the far right of the header. End users can configure the filte by specifying a column, operator, and value. * **Editing Columns:** This specifies if end users have the ability to select and deselect columns they wish to see in the data table, as well as reorder columns. If toggled on, a gear icon will appear at the right corner of the header. End users can then select and deselect columns and drag to reorder them. * **Descriptive Tooltip:** This tooltip will appear to the right of the title. * **Url Link:** Read about this section [here](/creating-dashboards/visualizations/format-tab/overview#url-link). ### Footer * This includes the total number of results and pagination information. ### Styling **Columns** * **Column lines:** This specifies if the table should have lines separating columns. By default, this is turned off. * **Bold column headers:** This specifies if the column headers should be bolded. * **Bold first column:** This specifies if the values in the first column should be bolded. * **Freeze first column:** This specifies if the first column should always be visible if the table scrolls horizontally. If toggled on, the first column will remain in the same spot when scrolling. **Rows** * **Row lines:** This specifies if the table should have lines separating rows. By default, this is turned on. * **Row height:** This specifies a pixel height for each row. The minimum row height is 30. If cell text is wrapped, the row height will only impact the header row. * **Rows per page:** This controls how many rows are loaded each time a user pages through the table. By default, this value is 50. * **Group rows visually by first column:** This will group the data by the values in the first column, and then display each group in a section on the table. If this is turned on, sorting and column editing will be disabled. ### Layout * **Column Fit:** "Fill" automatically adjusts column widths to fill the table and columns cannot be resized. "Fit cell" automatically adjusts columns to fit the body cell content so that all the cells' content are visible. Columns can be resized. "Fit cell" and "Fit cell and header" automatically adjusts columns to fit the header and body cell content. Columns can be resized. If you would like to manually resize columns, you cannot use "Fill". "Fit cell" and "Fit cell and header" may only be used when "Wrap text" is turned off. * **Wrap text**: Wraps text onto multiple lines if the text is too long for the cell. If turned on, "Column Fit" may only be set to "Fill". **Warning**: The Data Table is not optimized for wrapping text. Some features may not work as intended when on. It is strongly recommended to use a fixed row height when on. Applies to header and body cells. * **Custom Column Widths**: Overrides column widths. Works with any "Column Fit" and "Wrap text" setting. ### Column Formatting * **Ignore invalid dates:** If you didn't want invalid dates to show up as "Invalid dates". * **Sorting:** This specifies if sorting is allowed on the table. By default, this is turned on. * **Sort descending first when clicked** * **Initial Column Sort:** If sorting is turned on, you can specify an intial column and sort order. **Columns** * This section allows for formatting each individual column. The formatting options will depend on the type of the column * **Column Heading:** This text will appear as as the column header. By default, this is the name of the column from the dataset. This can be edited to make the table more readable. * **Tooltip:** This text will appear to the right of the column header. * **Format:** Read more about all value formatting options [here](/creating-dashboards/visualizations/format-tab/table-value-formatting). * **Alignment:** This specifies horizontal alignment for the column. Default alignments are dependent on the column type. ### No Data Configuration Read about the `No Data Configuration` section [here](/creating-dashboards/visualizations/format-tab/overview#no-data-configuration). ## Actions Tab ### Heading Actions **Export** * **Format** * **Download file name:** This specifies the name of the downloaded file. The default is the data panel name. **Other** * **Link to a URL** ### Chart interactions * **Drilldown:** See more info [here](/creating-dashboards/drilldowns/filter-drilldowns/data-tables) * **Row Level Actions:** See more info [here](/dashboard-features/row-level-actions) # Density Heat Map Source: https://docs.explo.co/creating-dashboards/visualizations/charts/density-heat-map Build a map that displays in Explo ## Data Configuration #### Chart Type You can read about this section [here](/creating-dashboards/visualizations/data-tab#chart-type). #### Geospatial Data * **Latitude Column**: Choose the column that stores latitude data. It must be of float type. * **Longitude Column**: Choose the column that stores longitude data. It must be of float type. * **Row Limit**: Restrict the number of rows of data displayed as markers on the map. The map is more performant when there are fewer data points drawn. The maximum row limit is 5000. #### Filter Read about the `Filter` section [here](/creating-dashboards/visualizations/data-tab#filter). ## Formatting #### Header Read about the `Header` section [here](/creating-dashboards/visualizations/format-tab/overview#header). #### Map Options * **Map Style**: Define the visual style of the map. * **Save Initial View**: Configure the position, orientation, and zoom of the map that is shown when the map first loads. #### Density * **Intensity**: A multiplier primarily used to adjust the appearance of the heatmap. * **Opacity**: Sets the transparency level of the density map layer. * **Color Zones**: Defines the heatmap's color gradient. Multiple threshold values can be set between 0 and 1. #### Enable Download Read about the `Enable Download` section [here](/creating-dashboards/visualizations/format-tab/overview#enable-download). #### CSV Download * **Tab Delimited:** This specifies if the CSV download exported from the data table should have values separated by tabs. If not turned on, the separators will be commas. #### URL Link Read about the `URL Link` section [here](/creating-dashboards/visualizations/format-tab/overview#url-link). #### No Data Configuration Read about the `No Data Configuration` section [here](/creating-dashboards/visualizations/format-tab/overview#no-data-configuration). #### Expose Underlying Data Read about the `Expose Underlying Data` section [here](/creating-dashboards/drilldowns/underlying-data-drilldowns). # Funnel Chart Source: https://docs.explo.co/creating-dashboards/visualizations/charts/funnel-chart Available Funnel Chart Types: Funnel and Bar Funnel ## Data Configuration #### Chart Type You can read about this section [here](/creating-dashboards/visualizations/data-tab#chart-type). #### Stages This section defines which field will map to the x coordinate for each point on the scatter plot. #### Amount This section defines which field will map to the y coordinate for each point on the scatter plot. #### Filter This section is for filtering the chart based on certain columns. You can read about chart filtering [here](/creating-dashboards/visualizations/data-tab#filter). ## Formatting #### Header Read about the `Header` section [here](/creating-dashboards/visualizations/format-tab/overview#header). #### Enable Download Read about the `Enable Download` section [here](/creating-dashboards/visualizations/format-tab/overview#enable-download). #### Funnel Chart * **Vertical Funnel:** This will turn the funnel 90 degrees, creating a vertical funnel. * **Show Percentage Labels:** This will display the percentage of the given stage size in comparison to the largest stage on the funnel. This will appear below the total value at a given stage. * **Show Stage Labels:** This will display the name of the given stage below the total value of that stage. * **Stage Date Format:** If the stages are dates, the stage labels will format based on the input from this field. #### Sorting You can manually sort the stages within a normal funnel. To do this, use the plus sign to add each stage, and then drag to reorder the stages. The stages not included will be shown at the end of the funnel. #### Colors Read about the `Legend` section [here](/creating-dashboards/visualizations/format-tab/overview#colors). #### URL Link Read about the `URL Link` section [here](/creating-dashboards/visualizations/format-tab/overview#url-link). #### No Data Configuration Read about the `No Data Configuration` section [here](/creating-dashboards/visualizations/format-tab/overview#no-data-configuration). #### Expose Underlying Data Read about the `Expose Underlying Data` section [here](/creating-dashboards/drilldowns/underlying-data-drilldowns). ## Bar Funnel Specific Formatting Options #### X-Axis Read about the `X Axis` section [here](/creating-dashboards/visualizations/format-tab/x-axis). #### Sorting * **Sort Type:** The sort type allows you to pick a method of sorting the categories on the X axis of the funnel. * **Default:** This will sort based on the order returned in the data. * **Manual:** This will display all of the different stages and allow you to customize the specific order of appearance on the x axis. * **X Axis:** This will sort based on the names of the stages. You can specify ascending or descending. * **Y Axis:** This will sort based on the values of the stages. You can specify ascending or descending. * **Column:** This will sort based on an aggregation of a specific column. You can specify the column and the aggregation as well as ascending or descending. #### Funnel Chart * **Cumulative:** This toggle will sum together the value at a certain stage with the value from each stage to the right of the current stage. * **Converted Tooltip Label:** The converted number is the value at any given stage, in other words the percentage amount that progressed from the previous stage in the funnel. This section is for specifying the label for this percentage in the tooltip. * **Lost Tooltip Label:** The lost number is the percentage difference between the value at the previous stage and the value at the current stage, in other works the amount that did not progress from the previous stage in the funnel. This section is for specifying the label for this percentage in the tooltip. * **Entity Name:** This is the name of the value that is being aggregated in the funnel chart. This section is for specifying the label for this value in the tooltip. * **Min Bar Width:** This is the minimum width of the bars in the funnel. If there is not enough horizontal space based on the number of bars and minimum width, the bars will scroll. # Heat Map Source: https://docs.explo.co/creating-dashboards/visualizations/charts/heat-map ## Data Configuration #### Chart Type You can read about this section [here](/creating-dashboards/visualizations/data-tab#chart-type). #### X-Axis This section is for the x axis grouping of the heat map. #### Aggregation This section is for the field you wish to aggregate the heat map on. #### Y-Axis This section is for the y axis grouping of the heat map. #### Filter This section is for filtering the chart based on certain columns. You can read about chart filtering [here](/creating-dashboards/visualizations/data-tab#filter). ## Formatting #### Header Read about the `Header` section [here](/creating-dashboards/visualizations/format-tab/overview#header). #### X-Axis Read about the `X Axis` section [here](/creating-dashboards/visualizations/format-tab/x-axis). #### Y-Axis Read about the `Y Axis` section [here](/creating-dashboards/visualizations/format-tab/y-axis). Download Read about the `Enable Download` section [here](/creating-dashboards/visualizations/format-tab/overview#enable-download). #### Heat Map Options * **Show Chart Values:** If toggled on, the value at each square will be displayed on the square in the heat map. * **Hide Zeros:** If toggled on, squares that have 0 as a value will not have a number displayed in the square. #### Gradient -**Gradient Type:** This section allows you to choose between a linear or diverging color palette for the heap map. -**Colors:** You may choose either 2 (linear) or 3 (diverging) colors, as well as the value thresholds for each color. Column min/mid/max will pull the minimum, average, and maxiumum values as thresholds for those colors, whereas exact values will just use the hardcoded values. #### Data Labels Read about the `Data Labels` section [here](/creating-dashboards/visualizations/format-tab/data-labels). #### Legend Read about the `Legend` section [here](/creating-dashboards/visualizations/format-tab/legends). #### Colors Read about the `Colors` section [here](/creating-dashboards/visualizations/format-tab/overview#colors). #### URL Link Read about the `URL Link` section [here](/creating-dashboards/visualizations/format-tab/overview#url-link) #### No Data Configuration Read about the `No Data Configuration` section [here](/creating-dashboards/visualizations/format-tab/overview#no-data-configuration) #### Expose Underlying Data Read about the `Expose Underlying Data` section [here](/creating-dashboards/drilldowns/underlying-data-drilldowns). # KPI Source: https://docs.explo.co/creating-dashboards/visualizations/charts/kpi Available KPI Chart Types: KPI, Progress Bars ## Data Configuration #### Chart Type You can read about this section [here](/creating-dashboards/visualizations/data-tab#chart-type). #### Aggregation This is the field displayed in the KPI. SUM or COUNT will be the default aggregation provided, but selecting the aggregation will list all the possible aggregations to choose from. You can also use custom formulas, read about how to configure those [here](/creating-dashboards/visualizations/format-tab/custom-formulas). #### Filter Read about the `Filter` section [here](/creating-dashboards/visualizations/data-tab#filter). ## Formatting #### Header Read about the `Header` section [here](/creating-dashboards/visualizations/format-tab/overview#header). #### General * **Description:** This is a subtitle that will appear below the title of the KPI. * **Alignment:** This section specifies the alignment options for the KPI. In this section you can select vertical and horizontal alignment, as well as relative alignment between the title and the value. #### Value Read about the `Value` section [here](/creating-dashboards/visualizations/format-tab/kpi-value). #### Color * **Format Type:** * **Constant** * **Value Text Color:** The color chosen here will always apply to the KPI Value. * **Apply Color to Goal & Units** This specifies that the `Value Text Color` also applies to any units and progress bars. * **Conditional** * **Conditional Trigger Value:** This value will be compared with the KPI value to determine which color to use for the KPI. It is possible to use a variable in this section, such as a value from a dataset. * **Positive Color** This specifies the color of the KPI value if the value is greater than the Conditional Trigger Value. * **Negative Color** This specifies the color of the KPI value if the value is less than or equal to the Conditional Trigger Value. * **Apply Color to Goal & Units** This specifies that the conditional color also applies to any units and progress bars. #### Progress Bar * **Progress Goal:** This specifies the goal, or total value of the progress bar that the kpi value is being compared against. This will appear as a denominator on the KPI. * **Hide Goal:** This specifies if the goal, or denominator, is hidden from the KPI. * **Show Percent:** This specifies if a percentage should be shown as the KPI value, instead of value / goal. * **Percent Decimal Places:** If `Show Percent` is toggled on, this specifies the number of decimal places shown in the percentage. * **Progress Bar Color** This specifies the color of the progress bar. #### URL Link Read about the `URL Link` section [here](/creating-dashboards/visualizations/format-tab/overview#url-link). #### No Data Configuration Read about the `No Data Configuration` section [here](/creating-dashboards/visualizations/format-tab/overview#no-data-configuration). #### Expose Underlying Data Read about the `Expose Underlying Data` section [here](/creating-dashboards/drilldowns/underlying-data-drilldowns). # KPI Trend Source: https://docs.explo.co/creating-dashboards/visualizations/charts/kpi-trend Look at how your data trends over time. ## Overview The KPI Trend chart is a visual representation that compares data groupings over a specific time frame with a similar time frame from a prior period. It helps you to visually analyze the percentage increase or decrease in the aggregated data for a particular period as compared to the same grouping of data from a previous period. When you hover over a point on the chart, it will display the data grouping for that time, as well as the same grouping from the previous period, allowing you to compare the two. At the top of the chart, you will find the total aggregated data for both periods and the percentage change between them. However, the periods on the chart may not always align with the date range selected from a dropdown menu, because the periods are defined differently. For instance, in the provided example, the first period starts on 7/31, as expected, but the comparable period from the previous month starts on 6/26. This discrepancy occurs because the periods are defined as the last Mondays of the months, so 6/26 is the last Monday of June, and 7/31 is the last Monday of July. Similarly, the end date on the chart is 8/28, not 8/30, because the X-axis dates represent the start of a period. So, 8/28 signifies the 'Week of 8/28,' which includes the date 8/30. ## Data Configuration #### Chart Type You can read about this section [here](/creating-dashboards/visualizations/data-tab#chart-type). #### Aggregation This section is for the field you wish to aggregate for the KPI Trend. #### Period Range This section is for the period over which you wish to view the aggregation. There are a variety of acceptable inputs for this field. * Preset Values (the examples assume today is 8/15/2023): * Today * `8/15 - 8/15` * Last 7 days * Goes back 6 days, creating a 7 day period including today * `8/9 - 8/15` * Last 4 weeks * Goes back 27 days, creating a 28 day period including today * `7/19 - 8/15` * Last 3 months * Goes back 3 months * `5/16 - 8/15` * Note that this will create a period of \~90 days, but can vary depending on the lengths of months * If the day 3 months ago doesn’t exist, it uses the end of the month * 3 months before 5/30 resolves to 2/28 * Last 12 months * Goes back 12 months * `8/16/2022 - 8/15/2023` * If the day that is "last 12 months" ago doesn't exist, it uses the end of the month * Last 12 months for 2/29 resolves to 2/28 on a non-leap year * Month to date * Beginning of month to EOD * `8/1 - 8/15` * Year to date * Beginning of year to EOD * `1/1 - 8/15` * Previous month * Previous completed month * `7/1 - 7/31` * Custom Hardcoded Value: * Custom Range * You can select a specific start date and end date for this period. * Custom Range Variables: * You can specify a set of variables to be used for the start and end date for this period. * The format of these variables should follow the standard Explo variable syntax, e.g. `{{ start_date }}` * The date format is ISO 8601, like `2024-04-24T10:30:00.000Z`. * For custom inputs, we just treat the period as a raw number of days, the nuances around end date above in the `Preset Values` section still apply, and then we just subtract the length to get the period length. * For time periods, the same rules apply, but the end date of a previous period is the second before the start date. So 12:00-12:30 is compared against 11:29-11:59. * Dashboard Inputs: * You can link some UI elements to populate this period, allowing end users to specify the period they are interested in. These UI elements must have default values in order to be usable as inputs in this section. * Date Range Input * Pre-set dropdown options * The analogous options to the KPI Trend Config Panel's `Preset Values` apply here * For the below examples, let's assume today is `8/15/2023` * Week to Date * Beginning of week (starting on Monday) to EOD * `8/14 - 8/15` * Quarter to Date * Beginning of quarter to EOD * `7/1 - 8/15` * Previous Week * Last completed week, ranging from Monday to EOD Sunday * `8/7 - 8/13` * Previous Quarter * Full quarter * `4/1 - 6/30` * Previous Year * Full year * `1/1 - 12/31` * Last 30 Days * Goes back 29 days, creating a 30 day period including today * `7/16 - 8/15` * Last 6 Months * Goes back 6 months, the same logic as Last 3 Months applies * `2/16 - 8/15` * Last 12 Complete Weeks * `5/22 - 8/13` * Last 3 Complete Months * `5/1 - 7/31` * Last 6 Complete Months * `2/1 - 7/31` * Last 12 Complete Months * `8/1/2022 - 7/31/2023` * Year to Last Completed Month * `1/1 - 7/31` * Time Period Dropdown * The available options and the date offsets should be clear #### Comparison Range This section specifies the comparison period that will be displayed as a line in a secondary color on the trend chart. Selecting `Previous Period` will apply a range based on the length of the Period Range. For example, if the Previous Range is `Last 12 months`, the comparison range will be 12 months. The date ranges at the top right and top left corners of the chart should differ by the length specified in the comparison range. The length of the comparison range will ALWAYS be the same as the length of the current range. The main behavior to note is how the end date of the comparison period is calculated: * Previous Period - always one day before the current period start date * The start date is then calculated as end date minus the period length * Previous Month - the same numerical day, but offset a month. In cases where the comparison month is shorter, take the last day of the month * e.g. March 31, 30, 29, and 28 compared to previous month all resolve to 2/28 (on a non leap year) * Previous Year - the same numerical day, but offset a year * For 2/29 on a non leap year, this resolves to 2/28 The beginning of the week starts on Monday. **Examples** Assume today is `8/15/2023`. Period Range: * Today - `8/15 - 8/15` * Previous Period - `8/14 - 8/14` * Previous Month - `7/15 - 7/15` * Previous Year - `8/15/2022 - 8/15/2022` * Last 7 days - `8/9 - 8/15` * Previous Period - `8/2 - 8/8` * Previous Month - `7/9 - 7/15` * Previous Year - `8/9/2022 - 8/15/2022` * Last 4 weeks - `7/19 - 8/15` * Previous Period - `6/21 - 7/18` * Previous Month - `6/18 - 7/15` * Previous Year - `7/19/2022 - 8/15/2022` * Last 3 months - `5/16 - 8/15` * Previous Period - `2/13 - 5/15` * Previous Month - `4/15 - 7/15` * Previous Year - `5/16/2022 - 8/15/2022` * Last 12 months - `8/16/2022 - 8/15/2023` * Previous Period - `8/16/2021 - 8/15/2022` * Previous Month - `7/16/2022 - 7/15/2023` * Previous Year - `8/16/2021 - 8/15/2022` * Month to date - `8/1 - 8/15` * Previous Period - `7/17 - 7/31` * Previous Month - `7/1 - 7/15` * Previous Year - `8/1/2022 - 8/15/2022` * Year to date - 1/1 - 8/15 * Previous Period - `5/19/2022 - 12/31/2022` * Previous Month - `12/1/2022 - 7/15/2023` * Previous Year - `1/1/2022 - 8/15/2022` * Previous month - `7/1 - 7/31` * Previous Period - `5/31 - 6/30` * Previous Month - `5/31 - 6/30` * Previous Year - `7/1/2022 - 7/31/2022` #### Grouping This section specifies the length of the groups on the X Axis. The aggregation will be calculated based on the group. The options for this section are: Hourly, Daily, Weekly, Monthy, Yearly. #### Filter Read about the `Filter` section [here](/creating-dashboards/visualizations/data-tab#filter). ## Formatting #### Header Read about the `Header` section [here](/creating-dashboards/visualizations/format-tab/overview#header). #### General This section only applies when `Hide Trend Lines` is toggled on. * **Subtitle:** This subtitle will appear below the title of the KPI. * **Title Alignment:** This section specifies horizontal alignment for the title of this KPI. #### Value Read about the `Value` section [here](/creating-dashboards/visualizations/format-tab/kpi-value). #### Trend * **Hide Trend Lines:** Hiding the trend lines will turn this visualization into a simplified metric with no line graph. This metric will be similar to a normal KPI, but there will be trend change value below the KPI. * **Main Trend Color:** This specifies the color of the line corresponding to the aggregation values in the `Period Range`. * **Comparison Trend Color:** This specifies the color of the comparison line. * **Trend Decimal Places (trend lines hidden):** This specifies the number of decimal places in the KPI value. * **Show Absolute Trend Change (trend lines hidden):** This specifies if the trend change is a percentage or absolute number. By default, the trend change will be a percentage. * **Use Trend Tag Format (trend lines hidden):** This specifies that the trend change value will have a background color matching the trend change color. By default, this is turned off. * **Reverse Trend Label Colors:** This switches the trend change tag colors. Positive changes will be red and negative changes will be green. #### URL Link Read about the `URL Link` section [here](/creating-dashboards/visualizations/format-tab/overview#url-link). #### No Data Configuration Read about the `No Data Configuration` section [here](/creating-dashboards/visualizations/format-tab/overview#no-data-configuration). #### Expose Underlying Data Read about the `Expose Underlying Data` section [here](/creating-dashboards/drilldowns/underlying-data-drilldowns). # Line Chart Source: https://docs.explo.co/creating-dashboards/visualizations/charts/line-chart Available Line Chart Types: Line and Combo ## Data Configuration #### Chart Type You can read about this section [here](/creating-dashboards/visualizations/data-tab#chart-type). #### X-Axis This section is for the field you wish to group by for the line chart. #### Y-Axis This section is for the field you wish to aggregate for the line chart. You can add multiple columns into thissection. Each column will appear as a separate line on the chart. #### Group By This section is for additional grouping on the line chart. If there is a column in this section, there will be as many lines on the chart as there are groups in the specified column. It is also possible to add multiple columns in this section. If multiple columns are selected, the end user will be able to toggle between the group by options on the chart. More info about this can be found [here](/creating-dashboards/visualizations/format-tab/chart-level-filters). It is not possible to have multiple aggregations **and** a group by column. #### Filter Read about the `Filter` section [here](/creating-dashboards/visualizations/data-tab#filter). ## Formatting #### Header Read about the `Header` section [here](/creating-dashboards/visualizations/format-tab/overview#header). #### X-Axis Read about the `X Axis` section [here](/creating-dashboards/visualizations/format-tab/x-axis). #### Y-Axis Read about the `Y Axis` section [here](/creating-dashboards/visualizations/format-tab/y-axis). #### Enable Download Read about the `Enable Download` section [here](/creating-dashboards/visualizations/format-tab/overview#enable-download). #### Tooltip Read about the `Tooltip` section [here](/creating-dashboards/visualizations/format-tab/overview#tooltip). #### Goal Line Read about the `Goal Line` section [here](/creating-dashboards/visualizations/format-tab/goal-lines). #### Line Chart * **Line Elasticity:** This section specifies the line elasticity of the line. It can either be curved or straight. * **Line Width:** This section specifies the width of the line. * **Show Markers:** This section enables dot markers at each point on the line. * **Include missing dates:** This section will extend the X-Axis to include dates that are not present in the data, but may be specified by the filters. * **Fill in missing dates with 0s:** This section will add zeros to the chart when there are missing dates in the data, when the X Axis is a timeseries. * **Fill in missing values with 0s:** This section will add zeros to the chart when there are dates with missing values in the data, when the X Axis is a timeseries. #### Data Labels Read about the `Data Labels` section [here](/creating-dashboards/visualizations/format-tab/data-labels). #### Legend Read about the `Legend` section [here](/creating-dashboards/visualizations/format-tab/legends). #### Colors Read about the `Colors` section [here](/creating-dashboards/visualizations/format-tab/overview#colors). #### URL Link Read about the `URL Link` section [here](/creating-dashboards/visualizations/format-tab/overview#url-link). #### No Data Configuration Read about the `No Data Configuration` section [here](/creating-dashboards/visualizations/format-tab/overview#no-data-configuration). #### Expose Underlying Data Read about the `Expose Underlying Data` section [here](/creating-dashboards/drilldowns/underlying-data-drilldowns). # Location Marker Map Source: https://docs.explo.co/creating-dashboards/visualizations/charts/location-marker-map Build a map with markers in Explo ## Data Configuration #### Chart Type You can read about this section [here](/creating-dashboards/visualizations/data-tab#chart-type). #### Geospatial Data The section configures the data that will be used to draw markers on the map. * **Latitude Column**: Choose the column that stores latitude data. It must be of float type. * **Longitude Column**: Choose the column that stores longitude data. It must be of float type. * **Row Limit**: Restrict the number of rows of data displayed as markers on the map. The map is more performant when there are fewer markers drawn. The maximum row limit is 5000. #### Tooltip Data Select any columns that you'd like to appear as metadata in the tooltip that pops up when a marker is clicked. The columns will be listed in the tooltip in the order you select them. #### Filter Read about the `Filter` section [here](/creating-dashboards/visualizations/data-tab#filter). ## Formatting #### Header Read about the `Header` section [here](/creating-dashboards/visualizations/format-tab/overview#header). #### Map Options * **Map Style**: Define the visual style of the map. * **Save Initial View**: Configure the position, orientation, and zoom of the map that is shown when the map first loads. #### Marker * **Fill**: Define the color of the markers. * **Size**: Define the height and width of the markers. The minimum is 10px and the maximum is 50 px. * **Outline Color**: Define the color of the outline of the marker. You can set this to the same color as the marker for no outline. * **Outline Width**: Defined the width of the outline. The minimum is 0px and the maximum is 30px. You can also set this to 0px to hide the outline. #### Tooltip You may choose to show or hide a header to the tooltip. The header displays the latitude and longitude values at that marker. You also can further format numeric columns. Read about how to format these columns in this `Tooltip` section [here](/creating-dashboards/visualizations/format-tab/overview#tooltip). If you are interested in more formatting options for the tooltip, please reach out to the Explo team. #### Enable Download Read about the `Enable Download` section [here](/creating-dashboards/visualizations/format-tab/overview#enable-download). #### CSV Download * **Tab Delimited:** This specifies if the CSV download exported from the data table should have values separated by tabs. If not turned on, the separators will be commas. #### URL Link Read about the `URL Link` section [here](/creating-dashboards/visualizations/format-tab/overview#url-link). #### No Data Configuration Read about the `No Data Configuration` section [here](/creating-dashboards/visualizations/format-tab/overview#no-data-configuration). #### Expose Underlying Data Read about the `Expose Underlying Data` section [here](/creating-dashboards/drilldowns/underlying-data-drilldowns). # Pie Chart Source: https://docs.explo.co/creating-dashboards/visualizations/charts/pie-chart Available Pie Chart Types: Pie and Donut ## Data Configuration #### Chart Type You can read about this section [here](/creating-dashboards/visualizations/data-tab#chart-type). #### Categories This section is for the field you wish to group the pie or donut donut chart by. #### Values This section is for the field you wish to aggregate the pie or donut chart on. It is not possible to have multiple aggregations **and** a group by column. #### Filter Read about the `Filter` section [here](/creating-dashboards/visualizations/data-tab#filter). ## Formatting #### Header Read about the `Header` section [here](/creating-dashboards/visualizations/format-tab/overview#header). #### Enable Download Read about the `Enable Download` section [here](/creating-dashboards/visualizations/format-tab/overview#enable-download). #### Pie Chart * **Show Value Labels:** This section will display the value of each slice of the pie. * **Value Format:** This section will specify the format of the value label, either a number or percentage. * **Label Decimal Places:** This section will specify the number of decimal places on this value label. * **Show Catgeory Names:** This section will display the category names of each slice of the pie. * **Max Catgeories:** This section will limit the number of slices appear on the pie. If there are more slices in the data than the number specified here, the rest of the data not included in the max category number will create an additional slice, labeled "Other". * **Category Date Format:** This section will specify the date format of the category names, if the categories are a date type. #### Interactive Tooltip Read about the `Tooltip` section [here](/creating-dashboards/visualizations/format-tab/overview#tooltip). #### Data Labels Read about the `Data Labels` section [here](/creating-dashboards/visualizations/format-tab/data-labels). #### Legend Read about the `Legend` section [here](/creating-dashboards/visualizations/format-tab/legends). #### Colors Read about the `Colors` section [here](/creating-dashboards/visualizations/format-tab/overview#colors). #### URL Link Read about the `URL Link` section [here](/creating-dashboards/visualizations/format-tab/overview#url-link). #### No Data Configuration Read about the `No Data Configuration` section [here](/creating-dashboards/visualizations/format-tab/overview#no-data-configuration). #### Expose Underlying Data Read about the `Expose Underlying Data` section [here](/creating-dashboards/drilldowns/underlying-data-drilldowns). # Pivot Table Source: https://docs.explo.co/creating-dashboards/visualizations/charts/pivot-table ## Data Configuration #### Columns The field in this section will populate the column headers of the pivot table. #### Rows The field in this section will populate the first column of the pivot table. #### Pivot Value This section is for the field you wish to aggregate the pivot table on, as well as the type of aggregation. The default aggregation is `Sum` for numerical values or `Count` for all other values. #### Join with another dataset This section allows you to select another table entirely to generate the column names for your table. Select "Join with another dataset" and choose a dataset and column to configure this behavior. #### Filter Read about the `Filter` section [here](/creating-dashboards/visualizations/data-tab#filter). ## Formatting Most of the formatting options for pivot tables are shared with the data table visualization. Read more about these options [here](/creating-dashboards/visualizations/charts/data-table#formatting). Below are the formatting options specific to pivot tables. #### Rows * **Display Sum Row:** This will create a row at the top of the pivot table aggregating all the values in each column. * **Sum Row Label:** This is the label for the sum row, in the first row of the first column of the pivot table. * **Bold Sum Row:** This option bolds all of the values in the sum row. * **Sum Row Background Color:** This option sets a background color for the sum row. By default, this is white. #### Columns ## Column Names * **String Format:** This section can be used to specify a format for the column headers. * **Remove Underscores:** This section can be used to remove underscores from the column headers. * **First Column Name:** This section can be used to edit the header of the first column. # Pivot Table V2 Source: https://docs.explo.co/creating-dashboards/visualizations/charts/pivot-table-v2 Create complex pivot and collapsible list implementations ## Data Configuration #### Chart Type You can read about this section [here](/creating-dashboards/visualizations/data-tab#chart-type). #### Rows Define what Values are aggregated on. When multiple rows are specified, a collapsible list dropdown is automatically applied. An example input here could be 'Salesperson Name', which would create a row for each salesperson. Multiple rows could be 'Region' followed by 'Salesperson Name', which would create a collapsible list of regions and the salespeople within them. #### Values The values aggregated by Rows and Columns. An example input here could be 'Sum' on 'Contract Value'. #### Columns Defines an additional parameter to calculate the Values on that shows up as columns in the table. For example, this could be 'Month' on 'Contract Date' to get columns for each month. For example, we could calculate total sales by salesperson by month by putting a 'Month' aggregation on 'Contract Date' in the columns section, 'Salesperson Name' in the rows, and 'Sum' on 'Contract Value' in the Values section. It is possible to have multiple rows and multiple values #### Filter Read about the `Filter` section [here](/creating-dashboards/visualizations/data-tab#filter). ## Formatting #### Header Read about the `Header` section [here](/creating-dashboards/visualizations/format-tab/overview#header). ### Column Formatting You can set the title of the aggregation for each Value. Additionally, you may format the values. Read about the `Value Formatting` section [here](/creating-dashboards/visualizations/format-tab/value-formatting). #### No Data Configuration Read about the `No Data Configuration` section [here](/creating-dashboards/visualizations/format-tab/overview#no-data-configuration). #### Enable Download Read about the `Enable Download` section [here](/creating-dashboards/visualizations/format-tab/overview#enable-download). #### URL Link Read about the `URL Link` section [here](/creating-dashboards/visualizations/format-tab/overview#url-link). #### Summary Configuration Summary configuration will render an additional column at the end of the table, displaying the summary of each row's aggregation data over its pivot column values. For example, if you have an aggregation in your table, a summary would show the average across all pivoted groups. Note that this is only available on the [new data connector (called FIDO)](/data-sources/new-data-connector-fido) and requires rows, values, and aggregations to be defined in your chart configuration. ## Pivot Table Cell Limits To maximize performance, the pivot table has a limit to render 1750 populated cells in the table. If you need your pivot to have more cells, reach out to Explo Support. # Sankey Chart Source: https://docs.explo.co/creating-dashboards/visualizations/charts/sankey ## Data Configuration #### Chart Type You can read about this section [here](/creating-dashboards/visualizations/data-tab#chart-type). #### From Define the node from which values are flowing. For example, if \$100 flows from Subsidiary A to Parent Company B, then the From field would be Subsidiary A. #### To Define the node to which values are flowing. For example, if \$100 flows from Subsidiary A to Parent Company B, then the To field would be Parent Company B. #### Aggregation Define the amount that is flowing from Point A to Point B. For example, if $100 flows from Subsidiary A to Parent Company B, then the Aggregation field would be the $100 value. #### Filter This section is for filtering the chart based on certain columns. You can read about chart filtering [here](/creating-dashboards/visualizations/data-tab#filter). ## Formatting #### Header Read about the `Header` section [here](/creating-dashboards/visualizations/format-tab/overview#header). #### Show Values Toggle to default show values on the chart, or only on hover. #### Value Format Read about the `Value Formatting` section [here](/creating-dashboards/visualizations/format-tab/value-formatting). #### Enable Download Read about the `Enable Download` section [here](/creating-dashboards/visualizations/format-tab/overview#enable-download). #### Data Labels Read about the `Data Labels` section [here](/creating-dashboards/visualizations/format-tab/data-labels). #### URL Link Read about the `URL Link` section [here](/creating-dashboards/visualizations/format-tab/overview#url-link). #### No Data Configuration Read about the `No Data Configuration` section [here](/creating-dashboards/visualizations/format-tab/overview#no-data-configuration). #### Expose Underlying Data Read about the `Expose Underlying Data` section [here](/creating-dashboards/drilldowns/underlying-data-drilldowns). # Scatter Plot Source: https://docs.explo.co/creating-dashboards/visualizations/charts/scatter-plot ## Data Configuration #### Chart Type You can read about this section [here](/creating-dashboards/visualizations/data-tab#chart-type). #### X-Axis This section defines which field will map to the x coordinate for each point on the scatter plot. #### Y-Axis This section defines which field will map to the y coordinate for each point on the scatter plot. #### Group By This section is for grouping on the scatter plot. If there is a column in this section, each point will be colored based on the value in this column for that point. Grouping is only available when the type of the `X Axis` field is numerical. #### Filter This section is for filtering the chart based on certain columns. You can read about chart filtering [here](/creating-dashboards/visualizations/data-tab#filter). ## Formatting #### Header Read about the `Header` section [here](/creating-dashboards/visualizations/format-tab/overview#header). #### X-Axis Read about the `X Axis` section [here](/creating-dashboards/visualizations/format-tab/x-axis). #### Y-Axis Read about the `Y Axis` section [here](/creating-dashboards/visualizations/format-tab/y-axis). #### Enable Download Read about the `Enable Download` section [here](/creating-dashboards/visualizations/format-tab/overview#enable-download). #### Scatter Plot Chart * **Marker Radius:** This will specify the size of the points on the scatter plot. * **Label:** This will specify the title at the top of the tooltip when hovering over a point on the scatter plot. * **Use Jitter to Spread Points:** This section will spread points out while still being clustered within a group if the X Axis is categorical. #### Data Labels Read about the `Data Labels` section [here](/creating-dashboards/visualizations/format-tab/data-labels). #### Legend Read about the `Legend` section [here](/creating-dashboards/visualizations/format-tab/legends). #### Colors Read about the `Colors` section [here](/creating-dashboards/visualizations/format-tab/overview#colors). #### URL Link Read about the `URL Link` section [here](/creating-dashboards/visualizations/format-tab/overview#url-link). #### No Data Configuration Read about the `No Data Configuration` section [here](/creating-dashboards/visualizations/format-tab/overview#no-data-configuration). #### Expose Underlying Data Read about the `Expose Underlying Data` section [here](/creating-dashboards/drilldowns/underlying-data-drilldowns). # Spider Chart Source: https://docs.explo.co/creating-dashboards/visualizations/charts/spider-chart ## Data Configuration #### Chart Type You can read about this section [here](/creating-dashboards/visualizations/data-tab#chart-type). #### Categories This section is for the field you wish to group the spider chart by. #### Aggregation This section is for the field you wish to aggregate the spider chart on. #### Group By This section is for additional grouping on the spider chart. If there is a column in this section, there will be as many lines on the chart as there are groups in the specified column. #### Filter This section is for filtering the chart based on certain columns. You can read about chart filtering [here](/creating-dashboards/visualizations/data-tab#filter). ## Formatting #### Header Read about the `Header` section [here](/creating-dashboards/visualizations/format-tab/overview#header). #### X-Axis Read about the `X Axis` section [here](/creating-dashboards/visualizations/format-tab/x-axis). #### Y-Axis Read about the `Y Axis` section [here](/creating-dashboards/visualizations/format-tab/y-axis). #### Enable Download Read about the `Enable Download` section [here](/creating-dashboards/visualizations/format-tab/overview#enable-download). #### Spider Chart * **Grid Shape:** This section specifies the shape of the skeleton of the spider, either round or polygon. * **Line Width:** This section specifies the width of the line. #### Data Labels Read about the `Data Labels` section [here](/creating-dashboards/visualizations/format-tab/data-labels). #### Legend Read about the `Legend` section [here](/creating-dashboards/visualizations/format-tab/legends). #### Colors Read about the `Colors` section [here](/creating-dashboards/visualizations/format-tab/overview#colors). #### URL Link Read about the `URL Link` section [here](/creating-dashboards/visualizations/format-tab/overview#url-link). #### No Data Configuration Read about the `No Data Configuration` section [here](/creating-dashboards/visualizations/format-tab/overview#no-data-configuration). #### Expose Underlying Data Read about the `Expose Underlying Data` section [here](/creating-dashboards/drilldowns/underlying-data-drilldowns). # Data Tab Source: https://docs.explo.co/creating-dashboards/visualizations/data-tab The data tab is used to configure the visualization type and aggregations shown on the data panel. Choose between the different visualizations we offer below, select which fields to display, and set any data filters. ### Shared Data Tab Options Across Chart Types The following are shared section across most charts. For a full list of data options for a specific chart, navigate to the page for that chart type. #### Chart Type This section contains the variations of each chart type, and from here, you can change the chart type of the current chart that is being editted. For example, if in the dashboard edit mode you pull a bar chart onto the dashboard, this section of the data tab will allow you to select a specific type of bar chart, grouped, horizontal, etc. When swapping between chart types, if the data configuration is compatible with the new chart type, the data configuration will be transfered. Otherwise, it will be cleared, and the chart will need to be built again from scratch. For tables (data, pivot, and collapsible list), it is not possible to switch chart types, so this section will not appear on the data tab. #### Filter This section allows for filtering a single chart. In this section, you select a `column` from the dataset that you would like to filter the chart on, as well as an `operator` and a `value` to compare against the column. The `operator` type will depend on the type of selected column, e.g. numerical column will allow operators such as `>`, `<`, etc. The `value` section can be a manual input, such as a hardcoded string or number, or it can take in a variable input, such as a field from a dropdown on the dashboard. The variable input option will only be enabled if there is a UI element on the dashboard that has a compatible type. # Chart Level Filters Source: https://docs.explo.co/creating-dashboards/visualizations/format-tab/chart-level-filters Chart level filters allow you to choose the categories that customers will be able to pick from to view charts. ## Adding the Chart Level Filter In a chart that supports color categorization, you can drag multiple columns into the color category. If more than one color exists, a dropdown will appear on the respective chart that the customer can use to switch between views. You can also format the dropdown to appear either in the top right corner or below the title of the chart. The default placement is top right corner. ## Variable Usage The selected item in the dropdown will be saved in a variable and can be used like any other variables across the dashboard. In the SQL query, use the following syntax ```sql theme={null} WHERE 1=1 [[AND column_1 = {{.EXPLO_COLOR_CATEGORY}}]] ``` # Custom Formulas Source: https://docs.explo.co/creating-dashboards/visualizations/format-tab/custom-formulas Custom Formulas allow you to visualize custom aggregations on charts. ## Adding a Custom Formula ### Supported charts Custom Formulas can be used on the following charts: * KPIs * Bar Charts * Line Charts * Combo Charts * Area Charts * Pie Charts * Heat Maps * Funnels * Spider Charts ### Use a Custom Formula To use a custom formula, go to the Data tab and click on the "fx" button to the right of the aggregation configuration section. In the input field, write your formula using SQL aggregation functions. Here are some examples of custom formulas: `SUM(price)` `SUM(revenue) - SUM(cost)` ### Edit or Remove a Custom Formula You can edit the formula by clicking on the icon to the left, and you can delete the formula by clicking on the icon to the right ### Rename the Formula You can rename the label that appears in tooltips and legends in the Data Labels section of the Format tab # Data Labels Source: https://docs.explo.co/creating-dashboards/visualizations/format-tab/data-labels Data labels are the text in the legends and interactive tooltips on all non table charts. They are populated from values in the dataset, and this section in the Format Tab allows you to edit them. ### Supported charts Data Labels can be edited for all of the following charts: * Bar Charts (grouped, stacked, and 100%) * Line Charts (line and combo) * Area Charts * Pie Charts * Heat Maps * Spider Charts ### Editing a Data Label This section will contain an input field for each field that will appear in the legend or tooltip. The default value for these will be the name of the column, but they can be edited to be more readable. # Goal Lines Source: https://docs.explo.co/creating-dashboards/visualizations/format-tab/goal-lines Goal lines allow you to enhance your graphs and provide information on targets for the data. ## Adding a Goal ### Supported charts Goals can be added to charts that display data on the two-dimensional axis. Specifically: * Bar Charts (grouped, stacked, and 100%) * Line Charts * Combo Charts * Area Charts ### Create a Goal To create a goal, go to the Format tab and click the "+" button for the "Goal Line" section. Goal Line configuration ## Goal Line ### Example ### Configuration Configuration for an example goal line ## Goal Band ### Example ### Configuration ## Multiple Goals You can add more than one goal. To add multiple goals, simply click the "+" button for each new line or band. # KPI Value Source: https://docs.explo.co/creating-dashboards/visualizations/format-tab/kpi-values ### Supported charts * KPI * KPI Progress * KPI Trend * KPI Trend Text Panel ### Options #### Format This specifies the format of the KPI value. The options are: number, number with significant digits, dollar, percentage, and time (days, hours, etc). #### Smart Number Abbreviation This specifies if the KPI value should be abbreviated using smart number abbreviation. It truncates to 2 decimal places thousands (k), millions (M), billions (B), and trillions (T). This toggle is turned off and disabled automatically when selecting the abbreviation option from the Format toggles. #### Decimal Places This specifies the number of decimal places on the KPI value. #### Significant Digits This specifies the number of significant digits that should be used, in the case that the format is `Abbr`. #### Time Format Specifies the time format for KPI values. Options: * **Standard**: Formats as `DD days HH:mm:ss` (see [date format options](https://moment.github.io/luxon/#/formatting?id=table-of-tokens)) * **Abbreviated**: Shows largest nonzero value of days, hours, minutes, or seconds. * **Custom Time Format**: Formats using your custom format (see [date format options](https://moment.github.io/luxon/#/formatting?id=table-of-tokens)). * **Custom Total Duration**: Treats input as a Duration and uses your custom format (see [duration format options](https://moment.github.io/luxon/api-docs/index.html#durationtoformat)). To add additional text, wrap it in single quotes, e.g., `dd 'days' hh 'hours'`. #### Multiplier This specifies a numerical multiplier for the KPI value. #### Unit This specifies a unit for the KPI value, e.g. hours, people, etc. #### Include Unit Padding This specifies if there is space between the KPI value and the unit. For something like `g` for grams, this should be toggled off. But for something like `hours`, it may make sense to have padding. #### Text Format This specifies if additional formatting should be applied to the KPI value, either bold or italics. #### Image to Display Next to Value (only for KPI/KPI Progress) An image can be displayed next to the KPI value by inputting an image URL in this section. #### Value Alignment (only for KPI Trend Text Panel) This specifies the horizontal alignment of the KPI Trend value when trend lines are hidden. # Legends Source: https://docs.explo.co/creating-dashboards/visualizations/format-tab/legends Legends can provide additional information to make visualizations easier to read. ### Supported Charts Legends are supported on the following charts: * Area Charts * Bar Charts * Box Plots * Heat Maps * Line Charts * Pie Charts * Scatter Plots * Spider Charts ### Configuring a Legend The legend is an optional component on the chart. Toggle it on and off using the switch to the right of the section header. #### Title The title is optional, but when turned on, it will appear above the legend. By default, the title is turned off. #### Position The legend can be positioned on any side chart. This section allows you to specify the positioning. The default position is to the right of the chart. # Overview Source: https://docs.explo.co/creating-dashboards/visualizations/format-tab/overview The format tab allows you to set specific formatting parameters for your visualization including labels, legends, axis settings, colors, and more. Note that the format tab will be different depending on the visualization that you choose. #### Shared Format Tab Options Across Visualizations The following are shared sections across most visualizations. For a full list of formatting options for a specific chart, navigate to the page for that chart type. #### Header * **Title**: This is the text that will appear at the top of the chart. * **Tooltip**: This tooltip will appear to the right of the title. It can be used to add a description to the chart. #### Enable Download You can choose to enable downloading for all charts, except KPIs. The toggle to the right of this section header is used to control this. * **Download file name**: The name of the file that is downloaded can be configured in this section. The default name is the name of the data panel. #### Tooltip This tooltip appears when hovering over a section of a chart, e.g. a bar in a bar chart. The tooltip gives details of the bar at the hover point. * **Show percentage values:** This option adds the percentage breakdown of the bar or line for each y axis value at the given x axis value. #### Colors * **Color Palette**: The color palette for a specific chart can be specified with this section here. You can select a palette from the list of pre-populated palettes, as well as edit these palettes or create new palettes from scratch. #### URL Link This section, if toggled on, will display a button at the top right corner of the chart that links to another url. * **URL:** This is the external url that the chart will navigate to. This link must be prefaced with `https://`. * **Open in New Tab:** This toggle will determine if the link that is opened when the button is clicked opens in the same tab or in a new tab. #### No Data Configuration This is the text that will appear in a panel if there is no data returned for a specific chart. This section will allow you to configure what the panel looks like in this state. * **Hide Chart Icon**: This toggle can be used to show or hide the chart icon on the empty panel. * **No Data Text:** This is the text that will appear on a panel that has no data. The default is "No Data". * **Text Size:** This section will allow you to specify the text size of the **No Data Text**. # Table Value Formatting Source: https://docs.explo.co/creating-dashboards/visualizations/format-tab/value-formatting The values in a table on a dashboard can be formatted, and they each have a set of formatting options, dependent on the value type. This page details all the possible formatting options for each value type. ## Number #### Format These are the number formatting options that can be selected. The full list is: no format, number, abbreviated number, dollar, percentage, and time (days, hours, etc). #### Decimal Places This specifies the number of decimal places on the value. #### Significant Digits This specifies the number of significant digits that should be used, in the case that the format is `Abbr`. #### Time Format Specifies the time format for numeric values. Options: * **Standard**: Formats as `DD days HH:mm:ss` (see [date format options](https://moment.github.io/luxon/#/formatting?id=table-of-tokens)) * **Abbreviated**: Shows largest nonzero value of days, hours, minutes, or seconds. * **Custom Time Format**: Formats using your custom format (see [date format options](https://moment.github.io/luxon/#/formatting?id=table-of-tokens)). * **Custom Total Duration**: Treats input as a Duration and uses your custom format (see [duration format options](https://moment.github.io/luxon/api-docs/index.html#durationtoformat)). To add additional text, wrap it in single quotes, e.g., `dd 'days' hh 'hours'`. #### Include thousands-separators This specifies if separators (depending on internationalization) should be used for values over 999. #### Multiplier This specifies a numerical multiplier for the value. #### Unit This specifies a unit for the value, e.g. hours, orders, etc. ## String The following are the formatting options available for strings in tables. #### Normal This is the default string format. No modifications are made, the string will appear exactly as it is in the dataset. #### Category Each unique string will be tagged with a different color, the default color palette will appear below the format section, and the color for each category can be updated. #### Link Cells formatted as links will allow users to navigate to other pages from a row in a table. Choosing `Label` allow you to specify custom text that will appear in each row for that column as the display for the underlying link. `Column` will allow to pick another column within the dataset as the display for the underlying link. #### Image Cells that have image urls can be formatted to display the image in the table with this format option. You can also select the shape of the image, either circle or square. ## Date Dates within tables are also fully customizable. Choose either a preset date format option, or choose `Custom` and input a date format. Read more about date format options [here](https://moment.github.io/luxon/#/formatting?id=table-of-tokens) The beginning of the week starts on Monday. # X Axis Source: https://docs.explo.co/creating-dashboards/visualizations/format-tab/x-axis ### Supported Charts * Area Charts * Bar Charts * Box Plots * Bar Funnel Charts * Heat Maps * Line Charts * Scatter Plots * Spider Charts ### Configuring the X Axis #### Axis Title This text will go below the X Axis (or above if the axis is placed on the top of the chart). #### Axis Placement This specifies the placement of the X Axis - either Bottom or Top. The default placement is Bottom. #### Date Format This specifies the format of the dates on the X axis. Learn more about date formats [here](https://moment.github.io/luxon/#/formatting?id=table-of-tokens). #### Axis Line This specifies if the X Axis appears at all. By default, this is turned on. If turned off, the labels, ticks, and title will not appear. #### Axis Ticks This specifies if the ticks pointing down from the X Axis at each category on the axis are present. By default, this is turned on. #### Axis Labels This specifies if the labels for each category of the X Axis are present. By default, this is turned on. #### Reverse Axis This allows you to flip the order of the categories on the X Axis. #### Show Total Values (area, bar, line, spider chart only) This specifies if values at each point on the chart are displayed. If the chart is too small to display all values, some will be omitted so the chart remains readable. #### Max Categories (bar, line, and spider chart only) This section limits the number of categories that are displayed on the X Axis. #### Show Bar Values (bar chart only) This specifies if the values for each bar are displayed on the bar. These values will appear directly on the bar rather than above the bar, which can be achieved by turning on `Show Total Values`. #### Bar Corner Radius (bar chart only) This specifies the roundedness of the corners of the bars in a bar chart. #### Enable Scroll Bar (bar chart only) This specifies if a scroll bar should be enabled when the number of categories on the X axis is too big. #### Hide Data From Latest Period (bar, line, area chart only) In the case of timeseries data on the X Axis, this specifies if data from the most recent period should be excluded from the chart, potentially because the most recent period is incomplete. # Y Axis Source: https://docs.explo.co/creating-dashboards/visualizations/format-tab/y-axis ### Supported Charts * Area Charts * Bar Charts * Box Plots * Bar Funnel Charts * Heat Maps * Line Charts * Scatter Plots * Spider Charts ### Configuring the X Axis #### Axis Title This text will go on the left of the y Axis (or to the right if the Y axis is flipped) #### Value Format This specifies the formatting of the numbers on the y axis either as numbers, dollar amounts, or percentages. #### Show Axis Decimals This specifies the number of decimal places displayed on the y Axis values. #### Use Logarithmic Scale This specifies if the scale for the y axis should be linear, or logarithmic. By default, this is turned off, and the scale used is linear. #### Minimum Value This specifies the minimum value for the y axis, or the value at the bottom of the axis. #### Maximum Value This specifies the maximum value for the y axis, or the value at the top of the axis. #### Axis Labels This specifies if y axis values are present. By default, this is turned on. #### Grid Lines This specifies if the horizontal grid lines behind the chart are present. By default, this is turned on. #### Reverse Axis This allows you to flip the direction of the y axis, with zero at the top and the biggest number at the bottom. # Built In Reports Source: https://docs.explo.co/creating-report-builders/built-in-reports Built In Reports are pre created reports that your team will create that can serve as a template or jumping off point for end users using Report Builder. ## Permissions You can specify permissions on built in reports to allow access to some or all of your customers. This can be specified at the customer level or the group tag level. Read more about group tags [here](/getting-started/group-tags#filtering-on-the-frontend-by-group-tag). You can configure this by clicking on the triple dot menu by the built in report name on the left side. Permissions ## Configuring a Built In Report Built in reports have all the same functionality as new reports. You can configure filters and sorts, add groupings and aggregations, and create multiple views and visualizations all within one report. ## Built In Report Usage End users that have access to built in reports will not be able to make direct edits to the built in report itself, but they will be able to make edits and then save their edits as a copy of the original report. Save # Datasets Source: https://docs.explo.co/creating-report-builders/datasets A Report Builder dataset is a table of data that your end users will be able explore and use to build reports and visualizations. ## Defining a dataset A dataset is defined using SQL. The SQL can be as simple or complex as needed. It may be pulling an entire table from a datasource using a `select *`, or it may contain business logic including calculated columns, joins and filters. You will also need to use the dynamic customer variables to make sure the data is filtered by the customer entity. Read more about this [here](/creating-dashboards/variables/types-of-variables/customer-object) ## Permissions You can specify permissions on datasets to allow access to some or all of your customers. This can be specified at the customer level or the group tag level. Read more about group tags [here](/getting-started/group-tags#filtering-on-the-frontend-by-group-tag) Permissions ## Column Selection and Formatting Once the dataset is defined with SQL, you can use the column selection and formatting sections to clean up and style the data. In the column selection section, you can specify column visibility and default filters. Default filters will appear initially on new reports using that dataset, but they will be empty. Column Selection In the column formatting section, you can rename columns, add descriptions, and format the values based on column type. Column Formatting ## Custom Aggregations You can define formulas for aggregating data that your team and your end users can use in reports. Read more about these [here](/report-builder-features/custom-aggregations). # Customer Hierarchy Source: https://docs.explo.co/customers/customer-hierarchy Facilitate a hierarchical structure with parent-child relationships among your customers. ## Feature Motivation We at Explo have observed that our clients frequently have a natural parent-child hierarchy among their customer entities that they wish to depict in the Explo Customers tab. For instance, a client may have customers that are sports leagues, with each league comprising various teams, and each team having multiple players. This scenario presents a natural three-tier hierarchy: `League`, `Team`, and `Player`. Similarly, many of our clients work with companies that have individual users, resulting in a natural two-tier hierarchy of `Customer` and `User`. Explo can accommodate up to three layers of any desired hierarchy. ## Configurable Dashboard Sections and Customer Hierarchy In most scenarios, we anticipate that customers will employ a two-tier `Customer` and `User` hierarchy when activating Configurable Dashboard Sections. This is primarily because you may want the dashboards to have data populated from the `Customer` level, but have special state saved for each entity at the `User` level. For instance, if you want Alice and Bob, users within Generic Company, to have their own individually configured dashboards, you must designate Generic Company as the parent customer and Alice and Bob as the children. Subsequently, in your dashboard queries, you should reference the variables from the Customer level. When embedding, it should be done at the User level so Alice and Bob can have their own unique views. ## Filtering on the Frontend by Hierarchy Level On the frontend interface, selecting a customer will filter the customer page accordingly. You can set the hierarchy level and any parent-child relationships on this customer page as well. ## Feature Functionality The customer hierarchy feature currently provides two key functionalities: 1. Referencing any ancestor customer entity in a query by utilizing the inherited archetype variables. You can read more about those [here](/creating-dashboards/variables/types-of-variables/customer-object#archetype-variables). 2. Automatically inheriting properties from the parent. For example, in a three-tier hierarchy of sports leagues, if the `conference` property is assigned as `Eastern` at the top level, each child and grandchild ('Team' and 'Player') could reference `properties.conference`, which would yield `Eastern` for each level of the hierarchy. ## Example Usage in Queries The following examples will show how you can control which level in the hierarchy provides the data in your queries. Understanding customer-specific variables is a prerequesite for writing these types of queries, and you can read more about those [here](/creating-dashboards/variables/types-of-variables/customer-object). Let's say we have some customer entities with the following setup: | Name | Provided Id | Hierarchy Level | Parent Provided ID | Available Archetype Variables | | ------------ | ------------- | --------------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------- | | NBA | nba | League | None | `league_id: nba`, `league_name: NBA` | | Lakers | lakers | Team | NBA | `league_id: nba`, `league_name: NBA`, `team_id: lakers` , `team_name: Lakers` | | LeBron James | lebron\_james | Player | lakers | `league_id: nba`, `league_name: NBA`, `team_id: lakers` , `team_name: Lakers`, `player_id: lebron_james`, `player_name: LeBron James` | | Rockets | rockets | Team | NBA | `league_id: nba`, `league_name: NBA`, `team_id: rockets` , `team_name: Rockets` | | Jalen Green | jalen\_green | Player | rockets | `league_id: nba`, `league_name: NBA`, `team_id: rockets` , `team_name: Rockets`, `player_id: jalen_green`, `player_name: Jalen Green` | If we wanted to show league-level data, ```sql theme={null} SELECT * FROM Table_1 WHERE 1=1 [[AND league_column = {{ league_id }}]] ``` For the query above, if you viewed an Explo dashboard as any of the customer entities in the table, you'd be able to see all of the NBA data since all of the listed customer entities have NBA as an ancestor. If we wanted to show team-level data, ```sql theme={null} SELECT * FROM Table_1 WHERE 1=1 [[AND league_column = {{ league_id }}]] [[AND team_column = {{ team_id }}]] ``` For the query above, if you viewed an Explo dashboard as `Lakers` you'd be able to see all of the Lakers data. If you viewed the dashboard as `LeBron James`, you'd also be able to see the all Lakers data because LeBron is a member of the Lakers team. If we wanted to show player-level data, ```sql theme={null} SELECT * FROM Table_1 WHERE 1=1 [[AND league_column = {{ league_id }}]] [[AND team_column = {{ team_id }}]] [[AND player_column = {{ player_id }}]] ``` If you viewed the dashboard as `LeBron James`, you'd be able to see all of LeBron's data. If you viewed the dashboard as `Jalen Green`, you'd only be able to see Jalen's data. Referencing an inherited property ```sql theme={null} SELECT * FROM Table_1 WHERE 1=1 [[AND column = {{properties.inherited_property}}]] ``` # Group Tags Source: https://docs.explo.co/customers/group-tags Group customer entities and control their access to different products. ## Feature Motivation Group Tags are customizable tags that you can assign to your customer entities to control their access to different products, like Reports in Report Builder, Shares in Data Share, or Report Builder AI. This way, you can set the visibility of a report to an entire group of customer entities at once instead of having to add them individually. You can also use group tags to organize customer entities on the Customer Page. ## Create, Edit, and Delete Group Tags In the Group Tags section of the Settings page, you can create, edit, and delete the group tags for your team. ## Customer Group Tag Assignment You can change a customer entity's group tag assignment on the Customer Page. Note that group tags are an inherited field, so child customers inherit the group tags assigned to their parents. When editing a customer, inherited group tags are shown in gray and non-inherited group tags are shown in blue. In the table, all group tags (both inherited and non-inherited) are listed. ## Filtering on the Frontend by Group Tag On the frontend interface, selecting a group tag will filter the customer page accordingly. ## Group Tags and Report Builder Visibility You can assign report visibility to entire group tags in place of or addition to individual customers. # Overview Source: https://docs.explo.co/customers/overview An overview of the concept of customer groups and their implementation. ## What are customer groups A customer group is a security group that can only see and access their set of data. This can be a company, a user at a company, a location, a region, etc. ## Creating customer groups This process can be managed via the UI by navigating to the Customers tab and selecting Create Customer in the top left corner. The fields that will be required here are `Name` and `Provided ID`. Customer Modal If you are supporting a single tenant data model, there's a section at the bottom of that panel for database assignment where you can choose which database this particular customer has access to within a schema. Customer Modal DB Or you can leverage our [API endpoint](/api-reference/customer-api/get-or-create) to programmatically create them. ## Using customer groups You are always viewing a dashboard in the context of a customer. When you create a dataset, you are able to pass in variables associated to that customer into the query. You can open the variables section in the dataset editor to see what you can access. Variable Tab When using variables they need to get wrapped in `{{}}` and all statement that have variables need to get wrapped in `[[]]`. If you have a multi-tenant data model this may look something like `WHERE 1=1` `[[AND fieldFromDB = {{customer_id}}]]` Whereas if you have a single tenant data model you can instead pass in the variable into the table name. `[[FROM {{customer_id}}]]` This will ensure that your end users will only have access to their data. # Custom Map Boundaries Source: https://docs.explo.co/dashboard-features/custom-map-boundaries The Custom Map Boundaries feature allows you to use custom Mapbox configurations for your choropleth maps, enabling support for specialized boundary types. ## Prerequisites Before using custom map configurations, you'll need: * A Mapbox API key with access to your custom tilesets * Knowledge of your boundary configuration details: * Source layer name * Tileset ID * Boundary format (column name for matching) ## Setting Up Your Mapbox API Key 1. Navigate to your team settings 2. Locate the "Custom Map Boundaries Configuration" section 3. Enter your Mapbox API key 4. Save the configuration ## Configuring Custom Boundaries When creating or editing a choropleth map: 1. Select "Custom" as the boundary type 2. Configure the following settings: * **Custom Boundary Source Layer**: The name of your source layer (e.g., "custom-regions") * **Custom Boundary Tileset**: Your Mapbox tileset ID (e.g., "mapbox://your-tileset-id") * **Custom Boundary Format**: The column name in your tileset that contains the matching values (e.g., "postcode") ## Default Behavior If any custom settings are left unspecified: * Source Layer: Defaults to the standard states layer * Tileset: Uses the default Explo engineering tileset * Boundary Format: Uses standard state format (STUSPS) ## Troubleshooting If your custom map configuration isn't working: * Verify your Mapbox API key has access to the specified tileset * Ensure the boundary format matches exactly with your data column names * Check that your source layer name matches the one in your Mapbox tileset # Custom Menu Source: https://docs.explo.co/dashboard-features/custom-menu The Custom Menu option allows you add a menu option to a chart that then fires off a javascript event when clicked on by the end user. ## Configuration The configuration for this custom menu option can be found in the Action tab for the following charts: * Bar Chart * Line Chart * Area Chart * Pie Chart * Heat Map * Boxplot Once toggled on, you’ll need to specify the name of the menu option under Menu Option Name. This is what will show up when a certain bar, point, slice, etc. is clicked. Then you will specify the javascript event name under Customer JS Event Name. This will be the name that is passed into the event listener in your frontend code that will then trigger the desired action. The detail body that is passed with the javascript event contains the `category` value and `color` value. # Overview Source: https://docs.explo.co/dashboard-features/dashboard-attributes Categorize your dashboards using attributes ## Creating Attributes On the settings page, there is an Attributes section under Developer. There you can create a new attribute or create a new value for an attribute. You can choose a color for a new value that can easily help distinguish values chosen for a dashboard when assigning them. # Assigning Values Source: https://docs.explo.co/dashboard-features/dashboard-attributes/assigning-values Once you have created attributes and values you can start assigning them to your dashboards. There are two places that this can be done. ### Dashboard List Page On the dashboard page you can assign them by clicking on the menu button and choosing the value you want assigned for that dashboard. ### Dashboard Edit Page When viewing or editing a dashboard you can click on the down arrow next to the dashboard name to open up the menu where you can assign values to the dashboard. # Using Assigned Values Source: https://docs.explo.co/dashboard-features/dashboard-attributes/using-assigned-values Now that dashboards have been assigned certain values for attributes how you can you use them ### Labeling for Team Purposes You can use dashboard attributes as a way to let your teammates know what the status, purpose, or any other attribute of that dashboard you have created or worked on. ### Filter Through API for Embedding If you want some logic to control which dashboards are embedded you can use our dashboard API to get a list of all your team's dashboard and their attributes. This way you can get more information on which dashboard you should be choosing to embed on your app. # Dashboard Caching Source: https://docs.explo.co/dashboard-features/dashboard-caching Cache your data at the dashboard level to enable faster data loading ## Implementing Dashboard Caching To access caching, click on the down arrow in the upper left corner of the dashboard. Then, toggle "Enable caching". At this point, there will be an option to set the Timeout period via a dropdown menu. The caching feature is, by default, available for all dashboards, but will need to be manually turned on. Please reach out to support if you would like to make the caching feature not available for all dashboards. ## How Dashboard Caching Works In Practice Caching is turned on at the dashboard level, but what ends up being cached is the query and the corresponding result. These get cached into Explo's caching layer, which is either Redis or Apache Ignite, depending on which data connector your workspace uses. If that same **exact** query is then executed again within the set timeout period, instead of executing the query in your database, the data will be fetched from the cache. This should result in much faster data loads. You may configure the Timeout to be 15 minutes, 30 minutes, 1 hour, 2 hours, 4 hours, 6 hours, 12 hours, or 24 hours. ### Caching Applies to Exact Query Matches Caching applies to all queries within the dashboard, including queries for filters. Only exact match queries will trigger pulling from the cached results. For example, if the following query has been cached: ``` Query 1: SELECT * FROM DB WHERE DATE > "2022-01-01" ``` The following query would trigger a call to the database instead of pulling from the cache: ``` Query 2: SELECT * FROM DB WHERE DATE > "2022-09-09" ``` Even though Query 2 is a subset of the results from Query 1, only exact matches will trigger pulling from the cached results. ## Clearing the cache The cache will be automatically cleared on the timeout period set or manually by the user, whichever comes first. Here is an example of how this works: * If the timeout is set to 24 hours, the cache will clear everyday at midnight UTC * If the timeout is set to every 6 hours, it will clear at midnight, 6am, 12pm, and 6pm UTC ### Manually Clearing the Cache Explo allows you to manually clear and refresh the cache in two ways, as shown below. #### Dashboard Editor There is a button in the top right corner of the dashboard editor that requests new data for your data panels. Note that, because your in-app and embedded dashboards share the same cache, refreshing the data via this button will refresh the data for your users as well. #### Embedded Refresh Button Explo allows you to add a refresh button as a dashboard element that will similarly refresh the data on the dashboard. Note that embedding this button will allow your users to refresh the data at any time for all users. ## Caching Security To learn more about the security details of caching, please refer to [this page](/security/caching-layer). # Dashboard State Persistence Source: https://docs.explo.co/dashboard-features/dashboard-state-persistence ## How does it work? Customer state can be persisted across page loads. In other words, if the customer makes certain changes to the dashboard, those changes will be persisted if they refresh the page and come back to the dashboard. In this case, a "customer" refers to a customer object in the [customers tab](https://app.explo.co/customers). The changes that are persisted today are: * Renaming of table columns * Reordering of table columns If there are other things you would like to see persisted, please contact Explo support so we can get it added for you! ## How do I turn it on? There are two steps to getting this feature turned on: 1. Ask the Explo team to turn this on for you as this is something that is not available for all Explo tiers. 2. Toggle the `Persist customer state` option for any relevant dashboards. # Duplicating Dashboards Source: https://docs.explo.co/dashboard-features/duplicating-dashboards Learn how to duplicate dashboards in Explo You can duplicate a dashboard in two ways: 1. **From the Resource List Page**: Locate the dashboard you want to duplicate, click the options menu, and select "Duplicate". You will be prompted to select a specific version to duplicate. Dashboard List Page Duplicate Modal 2. **From the Version Control Panel**: Open the dashboard, navigate to the version control panel, and select the version you want to duplicate. Dashboard Version Panel Duplicate Modal ### Important Notes * Scheduled emails will not be duplicated. * Ensure you have the necessary permissions to duplicate dashboards. # What is an Editable Dashboard Section? Source: https://docs.explo.co/dashboard-features/editable-dashboard-sections Enable Your Users to Manage Which Charts They Want in Their Dashboards Explo built Editable Dashboard Sections in response to three problems: 1. You want to show certain charts to certain users, but not others, without needing to create multiple dashboards 2. You want to allow your users to pick from templates to show on their personalized dashboards 3. You want to allow your users to rearrange and resize charts Editable Dashboard Sections is a section of your dashboard where your users can drag charts around and add or remove charts from their view based on their permission levels, tackling all three problems at once. # Configuring Editable Dashboard Sections Source: https://docs.explo.co/dashboard-features/editable-dashboard-sections/configuring-editable-dashboard-sections Enable Editable Dashboard Sections via the toggle in the top left of the dashboard page. The section is now available at the bottom of your dashboard. To begin creating charts for the Editable dashboard sections, click into the Editable Dashboard Section. ### Adding and Editing a Chart Click 'Add a Chart'. Now, you can begin creating the chart, exactly how you would with the traditional dashboard experience. To edit a chart, simply click on the chart and begin editing. ### User Permissions To edit the user permissions on a chart, click the three dots and 'Edit'. From there, you can change the group tag that the chart is associated with. Each customer can be associated with a Group Tag within the customer object. Typically, group tags will take the form of groups such as Marketing, Sales, Engineering, Leadership, etc. ### Edit Default Layout To add/remove a chart from the default layout, click on the three dots and click 'Add to default layout' or 'Remove from default layout'. Only charts available to all customers can be added to the default layout. # How End Users Configure an Editable Dashboard Section Source: https://docs.explo.co/dashboard-features/editable-dashboard-sections/end-user-configuration-of-section This is how end users will configure and interact with editable dashboard sections. ### Adding/Removing Charts Within an Editable Section, a user can click the 'Add' button to see the charts on the Editable Dashboard Section and additional templates available to them. From there, they can toggle whether or not to show these charts. ### Moving Charts around and Resizing Charts Within an Editable Section, when a user clicks the 'Edit' button, they can click on a chart then move the chart around or resize the chart from the bottom right hand corner. # FAQ Source: https://docs.explo.co/dashboard-features/editable-dashboard-sections/faq ## Editable Dashboard Sections FAQ **Q: What charts do my customers see?** **A:** If no edits were made by the customer to the editable section, then the default layout will be shown. Note that the charts in the default layout that they will see are ones that they are permissioned to see (there is an `Visible to all customers` toggle) and that you choose to `Add to default layout`. If the customer makes changes to the editable section, then they have deviated from the default layout and will only see the specific view they have now created. **Q: What happens if I delete a chart from the editable dashboard section and my user might have deviated from the default layout and uses it?** **A:** The deleted chart will still take up the designated space on the editable dashboard section, but it will have an error saying that `The chart is no longer available`. You can preview editable dashboard sections to see if there are any impacted customers -- check out how to preview an editable dashboard section [here](/dashboard-features/editable-dashboard-sections/previewing-an-editable-dashboard-section). Please reach out to Explo support if you need help resetting a customers' editable dashboard section. **Q: How are the dashboard edits saved?** **A:** The dashboards are saved to the customer in Explo. For enabling editable dashboard sections, we would recommend utilizing the Explo hierarchy. In this model, you will continue to have your existing customers, but can now add sub customers (typically `users`) that can inherit the property of their parent. In this way, Explo will automatically save dashboard sections at the user level. # Previewing an Editable Dashboard Section Source: https://docs.explo.co/dashboard-features/editable-dashboard-sections/previewing-an-editable-dashboard-section ### How it works The preview URL will bring you to a view where you can preview a dashboard and toggle it for a specific customer group and version, allowing you to see exactly what the end user will see. This will allow you to see if any changes were made to their editable dashboard section and what those changes are. ### Preview URL To preview an editable dashboard section, go to the following URL: ``` app.explo.co/preview/ ``` To find the `DASHBOARD_EMBED_ID`, go to the embed modal for the dashboard. You can make changes to the editable section on this page, but the changes will not be saved. # Get Access Source: https://docs.explo.co/dashboard-features/email-reporting Send customizable emails with your dashboards to your customers on a regular cadence. If you would like to set up Email Reporting, please contact us at [support@explo.co](mailto:support@explo.co)! # Email Layout Configuration Source: https://docs.explo.co/dashboard-features/email-reporting/email-layout-configuration You can customize how you want your email to look with the Email Layout configuration, which can be found near the top middle of a dashboard page. In this configuration, you can specify custom text and formatting for headers and footers, and you can adjust the layout and contents of your dashboard, specifically for emails. # Email Networking Source: https://docs.explo.co/dashboard-features/email-reporting/email-networking # Email Egress IPs Explo's emails are coming from the below egress IPs ``` 149.72.49.28 167.89.81.10 ``` # Email-specific Dashboard Configuration Source: https://docs.explo.co/dashboard-features/email-reporting/email-specific-dashboard-configuration You can further customize your dashboards at the customer level when you create your customers. The attributes field on customers allows you to provide key-value pairs that can display on your dashboards like any other custom variables. For example, providing `name: 'Explo Customer'` as an attribute for an end\_user will display 'Hello Explo Customer!' in an email for the following dashboard. See [the customer api documentation](/api-reference/customer-api/get-or-create) for more information about how to create customers. ### Explo-Specific Attributes Explo also has specific attributes you can set for further control over your emails: header and footer. You can provide raw html to these attributes to display your own text, images, or links above or below the dashboard screenshot. # Scheduling Emails Source: https://docs.explo.co/dashboard-features/email-reporting/scheduling-emails From the Dashboard tab, you can open the Set Up Email modal for each of your dashboards. This modal contains options to configure how and when your emails get sent out to each of your customers. When emails for your dashboard are sent out, they are sent to each of the emails you've set up for your customers. The dashboard is populated with the data for the corresponding customer. See the [customer api documentation](/api-reference/customer-api/get-or-create) for more information about how to configure customers. Note that you must have emails set for your team's customers in order for emails to be sent. If a dashboard version is tagged with an `email` environment tag, that version will be used for the emails. Otherwise, the version tagged with `production` will be used. ### Email Frequency There are three options available for email frequency: daily, weekly, and monthly. The daily frequency sends emails out every day at the given time, the weekly frequency sends out each week on the specified day at the given time, and the monthly sends out on the given occurence of the specified day at the given time. Weekly Frequency Options Weekly Frequency Options Monthly Frequency Options Monthly Frequency Options ### Sending a Test Email To view what your dashboard will look like in an email, you can send a test email by supplying an email address in the test email box and hitting "Send Test." A test email will populate the dashboard with a random customer's data and will send to the email address you supply. # Row Level Actions Source: https://docs.explo.co/dashboard-features/row-level-actions The Row Level Actions feature allows your users to fire custom Javascript events from a row in a Data Table. When enabled, a special Row Level Actions column will be added as the last column to your Data Table. Each cell in this column will have a menu with custom actions that will be fired when clicked. Note that this feature is only enabled for the new Data Table. ## Configuration Row Action actions can be configured on the `Actions` tab for the Data Table. For each desired action, you’ll need to specify both the menu label you'd like your customers to see in the table and the Javascript event name. The Javascript event name will be passed into the event listener in your frontend code that will then trigger the desired action. You can learn more about interacting with custom Javascript events [here](/general-features/custom-js-events). The detail body that is passed with the javascript event contains the `rowData` of the row from which the action menu option is clicked. # Setting Category Colors Source: https://docs.explo.co/dashboard-features/setting-color-categories Sync colors for repeating categories across charts on your dashboard ## How to Set Category Colors Up In the top left corner of a dashboard page, the caret dropdown will open up a dropdown with a few different settings, including the ability to set color categories. Click "Set color categories". A modal will pop up, giving you the ability to add defined values or column names and their corresponding colors. There are two ways to set up colors. Values: You can set colors based on the underlying values you see in the dataset (not any formatted values) Set the color by the value name in the "Sync color categories" modal: Now, the data grouped by the value "Shared room" matches the light blue color specified at the dashboard level where the other columns use the chart's set color palette: Columns: You can set colors based on column names as identified by each y-axis column's data label. Set the color by its data label name in the "Sync color categories" modal: Now, the column with the data label "Average Price" matches the light green color specified at the dashboard level where the other columns use the chart's set color palette: ## General Feature Callouts * A chart using a custom color palette will override these color selections. * Column colors can only be set for line charts and bar charts. # Custom Styles Source: https://docs.explo.co/dashboard-features/styling-dashboards Explo is a fully white-labeled solution that allows you to customize the look and feel of your dashboards such that it matches your own application. Click on your user icon on the top right corner and select "Custom Styles" from the dropdown. Change parameters to customize your dashboards ### Multiple Style/Theme Profiles You can manage multiple style/theme profiles within Explo. By default, explo displays the 'default' theme/style in your embedded components. However, you can pass in the name of a theme/style via the theme prop in the iframe or web component to display a different theme/style. ``` #iframe #web component ``` Copy the exact styles from your own application in order to match the design. If you want to select new colors, you can reference tools such as [Adobe Color Wheel](https://color.adobe.com/create/color-wheel) for help! You can reference the following table to understand how each setting affects your dashboard: | Parameter | Effects on Dashboard | | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Number of dashboard columns | The number of columns on the dashboard determines the layouts that can be created. 12 columns provides the greatest flexibility, so we recommend that you don't change this value unless you have a unique use case.
**Default:** 12 | | Background Color | The background color for the dashboard.
**Default:** #FAFAFA | | Actions Color | The default color for buttons and input states.
**Default:** #0069ED | | Button Color | Overrides the default action color for buttons.
**Default:** Inherit | | Interaction States Color | Overrides the default action color for hover interactions (e.g. dropdown input).
**Default:** Inherit | | Spacing | The number of pixels between adjacent elements on the dashboard.
**Default:** | | Fill | The background color for charts and containers.
**Default:** #FFFFFF | | Outline | The border color and width for elements on the dashboard.
**Default:** Enabled, #D9E0E9, 1px | | Shadow | The box shadow color and size for elements on the dashboard. A box shadow allows elements to appear a "layer above" the background.
**Default:** Disabled, #000000, 4px | | Padding | Interior padding within charts and containers.
**Default:** 20px | | Corner Radius | Determines the roundness of the corners of elements on the dashboard.
**Default:** Inherit | | Button Corner Radius | Overrides the default corner radius for buttons.
**Default:** Inherit | | Primary Text | Font style and color for headings and most body text on the dashboard. Leaving this value as "Inherit" allows the dashboard to inherit the font family from the website in which it's embedded.
**Default:** Inherit, #000000 | | Secondary Text | Font style and color for supporting text and icons (e.g. "download CSV" icon button on the Data Table). Leaving this value as "Inherit" allows the dashboard to inherit the font family from the website in which it's embedded.
**Default:** Inherit, #626262 | | Text Size | The size of body text on the dashboard. Other text sizes are derived from this value as follows:
- **Header 1:** + 8px
- **Header 2:** + 6px
- **Header 3:** + 2px
- **Body:** + 0px
- **Small Heading:** - 2px
- **Small Body:** - 2px
| | Custom Text Overrides | Custom overrides for the various text types contained in a dashboard. These types are typically used as follows:
- **Header 1:** Extra large text to communicate a single value (e.g. KPI value)
- **Header 2:** Chart headings (e.g. Bar chart, Line chart, etc.)
- **Header 3:** Secondary headings (e.g. heading in date picker modal)
- **Body:** Most text on the dashboard, such as data table values, dropdown input options, and share button text.
- **Small Heading:** Chart axis and legend titles
- **Small Body:** Supporting text, such as chart axis and legend values
| | Categorical Palette | Default palette for category-based charts (e.g. Bar chart, Pie chart) Good for clear differentiation between categories.
**Default:** #0069ED, #907EFF, #7E9AFF, #7ACC39, #FF8750, #FCD508 | | Diverging Palette | Good for data where values fall on one end of a "middle point".
**Default:** #7ACC39, #FFFFFF, #0069ED | | Gradient Palette | Default palette for spectrum-based charts (e.g. Heat map). Good for data that falls on a spectrum or within a range.
**Default:** #FFFFFF, #0069ED | If you need any additional customizations, feel free to reach out to us at [support@explo.co](mailto:support@explo.co). # Custom Fonts Source: https://docs.explo.co/dashboard-features/styling-dashboards/custom-fonts Upload your own font and use it throughout your dashboards Click on your user icon on the top right corner and select "Settings" from the dropdown. From there go down to the custom fonts section and select your font file. The font file extensions we currently support are .otf, .ttf, .woff, and .woff2. We use the file name as the font name so make sure there are no duplicates. You can remove any uploaded file by clicking on "Remove". Then head to the custom styles section and in any of the font drop-downs you will see your custom fonts at the top like below. Select the font you want and save the style and your font should be ready to go! # Getting Started Source: https://docs.explo.co/data-share/getting-started ## Go to Data Share Navigate to Explo’s Data Share - the central hub for all Explo Asset sharing in your organization. Create new Shares, access previously scheduled Shares, edit Drafts, and view Data Sharing Recent Activity. ## Create a New Share New Shares are created using our setup tool that allows you to choose the delivery method, the cadence, the recipients, and the data assets you’d like to include. You are no longer required to send emails to all customers ## View scheduled Shares View all of your currently scheduled Shares and any drafts that you have waiting to be completed. ## Recent Activity View the Data Share’s Recent Activity page for a better understanding of all Data Sharing across your organization today. ## Email Layout Configuration When creating your Share, you can specify custom text and formatting for headers and footers, and you can adjust the layout and contents of your dashboard, specifically for emails. # Overview Source: https://docs.explo.co/data-share/overview Understanding Data Share and its components ## What is Data Share? Data Share is Explo’s central location for all Explo asset sharing in your organization. You can share Dashboards, Report Builders, and Datasets to customers directly using the different sharing methods available. Data Share is currently in Early Release. You may see limited feature availability until General Availability. ## Who can I share to? * Dashboards * Report Builders * Datasets * Multiple assets at a time * Attachments * PNG of charts * CSV of chart or dashboard data ## What are the Sharing Methods? * Email * S3 * SFTP * Webhooks *(coming soon)* * REST API *(coming soon)* * Direct warehouse sync *(coming soon)* * Slack *(coming soon)* * More to come! ## Who can I send to? * Individual Customers * Group Tags * Hierarchies * All Customers # S3 Setup Source: https://docs.explo.co/data-share/s3-setup Getting Started with Data Share: S3 Explo Data Share using S3 allows customers to deliver Explo Assets and Datasets directly to an end users S3 Bucket in their AWS account. End users will need to provide the appropriate permissions and Amazon Resource Name (ARN) for their S3 Bucket to be able to receive Shares. # Part 1: Permissions for the S3 Bucket To enable cross-account S3 bucket uploads, End Users need to configure a role with a policy allowing writes to the desired bucket and then share it with Explo. Explo will then assume the End User's configured role to write data to the End User's S3 bucket. ## Step 1: IAM Role in End Users AWS Account This trust policy should be attached to the **IAM Role** in your End Users AWS account that you want the Explo account to assume: ``` { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:root" // Replace with the external AWS Account ID }, "Action": "sts:AssumeRole" } ] } ``` This allows the specified AWS account to assume the role. Depending on which FIDO instance you are using, you will use a different ARN. If you don't know which FIDO instance you are on, then you are using `us-east-1` as that is the default: * `us-east-1`: `arn:aws:iam::251497699814:root` * `eu-central-1`: `arn:aws:iam::266735830005:root` * `ap-southeast-1`: `arn:aws:iam::897722681642:root` * `us-gov-east`: `arn:aws-us-gov:iam::184115685153:root` ## Step 2: IAM Role Permissions Policy The role Explo assumes must have an IAM policy that allows actions like `s3:PutObject` and optionally `s3:PutObjectAcl` on the correct S3 path. Attach this permissions policy to the role. It grants `s3:PutObject` and related permissions, but only for a specific prefix in the bucket: ``` { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:PutObjectAcl" ], "Resource": "arn:aws:s3:::your-bucket-name/specific/prefix/*" } ] } ``` Replace `your-bucket-name` and `specific/prefix/` with your actual bucket name and desired prefix. ## Step 3: (Optional) S3 Bucket Policy (for additional security) Sometimes the bucket itself restricts access further. In that case, the bucket owner (End Users) needs to attach a **bucket policy** allowing the IAM role to write to the prefix. If you want to enforce these permissions from the S3 bucket side as well, you can add a **bucket policy** like this: ``` { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowExternalAccountRoleToWriteToPrefix", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExternalRoleName" // Replace with role ARN }, "Action": [ "s3:PutObject", "s3:PutObjectAcl" ], "Resource": "arn:aws:s3:::your-bucket-name/specific/prefix/*" } ] } ``` # Part 2: Providing Explo with End User Information Explo Customer uploads ARN (Amazon Resource Name), S3 bucket information, and AWS Region for each of their customers S3 buckets to the user profiles in Explo. Each User will be able to have one S3 Bucket. ## Step 1. IAM Role ARN to Assume You'll need the full **ARN of the IAM role** in the target AWS account that Explo is allowed to assume. It looks like: ``` arn:aws:iam::111122223333:role/TheirRoleName ``` ## Step 2. S3 Bucket Name and Prefix You must know: * The **bucket name**, e.g., `their-company-data` * The **prefix (folder-like path)** you're allowed to write to, e.g., `uploads/your-team/` You'll be writing to keys like: ``` s3://their-company-data/uploads/your-team/myfile.csv ``` Summary of What Explo Needs: | Information | Purpose | | ------------------------------ | ------------------------------------------ | | Role ARN | So Explo can assume the cross-account role | | Bucket name | Where the files go | | AWS Region | Which AWS Region the S3 bucket is in | | Prefix path | Folder Explo is allowed to write to | | Permissions (their side) | To write objects | | Optional: Bucket policy access | To avoid "Access Denied" errors | ## Step 3: Add S3 Bucket information to each customer profile Once you've collected the Role Arn, Bucket name, and AWS Region from your end users you will add these as Key:Value pairs in the Customer's profile: S3 # SFTP Setup Source: https://docs.explo.co/data-share/sftp-setup Getting Started with Data Share: SFTP Explo Data Share using SFTP allows customers to deliver Explo Assets and Datasets directly to an end user's SFTP Server. End users will need to provide SFTP Export Username, Port, and Host Name to be able to receive Shares. # Part 1: SFTP Server Authentication Explo provides a public key for end users to input into their SFTP Server. Please add this to the server’s `.ssh/authorized_keys` file. # Part 2: Providing Explo with End User Information Explo Customer uploads SFTP Properties: Username, Port, and Host for each of their customers to the customer `properties` in Explo. Each User will be able to have one SFTP Server. SFTP The values `sftp_export_username`, `sftp_export_port`, `sftp_export_host` are reserved keys in the `properties`. # Building your data model Source: https://docs.explo.co/data-sources/building-your-data-model Although Explo can sit on top of almost any data model, here are a few tips to ensure better performance and ease of use when connecting to Explo. ### Segment your data by customers It is very important for your data to be segmented by customers. In most cases, a customer is your customer, but can also be different entities that you wish to split your data by. Ensuring that tables in your database contains a field such as`customer_id`or `organization_name `can make it much easier and quicker to query and segment your data. However, if all your tables do not have a customer field, you can always join tables in the Explo interface. Alternatively, Explo also support data models where data for each customer is in a separate database. In this case, it is not important to have a customer field in each of your tables. Instead you would refer to our API docs to tell us where data for each customer is stored. ### Transform or process your data to create golden tables Golden tables are tables that contain the relevant data for a specific business process that can be easily queried to pull insights or metrics without needing to join with other tables. These tables should all have a customer field so Explo can easily segment the data in each table. These tables should not be aggregated views but rather raw data. Furthermore, each row should have the same granularity. As an example, if you are creating a marketplace platform, you may have 3 golden tables with the following fields: | Table | Fields | | --------- | ----------------------------------------------------------------------------------------------------- | | Orders | `order_status`, `SKU`, `quantity`, `shipping_cost`, `price`, `customer_id`, `seller_id`, `order_date` | | Customers | `customer_name`, `customer_id` ,`email`, `address`, `payment info` | | Products | `SKU`, `product_name`, `description`, `seller_id` | In the example above, `seller_id` would be used to segment the data for each customer. Because you can run aggregations and calculations in Explo, it is best not to run these aggregations here, so you have the flexibility to do so in Explo. If you do not have tables that are ready to query, you can leverage a tool such as [DBT](https://www.getdbt.com/) or [Airflow](https://airflow.apache.org/) as a transform layer to create these tables. This will dramatically improve the performance of your dashboards in Explo. ### Handle schema complexity upstream Perform more complex data transformations and calculations in the database or ETL layer rather than running those calculations in Explo. This will also dramatically improve load times. # AWS PrivateLink Source: https://docs.explo.co/data-sources/connecting-to-data-sources/aws-private-link Connect your AWS hosted data source to Explo using AWS PrivateLink. ## General Find out more about AWS PrivateLink through the AWS Whitepaper, [here](https://docs.aws.amazon.com/whitepapers/latest/aws-vpc-connectivity-options/aws-privatelink.html). Connect your data source to Explo using this AWS Blog Post: [Access Amazon RDS Across VPCs using AWS PrivateLink and Network Load Balancer](https://aws.amazon.com/blogs/database/access-amazon-rds-across-vpcs-using-aws-privatelink-and-network-load-balancer/). If you are interested in connecting to Explo using AWS PrivateLink, please reach out to [support@explo.co](mailto:support@explo.co) for support. # Connectivity Regions Source: https://docs.explo.co/data-sources/connecting-to-data-sources/connectivity-regions ## Overview Explo supports multiple multi-tenant, shared connectivity regions for connecting to customer data sources. Selecting a region that is closest in global proximity to your data sources can result in lower query and connection latency and improve your Explo integration performance. Explo additionally supports separate, isolated connectivity regions for enterprise customers who require them. Contact your Explo Customer Team to discuss your needs. ## Enabling access to a connectivity region Typically you will need to ensure your infrastructure is allowed to receive traffic from the Explo connectivity region you are using. To do so you may need to allowlist traffic from the Explo connectivity region in your infrastructure. ### Default connectivity region access Explo supports multiple connectivity regions, and unless you are informed otherwise by your Explo Customer Team, as a minimum, *you may need to allowlist the IPV4 addresses for our legacy US-East-1 and Data Connector US-East-1 regions*: ``` 54.211.43.19 52.55.98.121 3.214.169.94 54.156.141.148 3.219.104.199 35.175.85.18 100.27.162.59 34.231.221.92 ``` ## Available Shared Connectivity Regions ### Default US-East-1 By default all data source connectivity, queries, and traffic are sourced from our legacy US-East-1 region. Unless your Explo Customer Team informs you otherwise, your connectivity traffic will be sourced from this region. Explo is actively migrating customers away from this legacy infrastructure. Please also see notes and IP egress information below for the US-East-1 Connector region below where most customers will be migrated to. #### Egress IPs ``` 54.211.43.19 52.55.98.121 3.214.169.94 54.156.141.148 ``` ### Data Connector US-East-1 This is our [new data connector, FIDO](/data-sources/new-data-connector-fido). Customers are being actively migrated to this new infrastructure which will be the default shortly. #### Egress IPs ``` 3.219.104.199 35.175.85.18 100.27.162.59 34.231.221.92 ``` ### Data Connector EU-Central-1 (Frankfurt) EU customers may reach out to your Explo Customer Team for access. #### Egress IPs ``` 35.157.246.84 3.73.202.204 ``` ### Data Connector AP-Southeast-1 (Singapore) APAC customers may reach out to your Explo Customer Team for access. #### Egress IPs ``` 18.142.175.184 52.220.14.111 ``` ### Data Connector US-Gov-East (contact your Explo representative for access) Customers whose data are export-restricted under ITAR can contact Explo to inquire. #### Egress IPs ``` 18.254.115.36 18.254.187.80 ``` ### Future Shared Data Orchestrator Regions Please reach out to your Explo Customer Team to discuss new region needs. # Athena Source: https://docs.explo.co/data-sources/connecting-to-data-sources/data-source-types/athena ## Intro Find out more about Athena [here](https://aws.amazon.com/athena/). ## Necessary Credentials * **AWS Region** * Example: *us-east-1* * **Data Catalog (Data Source)** * **AWS Access Key ID** * **AWS Secret Key** * Scheme you want to use (options below) * **S3 Output Location (optional)** * Example: *s3://query-results-bucket/example/* * **Work Group (optional)** * Example: *primary* ## Allowlisting Explo's IPs You may need to allowlist egress IPs for your [Connectivity Region](/data-sources/connecting-to-data-sources/connectivity-regions). ## Questions? Please reach out to the Explo team at [support@explo.co](mailto:support@explo.co) if you have any questions. # Azure SQL DB Source: https://docs.explo.co/data-sources/connecting-to-data-sources/data-source-types/azure ## Intro Find out more about Azure [here](https://azure.microsoft.com/en-us/products/azure-sql/database/). By default, our JDBC driver connects with `applicationIntent` set to `ReadOnly` and `applicationName` set to `explo_fido`. ## Necessary Credentials * **Server** * The server where your database lives * Example: *x.database.windows.net* * **Port** * The port the database server uses * Example: *1433* * **Database** * Name of the database you are connecting Explo to * Example: *acme\_production* * **Username** * Service user's username * **Password** ## Allowlisting Explo's IPs You may need to allowlist egress IPs for your [Connectivity Region](/data-sources/connecting-to-data-sources/connectivity-regions). ## SSH Tunnels You can connect to Postgres databases via an SSH tunnel if necessary. Check out [this](/data-sources/connecting-to-data-sources/ssh-tunnels) section on SSH tunnels to see how. ## Questions? Please reach out to the Explo team at [support@explo.co](mailto:support@explo.co) if you have any questions. # BigQuery Source: https://docs.explo.co/data-sources/connecting-to-data-sources/data-source-types/big-query ## Intro Find out more about BigQuery [here](https://cloud.google.com/bigquery). ## Necessary Credentials * **Project ID** * This is the ID of the project * **JSON Key File** * This file was given to you when you created the service account ## Allowlisting Explo's IPs You may need to allowlist egress IPs for your [Connectivity Region](/data-sources/connecting-to-data-sources/connectivity-regions). ## BigQuery Credentials Create a Bigquery service user 1. In the Cloud Console, go to the **Create service account key** [page](https://console.cloud.google.com/apis/credentials/serviceaccountkey). 2. From the **Service account** list, select **New service account**. 3. In the **Service account name** field, enter a name. 4. From the **Role** list, add the following roles 1. BigQuery Job User 2. BigQuery Data Viewer 3. BigQuery Metadata Viewer 5. Click **Create**. A JSON file that contains your key downloads to your computer. The **Role** field affects which resources your service account can access in your project. You can revoke these roles or grant additional roles later. For more information, see [Granting, changing, and revoking access to resources](https://cloud.google.com/iam/docs/granting-changing-revoking-access). ## Troubleshooting 1. If you are getting `403 Access Denied: BigQuery BigQuery: Permission denied while getting Drive credentials.` Check out [this response](https://www.googlecloudcommunity.com/gc/Data-Analytics/Access-Denied-BigQuery-BigQuery-Permission-denied-while-getting/m-p/545009/highlight/true#M1699) from Google's support team. This has solved previous issues! ## Questions? Please reach out to the Explo team at [support@explo.co](mailto:support@explo.co) if you have any questions. # Clickhouse Source: https://docs.explo.co/data-sources/connecting-to-data-sources/data-source-types/clickhouse ## Intro Find out more about Clickhouse [here](https://clickhouse.com/). ## Necessary Credentials * **Hostname** * The server where your database lives * Example: *rds.amazonaws.com* * **Port** * The port the database server uses * Example: *9440* * Note that Explo only supports the Clickhouse Native Protocol and other common Clickhouse ports will not work. Ensure the native protocol port over SSL is open. Find out more [here](https://clickhouse.com/docs/en/guides/sre/configuring-ssl#5-configure-ssl-tls-interfaces-on-clickhouse-nodes). * Explo's new data connector (FIDO) will be using the HTTPS port, 8443. Please ensure BOTH are allowlisted. If you are onboarding to a new workspace, the Explo team can help you determine which connector you are initially using. * **Database** * Name of the database you are connecting Explo to * Example: *acme\_production* * **Username** * **Password** ## Allowlisting Explo's IPs You may need to allowlist egress IPs for your [Connectivity Region](/data-sources/connecting-to-data-sources/connectivity-regions). ## SSH Tunnels You can connect to Postgres databases via an SSH tunnel if necessary. Check out [this](/data-sources/connecting-to-data-sources/ssh-tunnels) section on SSH tunnels to see how. ## Questions? Please reach out to the Explo team at [support@explo.co](mailto:support@explo.co) if you have any questions. # CockroachDB Source: https://docs.explo.co/data-sources/connecting-to-data-sources/data-source-types/cockroachdb ## Intro Find out more about CockroachDB [here](https://www.cockroachlabs.com/). ## Necessary Credentials * **Hostname** * The server where your database lives * Example: *name1.name2.cockroachlabs.cloud* * **Port** * The port the database server uses * Example: *26257* * **Database name** * Name of the database you are connecting Explo to * Example: *acme\_production* * **Authentication** * Scheme you want to use (options below) ### Authentication Options **Username and Password** * Credentials: * Username * Password ## Whitelisting Explo's IPs You may need to allowlist egress IPs for your [Connectivity Region](/data-sources/connecting-to-data-sources/connectivity-regions). ## SSH Tunnels You can connect to Postgres databases via an SSH tunnel if necessary. Check out [this](/data-sources/connecting-to-data-sources/ssh-tunnels) section on SSH tunnels to see how. ## Questions? Please reach out to the Explo team at [support@explo.co](mailto:support@explo.co) if you have any questions. # Databricks Source: https://docs.explo.co/data-sources/connecting-to-data-sources/data-source-types/databricks ## Intro Find out more about Databricks [here](https://www.databricks.com/). ## Necessary Credentials * **Hostname** * The server where your database lives * Example: *cloud.databricks.com* * **HTTP Path** * The path to your cluster * Example: *sql/protocol/v1/\*\*\*\** ### Authentication Options * **Token** * Your personal access token you've setup for Explo to use * **OAuth** * The OAuth Client Id and Secret you've setup for Explo to use * For more information on generating the configuration in Databricks, please see [their documentation](https://docs.databricks.com/aws/en/dev-tools/auth/oauth-m2m) ## Allowlisting Explo's IPs You may need to allowlist egress IPs for your [Connectivity Region](/data-sources/connecting-to-data-sources/connectivity-regions). ## Questions? Please reach out to the Explo team at [support@explo.co](mailto:support@explo.co) if you have any questions. # Materialize Source: https://docs.explo.co/data-sources/connecting-to-data-sources/data-source-types/materialize ## Intro Find out more about Materialize [here](https://www.materialize.com). ## Necessary Credentials * **Hostname** * The server where your database lives * Example: *STRING.us-east-1.aws.materialize.cloud* * **Port** * The port the database server uses * Example: *6875* * **Database name** * Name of the database you are connecting Explo to * Example: *materialize* * **Authentication** * Scheme you want to use (options below) ### Authentication Options **Username and Password** * Credentials: * Username * Password ## Whitelisting Explo's IPs You may need to allowlist egress IPs for your [Connectivity Region](/data-sources/connecting-to-data-sources/connectivity-regions). ## SSH Tunnels You can connect to Postgres databases via an SSH tunnel if necessary. Check out [this](/data-sources/connecting-to-data-sources/ssh-tunnels) section on SSH tunnels to see how. ## Questions? Please reach out to the Explo team at [support@explo.co](mailto:support@explo.co) if you have any questions. # Microsoft SQL Server Source: https://docs.explo.co/data-sources/connecting-to-data-sources/data-source-types/microsoft-sql-server ## Intro Find out more about MSS [here](https://learn.microsoft.com/en-us/sql/). Explo only supports SQL Server 2016 and later. ## Necessary Credentials * **Server** * The server where your database lives * Example: *x.database.windows.net* * **Port** * The port the database server uses * Example: *1433* * **Database** * Name of the database you are connecting Explo to * Example: *acme\_production* * **Username** * Service user's username * **Password** ## Allowlisting Explo's IPs You may need to allowlist egress IPs for your [Connectivity Region](/data-sources/connecting-to-data-sources/connectivity-regions). ## SSH Tunnels You can connect to Postgres databases via an SSH tunnel if necessary. Check out [this](/data-sources/connecting-to-data-sources/ssh-tunnels) section on SSH tunnels to see how. ## Questions? Please reach out to the Explo team at [support@explo.co](mailto:support@explo.co) if you have any questions. # MotherDuck Source: https://docs.explo.co/data-sources/connecting-to-data-sources/data-source-types/motherduck ## Intro Find out more about MotherDuck [here](https://motherduck.com/). ## Necessary Credentials * **Database name** * Name of the database you are connecting Explo to * Example: *word1-word2* * **Authentication** * Scheme you want to use (options below) ### Authentication Options **Access Token** You can generate an access token in the settings page of the MotherDuck app. We recommend provisioning a specific access token for your Explo workspace. ## Questions? Please reach out to the Explo team at [support@explo.co](mailto:support@explo.co) if you have any questions. # MySQL Source: https://docs.explo.co/data-sources/connecting-to-data-sources/data-source-types/mysql ## Intro Find out more about MySQL [here](https://www.mysql.com/). ## Necessary Credentials * **Hostname** * The server where your database lives * Example: *rds.amazonaws.com* * **Port** * The port the database server uses * Example: *3306* * **Database** * Name of the database you are connecting Explo to * Example: *acme\_production* * **Authentication** * Scheme you want to use (options below) ### Authentication Options **Username and Password** * Credentials: * Username * Password **AWS IAM Authentication** * Make sure your created IAM user has the necessary privileges in your database to let Explo read your tables. * To create an IAM user, see [here](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html#id_users_create_console) * Credentials: * Username * AWS Region * AWS Access Key ID * AWS Secret Key * SSL Cert ## Allowlisting Explo's IPs You may need to allowlist egress IPs for your [Connectivity Region](/data-sources/connecting-to-data-sources/connectivity-regions). ## SSH Tunnels You can connect to Postgres databases via an SSH tunnel if necessary. Check out [this](/data-sources/connecting-to-data-sources/ssh-tunnels) section on SSH tunnels to see how. ## Questions? Please reach out to the Explo team at [support@explo.co](mailto:support@explo.co) if you have any questions. # Parade DB Source: https://docs.explo.co/data-sources/connecting-to-data-sources/data-source-types/parade-db ## Intro Find out more about ParadeDB [here](https://www.paradedb.com/). ## Necessary Credentials * **Hostname** * The server where your database lives * Example: *word1-word2.cloud.paradedb.com* * **Port** * The port the database server uses * Example: *5432* * **Database name** * Name of the database you are connecting Explo to * Example: *word1-word2* * **Authentication** * Scheme you want to use (options below) ### Authentication Options **Username and Password** * Credentials: * Username * Password ## Allowlisting Explo's IPs You may need to allowlist our Explo IP's `54.211.43.19`, `52.55.98.121`, `3.214.169.94`,and`54.156.141.148` ## Questions? Please reach out to the Explo team at [support@explo.co](mailto:support@explo.co) if you have any questions. # Postgres Source: https://docs.explo.co/data-sources/connecting-to-data-sources/data-source-types/postgres ## Intro Find out more about Postgres [here](https://www.postgresql.org/). ## Necessary Credentials * **Hostname** * The server where your database lives * Example: *rds.amazonaws.com* * **Port** * The port the database server uses * Example: *5432* * **Database name** * Name of the database you are connecting Explo to * Example: *acme\_production* * **Authentication** * Scheme you want to use (options below) ### Authentication Options **Username and Password** * Credentials: * Username * Password **AWS IAM Authentication** * Make sure your created IAM user has the necessary privileges in your database to let Explo read your tables. * To create an IAM user, see [here](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html#id_users_create_console) * Credentials: * Username * AWS Region * AWS Access Key ID * AWS Secret Key * SSL Cert ## Allowlisting Explo's IPs You may need to allowlist egress IPs for your [Connectivity Region](/data-sources/connecting-to-data-sources/connectivity-regions). ## SSH Tunnels You can connect to Postgres databases via an SSH tunnel if necessary. Check out [this](/data-sources/connecting-to-data-sources/ssh-tunnels) section on SSH tunnels to see how. ## Questions? Please reach out to the Explo team at [support@explo.co](mailto:support@explo.co) if you have any questions. # Redshift Source: https://docs.explo.co/data-sources/connecting-to-data-sources/data-source-types/redshift ## Intro Find out more about Redshift [here](https://aws.amazon.com/redshift/). ## Necessary Credentials * **Hostname** * The server where your database lives * Example: *rds.amazonaws.com* * **Port** * The port the database server uses * Example: *5439* * **Database name** * Name of the database you are connecting Explo to * Example: *acme\_production* * **Authentication** * Scheme you want to use (options below) ### Authentication Options **Username and Password** * Credentials: * Username * Password **AWS IAM Authentication** * Make sure your created IAM user has the necessary privileges in your database to let Explo read your tables. * To create an IAM user, see [here](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html#id_users_create_console) * Credentials: * Username * AWS Region * AWS Access Key ID * AWS Secret Key * SSL Cert ## Allowlisting Explo's IPs You may need to allowlist egress IPs for your [Connectivity Region](/data-sources/connecting-to-data-sources/connectivity-regions). ## SSH Tunnels You can connect to Postgres databases via an SSH tunnel if necessary. Check out [this](/data-sources/connecting-to-data-sources/ssh-tunnels) section on SSH tunnels to see how. ## Finding Redshift Credentials You can find your Redshift cluster details via the AWS console. The *Endpoint* section gives you the hostname and port all in one. You'll need to get the database name and a username/password from whoever set up the Redshift cluster. ## Questions? Please reach out to the Explo team at [support@explo.co](mailto:support@explo.co) if you have any questions. # SingleStore Source: https://docs.explo.co/data-sources/connecting-to-data-sources/data-source-types/singlestore ## Intro Find out more about SingleStore [here](https://www.singlestore.com/). ## Necessary Credentials * **Hostname** * The server where your database lives * Example: *db.location.singlestore.com* * **Port** * The port the database server uses * Example: *3306* * **Database name** * Name of the database you are connecting Explo to * Example: *dbname* * **Authentication** * Scheme you want to use (options below) ### Authentication Options **Username and Password** * Credentials: * Username * Password ## Allowlisting Explo's IPs You may need to allowlist egress IPs for your [Connectivity Region](/data-sources/connecting-to-data-sources/connectivity-regions). ## Questions? Please reach out to the Explo team at [support@explo.co](mailto:support@explo.co) if you have any questions. # Snowflake Source: https://docs.explo.co/data-sources/connecting-to-data-sources/data-source-types/snowflake ## Intro Find out more about Snowflake [here](https://www.snowflake.com/). ## Default Warehouse for User The Snowflake service user needs to have a default warehouse set. Check out [these Snowflake docs](https://docs.snowflake.com/en/user-guide/warehouses-overview#default-warehouse-for-users) to see how to set a default warehouse. ## Necessary Credentials * **Username** * This is your service user's username * Example: *explo\_user* * **Account** * Snowflake account identifiers * Find out more [here](https://docs.snowflake.com/en/user-guide/admin-account-identifier#where-are-account-identifiers-used) * **Database** * Name of the database within Snowflake * Example: *snowflake\_sample\_data* ### Authentication Options * **Private Key (Recommended)** * You'll pass in your RSA private key to Explo to use in authenticating with Snowflake. See [Snowflake's documentation](https://docs.snowflake.com/en/user-guide/key-pair-auth#configuring-key-pair-authentication) for help creating and setting up an unencrypted private key. * **Password (Deprecated) / PAT** * Snowflake has deprecated single-factor password authentication and [will block it by November 2025](https://www.snowflake.com/en/blog/blocking-single-factor-password-authentification/). It is highly recommended to setup Private Key or PAT authentication instead. * You can also use a Programmatic Access Token (PAT) instead of a password to authenticate with Snowflake. See [Snowflake's documentation](https://docs.snowflake.com/en/user-guide/programmatic-access-tokens) ## Allowlisting Explo's IPs You may need to allowlist egress IPs for your [Connectivity Region](/data-sources/connecting-to-data-sources/connectivity-regions). ## Questions? Please reach out to the Explo team at [support@explo.co](mailto:support@explo.co) if you have any questions. # Supabase Source: https://docs.explo.co/data-sources/connecting-to-data-sources/data-source-types/supabase ## Intro Find out more about Supabase [here](https://supabase.com/). When connecting to Supabase, use **Supabases Shared Pooler Connection**. Click [here](https://supabase.com/docs/guides/database/connecting-to-postgres) for more information. ## Necessary Credentials **Supabase Credential Location** ``` https://supabase.com/dashboard/project/PROJECT_ID/settings/database ``` * **Hostname** * The server where your database lives * Example: *db.PROJECT\_ID.supabase.co* * **Port** * The port the database server uses * Example: *5432* * **Database name** * Name of the database you are connecting Explo to * Example: *postgres* * **Authentication** * Scheme you want to use (options below) ### Authentication Options **Username and Password** * Credentials: * Username * Password ## Allowlisting Explo's IPs You may need to allowlist egress IPs for your [Connectivity Region](/data-sources/connecting-to-data-sources/connectivity-regions). ## Questions? Please reach out to the Explo team at [support@explo.co](mailto:support@explo.co) if you have any questions. # Timescale Source: https://docs.explo.co/data-sources/connecting-to-data-sources/data-source-types/timescale ## Intro Find out more about Timescale [here](https://www.timescale.com/). ## Necessary Credentials * **Hostname** * The server where your database lives * Example: *abcdefghi.jklmnopqrs.databasename.cloud.timescale.com* * **Port** * The port the database server uses * Example: *31828* * **Database name** * Name of the database you are connecting Explo to * Example: *acme\_production* * **Authentication** * Scheme you want to use (options below) ### Authentication Options **Username and Password** * Credentials: * Username * Password ## Allowlisting Explo's IPs You may need to allowlist egress IPs for your [Connectivity Region](/data-sources/connecting-to-data-sources/connectivity-regions). ## Questions? Please reach out to the Explo team at [support@explo.co](mailto:support@explo.co) if you have any questions. # SSH Tunnels Source: https://docs.explo.co/data-sources/connecting-to-data-sources/ssh-tunnels ## Intro Find out more about SSH Tunnels, in general, [here](https://www.ssh.com/academy/ssh/tunneling). ## Connecting via SSH Tunnels To connect to your database via an SSH tunnel, you will need to provide these credentials in the "Security" section of the connection flow: * SSH Server Hostname * SSH Server Port * SSH Username * SSH Key * There are two options for SSH keys, `External Private Key` or `Explo Private Key`. See the section below for more information about which to use. * (optionally) SSH Local Bind Port ### SSH Keys Our recommendation between the two options is to use Explo's Private Key. **Explo Private Key:** * You'll be able to copy our public key and add it to your infrastructure under your chosen username (we recommend `explo`). This would set up the connection such that you would not need to exchange any private keys. **External Private Key:** * You'll pass in your RSA private key to Explo to utilize in authenticating with the SSH box. ## SSH Configuration Recommendations Check your SSH box's sshd config (it's normally located in `/etc/ssh/sshd_config`). We recommend setting `MaxSessions` and `MaxStartups` to 100. ## Setting Up an SSH Bastion (aka Jump Box or Jump Server) 1. Create a new host with a public static IP that has inbound network access secured with your network's and Explo's egress IPs. 2. Create a new user (`explo`, for instance) on that host with password login disabled and with an `authorized_keys` file that contains Explo’s public key. This key can be found when adding a data source with an SSH tunnel in Explo. 3. Connect to your database in the Explo application by specifying the above public static IP and username as part of the SSH tunnel configuration, choosing the Explo Private Key authentication option. ## Questions? Please reach out to the Explo team at [support@explo.co](mailto:support@explo.co) if you have any questions. # FAQ Source: https://docs.explo.co/data-sources/data-library/faq Common questions about the Data Library, Global Datasets, and Local Datasets ## Data Library Questions **Which datasets can I see in Data Library?** You'll only see Global Datasets. Local datasets will continue to be visible in the Dashboard and Report Builder views. ## Global Dataset Questions **What are the current differences between Global Datasets and Local Datasets?** The save flow is different. For Global Datasets, changes will be saved through commits and autosaved in local storage. **How do Variables work with Global Datasets?** Variables work the same way with Global Datasets as they work with Local Datasets. If you currently use Variables with your Local Datasets today, you will need to remap those variables to corresponding variables in the Global Dataset. When you copy a Local Dataset to a Global Dataset, all defined variables will be copied over. The mapping of those variables will need to be redone after your copy is complete. ## Local Dataset Questions **What happens to my Local Datasets when I onboard to Global Datasets?** Local Datasets will still be available with Dashboards and Report Builders. You can continue using them alongside Global Datasets. **Can I convert a Local Dataset to a Global Dataset?** Yes, you can promote a Local Dataset to a Global Dataset at any time by copying it to the Data Library through the Dashboard Datasets panel. # Global Datasets Source: https://docs.explo.co/data-sources/data-library/global-datasets Understanding and getting started with Global Datasets ## Demo Video To see a Global Datasets demo, check out this Loom [here](https://www.loom.com/share/d708f8c1aec7465c8f6d1dbbd1a765e4). ## About Global Datasets Global Datasets are reusable data definitions that can be shared across your entire organization. They function as a semantic layer that: * Enables teams to define datasets once and reuse them across Dashboards and Report Builders * Ensures consistency across all dashboards and report builders * Eliminates duplicate datasets and reduces potential errors ## Getting Started with the Data Library and Global Datasets **Step 1: Go to the Data Library** Navigate to the Data Library on the left side menu. Create your required folder structure before creating a Dataset. Note: You cannot currently move a folder. If you need to move a folder, please delete and create in the new location. **Step 2: Create a Dataset** Give the dataset a meaningful name and assign it to a destination schema. This ensures it is easily recognizable. **Step 3: Define the Dataset** Write the SQL logic for your dataset and define fields, conditions, and business logic. **Step 4: Commit Your Changes** Once you've written or updated the SQL, click the "Create Commit" button to save your changes. You will now document your version history and ensure every version update is traceable. **Step 5: Import Global Datasets into a Dashboard and Report Builder** You are now ready to build! You can use both Global Datasets and "local" datasets to build dashboards report builders. Navigate to the Datasets tab in the dashboard or report builder creation page to search and import the dataset(s) you need from the Data Library. # Local Datasets Source: https://docs.explo.co/data-sources/data-library/local-datasets Understanding Local Datasets in Explo ## About Local Datasets Local Datasets are dashboard-specific data definitions that provide flexibility and quick iteration capabilities for individual dashboards. They are designed to: * Enable rapid prototyping and development * Provide dashboard-specific customization * Support iterative development processes ## Dashboard-Specific Storage Unlike Global Datasets, Local Datasets: * Live outside the Data Library * Are specific to individual dashboards * Can be modified without affecting other dashboards ## Promotion to Global Datasets When a Local Dataset proves valuable across multiple dashboards: 1. Access the Dashboard Datasets panel 2. Select the Local Dataset you want to promote 3. Use the "Copy to Data Library" option 4. The dataset will be available as a Global Dataset When promoting a Local Dataset to a Global Dataset, remember that any variables defined in the Local Dataset will need to be remapped in the Global Dataset version. # Overview Source: https://docs.explo.co/data-sources/data-library/overview Understanding the Data Library and its components ## What is the Data Library? The Data Library is the central repository for all Global Datasets in your organization. It serves as a unified location where you can: * Access datasets created by your colleagues * Organize datasets into folders by domains, themes, use-cases, or customers * Manage both Global and Local datasets efficiently ## What are Global Datasets? Global Datasets are reusable data definitions that can be shared across your entire organization. Learn more [here](/data-sources/data-library/global-datasets). ## What are Local Datasets? Local Datasets are dashboard-specific data definitions. Learn more [here](/data-sources/data-library/local-datasets). # Overview Source: https://docs.explo.co/data-sources/data-sources-and-schema This section describes the data model through which Explo organizes and connects to your databases. Sources and schemas ## What are Schema? Schema are a foldering system that you can use to group your data sources by queries that will be run against them. Schema define a set of common tables between its data sources, which are referred to as synced tables. Each schema has a default data source, which serves as the source of these synced tables for that schema. Dataset queries and visualizations are configured against a schema, rather than a single dataset. When you render a dashboard for a specific customer, it will pull all data from the data source the customer is associated with for each schema when populating the view. All data sources in your schema must have the same set of tables in order for dashboards to work as expected. All dataset queries and visualizations you configure in the dashboard must run correctly against every data source you add to a schema. ## What is a Data Source? A data source is a connection to a single database or data warehouse. The data pulled into your dashboards comes from a data source, and Explo supports connecting multiple data sources to your dashboards. Data sources are associated with customers, and this association is what tells Explo which data sources to pull from when populating your dashboards. Customers do not have to explicitly be associated with a data source, and Explo will use your schema's default data source. You can view the data exposed to Explo for your data sources by clicking on a data source from the Data tab. From this view, you can see a list of synced tables for that data source's schema, and the data from that specific data source. You can use the dropdown to select each data source from that schema. ## Why use Schema? Schema are a powerful tool that enable you to use databases of different shapes to power different elements of your dashboard. Because datasets in your dashboard are connected to a specific schema, you don't have to ensure that every data source you connect to Explo works with every query you write. For example, you might have a set of data sources in a "Sales" schema that powers some datasets and dashboard elements and another set of data sources in a "Marketing" schema that powers others. Your customers would see their own data in each of these schemas, which makes your dashboards more flexible and informative. # Managing Schema Source: https://docs.explo.co/data-sources/data-sources-and-schema/managing-schema This guide describes how to manage schema set up for your multiple data sources. ## Adding a Schema To add a schema, you must create a new data source and associate it with that schema. On the Data tab, click the "Add Data Source" button to add a new data source. As part of this flow, you will see a 'plus' sign next to the schemas dropdown, which you can click to enter a schema name. This data source will automatically be assigned as the default data source for your new schema, and you will be prompted to sync tables on connection to the data source. ## Managing Schema To manage schema, navigate to the Data tab and click the Manage Schemas button. From here, you can edit the names of your schema, change the default data source, and delete your schema. When changing the default data source for a schema, it is recommended that you then sync tables for that data source again. Deleting a schema is an operation that should only be done if absolutely necessary. When you delete a schema, all data sources linked to that schema will be deleted. Because these data sources may be powering queries in your dashboards, you cannot delete a schema that has any datasets linked to that schema. You must first manually delete those data sets from the Dashboard editor before deleting the schema itself. # Multiple Data Sources Source: https://docs.explo.co/data-sources/data-sources-and-schema/multiple-data-sources This guide describes how to configure Explo to support multiple data sources ## Why Multiple Data Sources? There are a few different reasons why you may want to connect multiple data sources to Explo: * You want to connect and build dashboards against both your staging and production databases * You have customer data segmented into multiple different databases In either of these scenarios, you can use Explo to connect multiple data sources to power your dashboards. Explo allows you to folder your data sources by schema to configure which queries run against which data sources. For more information, navigate to the [Managing Schema](/data-sources/data-sources-and-schema/managing-schema) section of our documentation. ## View Data Sources To view all connected data sources, navigate to the Data tab. On this page, you will see all connected data sources. If you click on a specific data source, you will be taken to a data viewer where you can preview the data in the data source. This view also allows you to toggle between different data sources within that schema. ## Add a Data Source On the Data tab, click the "Add Data Source" button to add a new data source. First, you'll be prompted to enter a display nickname and id for your database, along with choosing its schema and visibility group. For more information about visibility groups, check out [this section of our documentation](/managing-permissions/visibility-groups). Follow the steps in the flow and enter your credentials for the database to connect it to Explo. ## Connecting Customers to Data Sources ### Customer API Every customer you create in Explo is associated with a specific set of data sources, one for each schema. When you render the dashboard for that customer, it will pull all data for that view from those data sources associated with the customer. When you create a customer via the API, you can optionally specify a `data_source_id` or the `data_source_provided_id`. This will associate the user group with that data source for the schema that data source belongs to. If you do not specify the data source, it will associate the customer with the default data source, which you can configure from the data page. For more information, go to [our section on the Customer API](/api-reference/customer-api). You can retrieve the data default `data_source_id` by going to the data tab and looking at the number ID for the data source (47). Example data sources with IDs You can assign a `data_source_provided_id` in the data tab which then can be used to identify the data source in your API requests: Selecting to rename the provided_id ### Customers Tab On the Customers tab, there are dropdowns for choosing a data source for each schema when editing or creating a customer. If no data source is selected for a given schema, that customer will be associated with the default data source for that visibility group and schema. ## Viewing Dashboards in Different Data Sources When you are making dashboards, there is a dropdown for customers. For each dashboard, you will be able to toggle between different customers to select which one you are viewing as. the data on the page will then reflect data from the data sources associated with that customer. ## Embedding with Multiple Data Sources Embedding with multiple data sources is as straightforward as with a single data source. When you create your customers, we will give you back the customer token. Simply provide this token when embedding and we will query from the right data sources and present the correct data. # Sync Tables Source: https://docs.explo.co/data-sources/data-sources-and-schema/sync-new-tables Sync tables in your database Syncing tables will allow you to view table and column names in the dataset editor, as well as use autocomplete when writing SQL. It is recommended that you sync tables when adding a new schema to Explo, or when new tables are added into your database or warehouse. You can sync tables by clicking on the triple dot menu to the right of the schema. From here, you can select the specific tables that you plan on querying from while using Explo. Note that all tables will still be accessible in the dataset editor, but only synced tables will show up with autocomplete. Click continue and the tables should be synced! This may take a little while if the tables are particularly large. Note that a schema only syncs tables taken from the default data source for that schema. # Data Source Specifics Source: https://docs.explo.co/data-sources/fido/data-source-specifics Below is a table explaining some specifics around how FIDO interacts with each data source it connects to. | Data Source Type | Persistent Connections Supported? | Other Notes | | ---------------- | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------- | | Athena | N/A - Athena has no persistent connection support. | All features supported | | BigQuery | N/A - BigQuery has no persistent connection support. | All features supported | | Clickhouse | Yes | All features supported | | Databricks | N/A - Pooled connections maintained but no keepalives used. Warehouse is allowed to sleep when no Explo activity occurs. | All features supported | | Motherduck | Yes | All features supported | | MySQL | Yes | Only 5.7+ supported; percentile calculations only fully supported in 8.0+ | | Postgres | Yes | All features supported (recommend Postgres 12+) | | Redshift | Yes - but possible to disable keepalives for serverless warehouse. Contact support if interested. | All features supported | | Snowflake | N/A - Pooled connections maintained but no keepalives used. Warehouse is allowed to sleep when no Explo activity occurs. | All features supported | | SQL Server | Yes | All features supported | | Supabase | Yes | All features supported; note must use IPv4 to connect or Supavisor Session Mode | ## Connection Keep Alive Queries For data source types that support persistent connections, we periodically validate that each connection is still valid. After one minute since the last successful query on that connection, we will run `SELECT 1 as result` as validation. If this query fails, we will replace that specific connection. Keeping these connections alive and valid helps decrease query latency, providing a better end-user experience. ### Disabling Keep Alive Queries For data source types that offer a serverless variety (such as Redshift Serverless), keep alive queries can cost you money because they keep the database awake. We offer the ability to disable keepalives for cases like that. Please reach out to support if you'd like to disable keep alive queries. # General Source: https://docs.explo.co/data-sources/fido/general Explo's data querying microservice called FIDO. FIDO is Explo's data orchestration service. There are a lot of benefits compared to the previous data querying architecture including: * Persistent database connection management, eliminating connection latency for queries (connection and SSH tunneling time) * Longer timeouts configurable for queries * Querying databases within a certain region of the world for data residency requirements and speed optimizations * Connect via SSH tunneling, AWS PrivateLink, and more ## Resources * We’ve also [talked about it a bit on our engineering blog](https://www.explo.co/blog/explo-data-connector) if you’d like to read more. * Here is a slide that we presented with a partner showing one customer’s speed-up (your results may vary of course). Data Orchestration Results * Here is a talk that Gary (co-founder) gave about the query service **Optimizing Analytics Platforms with ClickHouse** (March 2025) ``` ```html Dashboard Customer Token Syntax theme={null} ``` ### Passing in Variables You can see how to do that [here](/creating-dashboards/variables/passing-in-variables#url-parameters). ### Hide Elements You can hide elements on your dashboard by passing a hide parameter into the url of your embed like so: ``` https://app.explo.co/iframe//?element_name.hide= ``` ### Date Range Picker Elements You can set the following values on date range picker elements: * Start date * End date * Min date * Max date To set any of these values, you can pass in a variable for the date range picker element in the URL query in one of two formats As a JSON object: ``` https://app.explo.co/iframe//?date_range_elem_id={"minDate": "20241220", "maxDate": "20241231", "startDate": "20241224", "endDate": "20241225"} ``` As properties on the date range picker element variable: ``` https://app.explo.co/iframe//?date_range_elem_id.minDate="20241220"&date_range_elem_id.maxDate="20241231"&date_range_elem_id.startDate="20241224"&date_range_elem_id.endDate="20241225" ``` ### Event-Based Updates You are also able to pass events to the Explo IFrame without reloading the entire dashboard. Below is an example of passing a hide element event to an IFrame component. See [here](/general-features/custom-js-events) for more information on Custom JS Events. ``` var exploIframe = document.getElementById("explo-iframe"); exploIframe.contentWindow.postMessage( { event: "updateExploDashboardVariable", detail: { varName: "data_table_1.hide", value: "true" } }, "*" ); ``` ### Turning on Copy-Paste for Data Table Cells To turn on copy-paste (Ctrl+C & Ctrl+V) for data table cells, you need to add an additional prop to the IFrame. You need to add `allow="clipboard-write"`, like this: ``` ``` # Option 3: Customer Portal Source: https://docs.explo.co/embedding-documentation/dashboard/option-3-customer-portal Display dashboards via an authenticated portal ## What is an customer portal? The customer portal is a single-page login screen and dashboard that allows you to permission specific customers to specific dashboards. A portal can be set up such that `your_domain.com/portal` directs your users to an Explo dashboard without you having to write any code. ## How do I set up a portal? ### Settings In Explo's team settings page, you can supply several pieces of metadata for your portal: | Field | Description | | ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Page Favicon Url | A url pointing to the favicon that will display on your browser's tab from the portal page | | Portal Logo | A url pointing to the logo that you would like to display both on the login and dashboard views | | Portal Site Title | The title that will display on your browser's tab from the portal page | | External Email | The email from which authentication emails will be sent to your users. Note that you should reach out to Explo support to set up this email if you want it to come from your own domain | To have a custom domain point to your portal (such as `your_domain.com/portal`), reach out to Explo support. ### Permissioning In your customer configuration on the customers tab, you can now select a dashboard to permission to the customer and supply a set of user emails that can log in to see this dashboard. Our portal authenticates via magic link, so you do not have to supply a password or handle any sort of customer management outside of granting or revoking email access on this page. ## What do my users see? On first access of the portal, your users will see a log in screen prompting them for an email. If they submit an email you've granted access to, then they will receive a link via email that will permission them to the dashboard. This link lasts 15 minutes, and access to the dashboard lasts 7 days before they must log in again. On subsequent accesses to the portal, your users will be directed immediately to the dashboard itself, provided that their session has not expired and that you haven't revoked access for that email. If a dashboard version is tagged with a `portal` environment tag, that version will be used for the portal. Otherwise, the version tagged with `production` will be used. # Generating a JWT Source: https://docs.explo.co/embedding-documentation/embed-secrets/generating-jwt ### Generate the Embed Secret First, you must generate an embed secret. Go to the [Data Visibility Groups section](https://app.explo.co/settings/api-tokens) in the settings page, create a new secret, and copy your secret's value and id. Then, you have two options: ### Use Explo's API to generate the JWT For convenience, Explo exposes an endpoint you can use to generate a JWT for your customer/dashboard pair. You could hit this endpoint when your customer loads the page and provide the JWT immediately to your embedded component. See [here](/api-reference/customer-api/generate-jwt/) for docs on this endpoint ### Manually generate the JWT You can also generate the JWT yourself. The specs of the JWT are as follows Claims: * cst: your customer id, the one you provided to Explo * dsh: your embed id, taken from the Explo app * exp: the desired expiration timestamp * kid: the key id you're using to sign and encrypt the jwt * alg: A256GCM * rbc: read only report builder claims. Read more [here](/report-builder-features/read-only) * des: disable editable section editing for dashboards that have them enabled * iss: specifies the domain of the embed, making it so that the JWT is only valid from that origin. This is optional for increased security ```python theme={null} # A python example: from jose import jwe jwt = jwe.encrypt( json.dumps( { "exp": (datetime.utcnow() + timedelta(hours=2)).timestamp(), "cst": "customer_1", "dsh": "abcdef", "iss": "https:your-website.com/" # note: the trailing '/' will be required } ), encryption="A256GCM", key=key_value, kid=key_id, ).decode("utf-8") ``` ```javascript theme={null} // A javascript example: import * as jose from 'jose'; const enc = new TextEncoder(); const secret = enc.encode(key_value); const jwt = new jose.EncryptJWT({ cst: 'customer_1', dsh: 'abcdef', }) .setProtectedHeader({ alg: 'dir', enc: 'A256GCM', kid: key_id }) .setIssuedAt() .setExpirationTime('2h') .encrypt(secret); ``` # Overview Source: https://docs.explo.co/embedding-documentation/embed-secrets/intro Pass JWTs (JSON Web Tokens) to your embedded dashboards to securely embed with auto-expiring tokens ## What are Embed Secrets? Embed secrets are a key id, key value pair that allow you to generate JWTs to embed your dashboards. The JWT Explo uses is a JWT with a JWE body. You can find more information about JWTs at [this link](https://jwt.io/introduction). You would use this token the same way you use your dashboard id, customer token pair, but the token has two extra functions: * Hides this dashboard id and customer token from your customers * Expires at a cadence you set (default is one day) # Refreshing Expired JWTs Source: https://docs.explo.co/embedding-documentation/embed-secrets/refreshing-expired-jwt ## How to refresh an expired JWT When your JWT expires, the embedded session will stop working, which means that no new data can be loaded without first creating a new JWT. Depending on how you've implemented your dashboards, you may be generating a new JWT when your customer refreshes the page. But if you want to create JWTs with short expiration times and want to avoid requiring your users to refresh on expiration, you can add an event listener to be notified when the JWT is about to expire and respond with a new one. For more information, see the examples below, or our documentation on [Custom Events](/general-features/custom-js-events/) ### Iframe ```js theme={null} const messageListener = (e) => { switch (e.data.event) { case "customerJwtExpired": // generate a new JWT here const jwt = "my-new-jwt"; var exploIframe = document.getElementById("explo-iframe"); exploIframe.contentWindow.postMessage( { event: "updateCustomerJwt", detail: { jwt }, }, "*" ); break; } }; window.addEventListener("message", messageListener); ``` ### Web Component ```js theme={null} const listener = (e) => { // generate a new JWT here const jwt = "my-new-jwt"; window.dispatchEvent( new CustomEvent("updateCustomerJwt", { detail: { jwt } }) ); }; window.addEventListener("customerJwtExpired", listener); ``` # Testing JWTs Source: https://docs.explo.co/embedding-documentation/embed-secrets/testing-jwt ## Testing an Embedded Dashboard or Report Builder You can use Explo's Embed Modal to generate a JWT for testing purposes. The JWT will be generated using a test Embed Secret. Note that this JWT will expire after 24 hours, so it should not be used in production. On the [Dashboard Page](https://app.explo.co/home) or on the [Report Builder Page](https://app.explo.co/report-builder), select the dashboard or report builder you'd like to embed and click the `Embed` option from its menu. Select a customer from the dropdown and the JWT will be automatically generated and inserted into the resulting code snippet. # General Notes Source: https://docs.explo.co/embedding-documentation/report-builder/general-embedding-notes General report builder embedding notes ## How to Embed the Report Builder Please do the following when embedding the report builder, whether you are using the web component or the IFrame. * Wrap the component in a `div` with `style="display: flex; height: 100%; flex-direction: column;"` * On the component, put `style="flex: 1"` directly * All parent elements, up to the html or body need to have `height: 100%` # Option 1: Web Component Source: https://docs.explo.co/embedding-documentation/report-builder/rb-option-1-web-component Embed report builders through a web component ## Step 1: Import Explo JS library Add Explo's script tag to the `` of your index.html ```html index.html theme={null} ``` ## Step 2. Embed the web component ### What is the web component? The Explo web component is a custom HTML element. This means that it functions as a native HTML element and can be used in any web development context. You can read more about custom HTML elements [here](https://developer.mozilla.org/en-US/docs/Web/Web%5FComponents/Using%5Fcustom%5Felements). ### Where can I use the component? Since the web component is a custom HTML element, you can use it in any context: * Directly in an HTML file * Define it in vanilla JS * Any JS web framework: React, Vue, Angular, etc ### Embedding the component The embed component takes in a few different properties. The component is backward-compatible with the previous V1 syntax and V0 syntax, but we recommend using the V2 (embed secret) syntax. Read more about embed secrets [here](/embedding-documentation/embed-secrets/). ```html V2 (Embed Secret) Syntax theme={null} ``` ```html V1 (Report Builder Customer Token) Syntax theme={null} ``` Please also note [these instructions](/embedding-documentation/report-builder/general-embedding-notes/) when embedding a report builder. #### Component Attributes | Attribute Name | Type | Description | | -------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | jwt (recommended) | string | This is the embed secret (JWT) for the report builder. We recommend you use this attribute instead of the `report-builder-token`. Read more about embed secrets [here](/embedding-documentation/embed-secrets/). | | report-builder-token | string | This is a string with two values concatenated together: (1) the `report_builder_id` and (2) the `customer_token`. You should concatenate them with a colon between them like so: `":"`. We recommend you use the `jwt` instead of this attribute, but it is still supported. | | environment | string | This lets you specify the environment version that the web component is being embedded in: "production", "staging", "development", etc. If environment is not specified, it will render the most recent saved version of the report builder. | | variables | string | This argument allows you to pass in values for variables on your report builder. This will result in default values for any variables and UI dropdowns on the report builder. Note that you must pass in a stringified JSON object using `JSON.stringify(variablesObject)`, unless you are embedding directly in an HTML file. | | locale-code | string | An optional argument that overrides any text localization settings for your team. This will localize your report builder's numbers and dates to the desired locale, if supported. Check out support languages [here](/general-features/internationalization#supported-languages). | | currency-code | string | An optional argument that overrides any currency localization settings for your team. This will localize your report builder's currency symbols and format to the desired locale, if supported. Check out support currencies [here](/general-features/internationalization#supported-currencies). | | timezone | string | An optional argument that allows you to specify a timezone to display dates in. Valid values can be found [here](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones). | | theme | string | An optional argument that lets you manage multiple style/theme profiles within Explo. If not provided, uses the "default" theme. | | | | | ### Typescript Type Definition If you are using TypeScript, define the embedded component within the global namespace. This needs to be defined at the top of each TypeScript file that uses the `explo-report-builder` component. You may need to exclude this block from your lint rules (e.g. @typescript-eslint/no-namespace) ```javascript theme={null} declare global { namespace JSX { interface IntrinsicElements { 'explo-report-builder': unknown; } } } ``` # Option 2: IFrame Source: https://docs.explo.co/embedding-documentation/report-builder/rb-option-2-iframe Embed Explo report builders through an IFrame ## What is an IFrame? The HTML Inline Frame element (` ``` ```html Report Builder Customer Token Syntax theme={null} ``` Please also note [these instructions](/embedding-documentation/report-builder/general-embedding-notes/) when embedding a report builder. # Troubleshooting Your Embed Source: https://docs.explo.co/embedding-documentation/troubleshooting-your-embed Some common embedding mistakes and callouts ## Dashboard Embeds **1) Don't use JSON.stringify() directly in an HTML file** Below is a sample code snippet of an embed similar to what is shown in other parts of the docs. ``` ``` However, if you are embedding directly into an HTML file, you should not use `JSON.stringify()` as that will break the embed. Instead do something like the below. ``` ``` ## Report Builder Embeds **1) Don't use CSS Transforms with Web Components** This only applies for the report builder (not the dashboard). Many of Explo's drag-and-drop functionality is not compatible with CSS transforms. Please disable [CSS transforms](https://developer.mozilla.org/en-US/docs/Web/CSS/transform). Note that this is only relevant if you are embedding with the web component. # IFrame vs Web Component Source: https://docs.explo.co/embedding-documentation/web-component-vs-iframe Here are some considerations when deciding whether to embed using the IFrame or the web component ## IFrame The IFrame is a sandboxed web page, it can be thought of as an entire isolated standalone website that is loading inside the surrounding application. ### Benefits of the IFrame * The IFrame is an isolated environment. There will be no unexpected interactions or clashing between the application and the embedded dashboard because they are completely separate. * Potential performance benefits - the loading of the IFrame and the surrounding application happen separately and one after the other. This means the IFrame should not impact the load time of the surrounding application. ### Limitations of the IFrame: * URL parameters in the browser can not be read directly from the IFrame and must be pushed into the IFrame url. * URL relative paths are not accessable by the IFrame to be used for link formatting in the dashboard. ### Additional Notes on IFrame Security: * The IFrame is authenticated with an expiring JWT, so the IFrame itself will expire after an amount of time they provide. * The IFrame optionally can take in an `iss` claim that requires that the IFrame can only be loaded from that parent domain. * The IFrame also follows our normal allowlisting rules, so even without the `iss` claim, the IFrame can only be viewed on domains that they've allowlisted. ## Web Component The web component is essentially a piece of code that will render inside the context of the surrounding application. ### Benefits of the web component option: * The web component lives in the same JS environment as the surrounding application. This means Explo supports event listeners via the web component. It also reads in URL params from the browser, and can pull in the URL relatives into the dashboard. ### Limitations of the web component: * There can be unexpected style clashing or loading issues as a result of one entire application’s code being loaded inside another application’s code. * Many of Explo's drag-and-drop functionality is not compatible with CSS transforms. Please disable [CSS transforms](https://developer.mozilla.org/en-US/docs/Web/CSS/transform). # Explo Help Desk Source: https://docs.explo.co/explo-help-desk Welcome to our help desk! ## Welcome to the Explo Help Desk Here you will find articles to help you set up, create, and embed Explo dashboards and reports. We also have our API documentation and other technical documents [here](https://docs.explo.co/api-reference/explos-authentication). You can find our Knowledge Base [here](https://explo-knowledge-base.help.usepylon.com/). If you have any additional questions, you can reach us via our chat widget or email us at [support@explo.co](mailto:support@explo.co). # FAQ Source: https://docs.explo.co/faqs Frequently asked questions ## FAQ ### What data sources does Explo support? Explo currently supports the following data sources listed in our [integrations page](https://www.explo.co/integrations). We are constantly building out support for more data sources, so if you are using a database not listed, please feel free to reach out to [support@explo.co](mailto:support@explo.co). If your data is stored in a 3rd party application such as Shopify, Stripe, Salesforce, etc., we partner with ETL providers and would be glad to help load your data into a database or warehouse. For clients using MongoDB, Aurora, or other no-SQL databases, you can leverage a tool such as Rockset or load your data into a SQL DB. Please reach out to our team and we'd be glad to walk you through that process. ### Other frequently asked Explo doesn't store any of our customer's data. We query your database or warehouse each time the dashboard is loaded. Explo is focused specifically on embedded analytics. It's designed so that you can connect your data, and embed a dashboard for your customers in a single day. We are a fully white-labeled product that fits perfectly into your existing application, and we handle all the permissioning so your customers only see their own data. Explo is built for embedded, customer-facing analytics first, you can however use our platform to build out dashboards to view and share internally as well. # Analytics Reporting Source: https://docs.explo.co/general-features/analytics-reporting Hook your embedded dashboards up to your own analytics endpoints or configure Javascript events to receive information about page views and clicks. ## Configuring Analytics On the settings page, there's a subsection in the Developers section for Analytics. From here, you can supply a URL and, optionally, authorization token for Explo to send information to and select the set of actions you want reported. Note that the url must be formatted as a valid url with `http://` or `https://`. If you'd like to receive a Javascript Event when an Analytics Event is sent, set up an event listener for `analyticsEventFired`. Read about [javascript events](/general-features/custom-js-events). ## Analytics Data When, for example, your dashboard is viewed from a Share link, Explo will send a request to the supplied URL with the following shape. | Field | Type | Description | | ------------------ | ------ | ----------------------------------------------------- | | user\_id | string | Id of the user who triggered the event | | name | string | The type of event triggered | | properties | json | Metadata about the event | | custom\_properties | json | Custom metadata passed in to embedded `web component` | For javascript events, the metadata described above will be contained in the detail of the event message. ## Event Types #### Shared Event Types | Name | | ---------------------------- | | Portal Dashboard Page Viewed | | Data Panel PDF Downloaded | | CSV Downloaded | | Table Sorted | | Table Paged | | Table Filtered | | Dropdown Selected | | Multiselect Selected | | Datepicker Selected | #### Explore Specific Event Types | Name | | ---------------------------- | | Dashboard Page Viewed | | Shared Dashboard Page Viewed | | Shared Chart Viewed | | Share Button Clicked | ## Metadata Properties #### Shared Properties | Field | Type | | ---------------------- | ------- | | team\_id | int | | team\_name | string | | customer\_id | int | | customer\_name | string | | customer\_provided\_id | string | | customer\_is\_demo | boolean | #### Explore Properties | Field | Type | | ------------------------- | ------ | | dashboard\_template\_id | int | | dashboard\_template\_name | string | #### Page View Event Additional Properties | Field | Type | Description | | -------------- | ------ | ------------------------------------------------------------ | | is\_production | bool | true if this is a production dashboard | | environment | string | the environment tag supplied when the dashboard was embedded | | is\_strict | bool | whether the dashboard was embedded in strict mode | | embed\_source | string | share or iframe, depending on how the dashboard was embedded | ## Recommended Ways to Test Internally, we use [Beeceptor](https://beeceptor.com/) to test these endpoints. It ensures the requests are sending and that the request body is structured as expected. All you need to do is launch a mock server and use that generated endpoint, like `garytesting.free.beeceptor.com`, in the `URL` field in the [Explo app](https://app.explo.co/settings/analytics). Then, open your embedded dashboard and fire some events to see it flow to Beeceptor. # Overview Source: https://docs.explo.co/general-features/custom-js-events Listen for custom JS events sent by Explo in your app ## Web Component Explo uses the [CustomEvent](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent) spec to fire our own events when certain things happen in the app that you might want to respond to in your app. ### How do I interact with Custom JS events? Add an event listener in your app to respond to any of the available events listed on this page. ```js theme={null} const listener = (e) => { console.log(e.detail); }; elem.addEventListener("EVENT_NAME", listener); ``` Be sure to clean up the event listener when you're done with it. ```js theme={null} elem.removeEventListener(listener); ``` ## Iframe For Iframes, Explo uses the [PostMessage](https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage) spec to fire the events ### How do I interact with Custom JS events? Add an event listener in your app to respond to the events listed on this page. ```js theme={null} const messageListener = (e) => { // Check origin of message before reading if (e.origin != "https://app.explo.co") return; switch (e.data.event) { case "sendVariableUpdatedEvent": console.log(e.data.detail); break; } }; window.addEventListener("message", messageListener); ``` Just make sure you clean up the event listener when you're done with it. ```js theme={null} window.removeEventListener(messageListener); ``` # Editable Sections Example Code Source: https://docs.explo.co/general-features/custom-js-events/editable-sections-example-code Programmatically interact with editable sections using custom JS events. Please reach out to Explo support if this is something your team wants to enable. # Example Code ``` ``` # Incoming Events Source: https://docs.explo.co/general-features/custom-js-events/incoming-events You may consume any of the following events that Explo can emit. ## `sendVariableUpdatedEvent` **Description:** Sent when a new value is selected for a variable from a dashboard Element. **Output Parameters:** | Parameter | Type | Description | | --------- | ------ | ---------------------------- | | varName | string | Name of the variable updated | | newValue | any | New value of the variable | **Example:** ```json theme={null} { "detail": { "varName": "string", "newValue": "any" } } ``` ## `dashboardReadyToLoad` **Description:** Sent when dashboard information has been loaded and the dashboard itself is ready to render and to start loading data. **Output Parameters:** | Parameter | Type | Description | | --------------- | ------ | ------------------------------------------------------------------------------------------------------------------------- | | dashboardId | string | ID of the dashboard from the URL param or HTML attribute. Empty string if not provided | | dashboardHeight | number | Estimated height in pixels of the dashboard. Use `dashboardLoaded` and `dashboardUpdated` events to get the actual height | **Output Example:** ```json theme={null} { "detail": { "dashboardId": "string", "dashboardHeight": 0 } } ``` ## `dashboardLoaded` **Description:** Sent when all initial data for a dashboard has been loaded. **Output Parameters:** | Parameter | Type | Description | | --------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------- | | dashboardId | string | ID of the dashboard from the URL param or HTML attribute. Empty string if not provided | | dashboardHeight | number | Full height in pixels of the dashboard. Use to set the height of the iframe or Web Component | | loadTime | number | Time in milliseconds it took to fetch all data and render the dashboard. Does not include asset loading or component startup time. | **Output Example:** ```json theme={null} { "detail": { "dashboardId": "exampleDashboardId", "dashboardHeight": 100, "loadTime": 100 } } ``` ## `dashboardUpdated` **Description:** Sent when the contents of the dashboard changes. **Output Parameters:** | Parameter | Type | Description | | --------------- | ------ | -------------------------------------------------------------------------------------------- | | dashboardId | string | ID of the dashboard from the URL param or HTML attribute. Empty string if not provided | | dashboardHeight | number | Full height in pixels of the dashboard. Use to set the height of the iframe or Web Component | **Output Example:** ```json theme={null} { "detail": { "dashboardId": "exampleDashboardId", "dashboardHeight": 100 } } ``` ## `analyticsEventFired` **Description:** Fires when one of the selected actions on the Analytics settings page has been performed. Refer to the [analytics events documentation](/general-features/analytics-reporting) for more details. ## `customerJwtExpired` **Description:** Fires when the current JWT expires. Refer to the [updateCustomerJwt event](/general-features/custom-js-events/outgoing-events#updatecustomerjwt) for programmatically updating the JWT. ## `error` **Description:** Sent when the dashboard or report builder encounters an error. Please reach out to Explo support if you want this enabled for your workspace. **Output Example:** ```javascript theme={null} { detail: { error: "Error message", user_id: "123", // Unique identifier for end user properties: { dashboard_type: "iframe", embed_source: "iframe", team_id: 1, team_name: "Explo", customer_id: 1, customer_name: "Customer 1", customer_provided_id: "1", // If error occurred in Report Builder: report_builder_id: 15, // Report Builder ID report_builder_name: "hello", // Report Builder Name report_name: "my report" // Report Name report_type: 'BUILT_IN' // 'BUILT_IN' or 'CUSTOMER_REPORT' view_name: "my report" // View Name // If error occurred in Dashboard: dashboard_template_id: 12, dashboard_template_name: "hello", data_panel_id: "fdasf", // If error occured on dataset dataset_id: 123, }, }, } ``` ## `dashboardFailed` **Description:** Sent when the dashboard embed fails to load entirely. This is not a data querying issue, but rather an embedding issue. Usually this is because of an expired or misconfigured `JWT` or an invalid `embed_id` / `customer_token`. ## `reportBuilderReadyToLoad` **Description:** Sent when report builder information has been loaded and the report builder itself is ready to render and to start loading data. **Output Parameters:** | Parameter | Type | Description | | --------------- | ------ | ------------------------------ | | reportBuilderId | string | Embed ID of the report builder | **Output Example:** ```json theme={null} { "detail": { "reportBuilderId": "string" } } ``` ## `reportBuilderFailed` **Description:** Sent when the report builder embed fails to load entirely. This is not a data querying issue, but rather an embedding issue. Usually this is because of an expired or misconfigured `JWT` or an invalid `embed_id` / `customer_token`. # Iframe Example Source: https://docs.explo.co/general-features/custom-js-events/incoming-events/iframe-example In order to listen for an incoming event, you need to add an event listener for `message`, like this `window.addEventListener("message", messageListener)`. Then all of the different incoming events will be available to be consumed. ``` ``` The console log output looks like this: iFrame output # Web Component Example Source: https://docs.explo.co/general-features/custom-js-events/incoming-events/web-component-example In order to listen for an incoming event, you need to add an event listener for that event name. So in the example below you will see that an event listener was added for `dashboardLoaded`. ``` ``` The console log output looks like this: iFrame output # Outgoing JS Events to Emit Source: https://docs.explo.co/general-features/custom-js-events/outgoing-events Emit any of these events to Explo's iFrame or Web Component to programmatically interact with the embed. ### `updateExploDashboardVariable` **Description:** Update the value of a variable in the dashboard. **Parameters:** | Parameter | Type | Description | | --------- | ------ | --------------------------------- | | varName | string | Name of the variable | | value | any | Value to update the variable with | **Example:** ```javascript theme={null} exploIframe.contentWindow.postMessage( { event: "updateExploDashboardVariable", detail: { varName: "exampleVariable", value: "newValue" }, }, "*" ); ``` ### `updateExploDashboardVariables` **Description:** Update the value of multiple variables in the dashboard. **Parameters:** | Parameter | Type | Description | | --------- | ----------------------------------- | ------------------------------ | | variables | `{ varName: string; value: any }[]` | A list of the variable updates | **Example:** ```javascript theme={null} exploIframe.contentWindow.postMessage( { event: "updateExploDashboardVariables", detail: { variables: [ { varName: "exampleVariable1", value: "newValue1" }, { varName: "exampleVariable2", value: "newValue2" }, ], }, }, "*" ); ``` ### `updateCustomerJwt` **Description:** Update the customer's JWT to a new value. **Example:** ```javascript theme={null} exploIframe.contentWindow.postMessage( { event: "updateCustomerJwt", detail: { jwt: "new_jwt" }, }, "*" ); ``` # Embed ID Page Source: https://docs.explo.co/general-features/embed-id-page ## General Embed ID Pages Some Explo customers only keep track of `embed_id`s internally and it is cumbersome for them to go from `embed_id` to the internal dashboard or report builder URL to make edits. We added a new URL: ``` app.explo.co/embed_id/{embed_id} ``` where `{embed_id}` is the ID you use to embed a dashboard or a report builder. This endpoint is agnostic to whether it is a dashboard or a report builder and will redirect you to the right `app.explo.co/dashboard/{dashboard_id}` or `app.explo.co/report-builder/{report_builder_id}/datasets`. If no resource exists, it will take you to the Explo app home page. # Exporting Features Source: https://docs.explo.co/general-features/exporting-features ## General Explo allows you to export dashboards, charts, reports, and more as `CSV`s, `PDF`s, `PNG`s, and `XSLX`s. These exported files are temporarily stored in Explo's S3 bucket as a landing zone for your customers to download the files from. ## S3 Security THe S3 bucket that is used has an object expiration of `7 days` set to the entirety of the bucket. This means that after 7 days, the file temporarily stored in S3 will be permanently deleted. The files are encrypted at rest in S3. ## Bring Your Own S3 bucket Your team can also optionally provide your own S3 bucket for Explo to export files temporarily to. Please contact Explo support to help you set this up. We will need the following from you: * Folder name * This prefixes the download file names * Bucket name * Region * A role provisioned in your AWS account with S3 read and write permissions that Explo may assume. Explo support will provide you with an Explo ARN to establish the trust relationship with for this role. # Internationalization Source: https://docs.explo.co/general-features/internationalization Configure how strings, dates, numbers, and currencies are formatted in your dashboards. Currently, Explo supports localizing strings, dates, numbers, and currencies for your embedded dashboards and report builders. Your team's desired locale can be set via the Developer section of the Settings tab and will affect all of your customer's dashboards and report builders. ## Configuring Internationalization Currently, you have three options for choosing the desired locale to display your dashboards in. 1. Pass in a locale code and currency code via the web component or IFrame 2. Select the option to prefer browser locale via the Settings Tab 3. Select a default language/currency. for your team via the Settings Tab In order of preference, Explo will override any configured settings with a passed in locale code. Explo will then attempt to use browser locale if the option is selected and the user's browser language is supported, before finally defaulting to the default language for your team. Note for currencies, the browser locale does not affect internationalization. only a passed currency code or setting in your team's settings will affect the currency format. Configuring language settings via the Settings Tab ### Providing Your Own Translations You can also provide your own translations for your dashboard or report builder if Explo does not support the language you need. If you'd like a demo of the latest functionality, check out this [loom video](https://www.loom.com/share/b07de32e327447749a7052ea30afc7f3). To do this, you can provide us a JSON object that matches the structure of our built in translations. You can provide a subset of the object, or all of it. ```json theme={null} { "AI": { "AIAssistant": "AI Assistant", "AIInsights": "AI Insights", "AreYouSureYouWantToExit": "Are you sure you want to exit?", "AskAI": "Ask AI", "ChartSuggestions": "Chart suggestions", "DescribeWhatYouWantToVisualize": "Describe what you want to visualize", "ErrorGeneratingInsights": "Error generating insights: {{error}}", "ExitConversation": "Exit Conversation", "ExitingAChatWithoutAViewThatIsTiedToTheChatSession": "Exiting a chat without a view that is tied to the chat session", "FreeText": "Free text", "GenerateViewUsingAI": "Generate a new view using AI", "GeneratedChartSuggestionsBasedOnYourData": "Generated chart suggestions based on your data", "Insights": "Insights", "IntroMessage1": "Hi there, ready to uncover insights? I'm your data analysis assistant, here to help you turn data into powerful visualizations. I create one chart at a time and can't modify existing ones.", "IntroMessage2": "If you know what you need, select a chart type in the dropdown on the right. Need help getting started? Tell the assistant what you are looking for in the Free-Text or use the AI-generated suggestions.", "IntroMessage3": "To help you get started, here are the columns for your current dataset {{name}}.", "PleaseConsultTheAIChatbotForVisualizationCreation": "Please consult the AI chatbot for visualization creation", "ReportAI": "Report AI", "SelectAChartTypeInTheDropdownOnTheRightToContinueConfiguringThisView": "Select a chart type in the dropdown on the right to continue configuring this view.", "SelectDatasetBeforeGeneratingViewUsingAI": "Select a dataset before generating a view using AI", "SubmittingAChatWithoutAViewThatIsTiedToTheChatSession": "Submitting a chat without a view that is tied to the chat session", "Thinking": "Thinking...", "ThisReportNoLongerHasAccessToTheAIAssistant": "This report no longer has access to the AI Assistant. Please contact support for more information and to request access.", "TypeAMessage": "Type a message", "TypeAMessageToGetChartSuggestions": "Type a message to get chart suggestions", "YourConversationWillNotBeSavedAndThisViewWillBeDeleted": "Your conversation will not be saved and this view will be deleted", "YouveReachedTheMaximumNumberOfMessagesAllowedInAConversation": "You've reached the maximum number of messages allowed in a conversation. If you want to increase the message limit, please reach out to support." }, "Buttons": { "AddChart": "Add chart", "AddFilter": "Add filter", "Apply": "Apply", "Cancel": "Cancel", "Copied": "Copied", "Copy": "Copy", "CreateView": "Create view", "Delete": "Delete", "DeselectAll": "Deselect all", "Dismiss": "Dismiss", "Done": "Done", "DoneEditing": "Done editing", "Download": "Download", "Edit": "Edit", "EditData": "Edit data", "Export": "Export", "HideAll": "Hide all", "NewReport": "New Report", "Reset": "Reset", "Save": "Save", "SaveAs": "Save as", "SaveChanges": "Save changes", "ScheduleEmail": "Schedule email", "SearchForValue": "Search for value {{value}}", "SelectAll": "Select all", "SendEmail": "Send email", "SendTest": "Send test", "Set": "Set", "ShowAll": "Show all", "ShowLess": "Show less", "ShowMore": "Show more", "Update": "Update" }, "Charts": { "CreateChart": "Create chart", "LoadingVisualizationData": "Loading visualization data...", "PaginationNotSupported": "Pagination is not supported for this data.", "UnableToGenerateChart": "Unable to generate chart", "VisualizationName": "Visualization name", "VisualizationPreview": "Visualization preview", "VisualizationType": "Visualization type" }, "Data": { "AddAtLeastOne": "Add at least one {{name}} to populate {{visualizationName}}", "AddSort": "Add sort", "Amount": "Amount", "And": "and", "ChangeDataset": "Change dataset", "ColorGradientType": "Color Gradient Type", "Column": "Column", "ColumnTotals": "Column totals", "Column_plural": "Columns", "Cumulative": "Cumulative", "Data": "Data", "DataNotValidFor": "Data not valid for {{visualization}}", "Dataset": "Dataset", "DatasetPreview": "Dataset preview", "Diverging": "Diverging", "Format": "Format", "GroupBy": "Group by", "Linear": "Linear", "Loading": "Loading", "Maximum": "Maximum", "Minimum": "Minimum", "Missing": "Missing {{missingText}}", "No": "No {{name}}s", "NoColumnsSelected": "No columns selected", "NoData": "No data", "NoDatasetSelected": "No dataset selected", "NoDatasets": "No datasets", "None": "None", "Of": "of", "Page": "Page", "Removed": "{{count}} {{name}} removed to fit {{visualizationName}}", "Removed_plural": "{{count}} {{name}}s removed to fit {{visualizationName}}", "Result": "{{localizedCount}} result", "Result_plural": "{{localizedCount}} results", "RowLimit": "{{limit}} rows out of {{rowCount}} are being displayed for performance", "SearchDatasetsBy": "Search datasets by name, description or columns", "SelectDataset": "Select dataset", "SelectDatasetBeforePreviewingData": "Select a dataset before previewing data", "SelectDatasetWithName": "Select dataset {{datasetName}}", "Sort": "Sort", "SortBy": "Sort by", "SortedBy": "Sorted by", "Stages": "Stages", "Standard": "Standard", "UnderlyingData": "Underlying data", "Value": "Value", "Value_plural": "Values", "XAxis": "X-axis", "YAxis": "Y-axis", "YouAreAttemptingToSelectANewDatasetThisWillClearYourExistingReport": "You are attempting to select a new dataset. This will clear your existing report." }, "DataShare": { "AddContentToYourEmail": "Add content to your email...", "AddRecipientEmail": "Add recipient email", "Body": "Body", "EmailContent": "Email content", "EmailsDisclaimer": "Emails are sent from {{fromEmail}}. Remember to check your spam folder if you don't see it in your inbox. Test emails will include your unsaved changes.", "ExportAndEmailAllTheViewsInThisReport": "Export and email all the views in this report. Only saved changes will be exported.", "ExportType": "Export type", "FailedToSendTestEmail": "Failed to send test email, please try again then contact support if the issue persists.", "Frequency": "Frequency", "NoEmailsScheduled": "No emails scheduled", "RepeatOn": "Repeat on", "RepeatOnEvery": "Repeat on every", "Scheduling": "Scheduling", "SelectFrequency": "Select frequency", "SelectRecipients": "Select recipients", "Subject": "Subject", "SubjectCannotBeEmpty": "Subject cannot be empty", "SuccessfullySentTestEmail": "Successfully sent test email.", "ThisEmailWillIncludeYourUnsavedChanges": "This email will include your unsaved changes", "Weekday": "Weekday", "YouMustInsertAtLeastOneRecipient": "You must insert at least one recipient" }, "Dates": { "SelectDateRange": "Select a range" }, "EditableSection": { "AddAChartToCustomizeThisSectionOfYourDashboard": "Add a chart to customize this section of your dashboard", "AddAChartToSetTheDefaultLayoutForYourCustomers": "Add a chart to set the default layout for your customers", "AddAChartToThisSection": "Add a chart to this section", "DiscardAllChangesToThisSection": "Discard all changes to this section", "MoveAddAndDeleteChartsInThisSection": "Move, add and delete charts in this section", "ToEditTheDefaultLayoutUseTheConfigPanelOnTheLeft": "To edit the default layout, use the config panel on the left", "ToToggleChartsFromTheDefaultLayoutUseTheConfigPanelOnTheLeft": "To toggle charts from the default layout, use the config panel on the left" }, "Errors": { "DashboardError": "There was an error loading the dashboard. Please contact your support team for help.", "ErrorLoadingTotalResults": "Error loading total results" }, "Exports": { "AddContentToYourEmail": "Add content to your email...", "AddRecipientEmail": "Add recipient email", "Body": "Body", "EmailContent": "Email content", "EmailsAreSentFrom": "Emails are sent from {{fromEmail}}. Remember to check your spam folder if you don't see it in your inbox. Test emails will include your unsaved changes.", "ExportAndEmailAllTheViewsInThisReportOnlySavedChangesWillBeExported": "Export and email all the views in this report. Only saved changes will be exported.", "ExportCompleteYourDownloadWillStartInAFewSeconds": "Export complete. Your download will start in a few seconds.", "ExportNow": "Export Now", "ExportType": "Export type", "FailedToSendTestEmail": "Failed to send test email, please try again then contact support if the issue persists.", "IfNotClickHere": "If not, click here.", "ImageExportLimitationWarning": "For tables, PDF and Image exports are limited to 500 rows. Use CSV or Excel to export the full dataset.", "ImmediatelyExportAndDownloadTheCurrentViewUnsavedChangesWillBeExported": "Immediately export and download the current view. Unsaved changes will be exported.", "NoEmailsScheduled": "No Emails Scheduled", "RecommendedForTables": "Recommended for tables", "ScheduleEmail": "Schedule email", "ScheduleExport": "Schedule Export", "Scheduling": "Scheduling", "SelectRecipients": "Select recipients", "Subject": "Subject", "SubjectCannotBeEmpty": "Subject cannot be empty", "SuccessfullySentTestEmail": "Successfully sent test email.", "ThisEmailWillIncludeYourUnsavedChanges": "This email will include your unsaved changes", "UnableToExportReportPleaseTryAgainThenContactSupportIfTheIssuePersists": "Unable to export report. Please try again then contact support if the issue persists.", "ViewTheLatestFrom": "View the latest from {{resourceName}}", "YouMustInsertAtLeastOneRecipient": "You must insert at least one recipient" }, "Filters": { "FilterCategory": "Filter category", "Filters": "Filters", "NoFiltersApplied": "No filters applied", "Operator": "Operator", "OperatorSelection": { "Contains": "contains", "DoesNotContain": "does not contain", "Equals": "equals", "GreaterThan": "greater than", "GreaterThanOrEqualTo": "greater than or equal to", "Is": "is", "IsAfter": "is after", "IsBefore": "is before", "IsBetween": "is between", "IsEmpty": "is empty", "IsFalse": "is false", "IsIn": "is in", "IsNot": "is not", "IsNotEmpty": "is not empty", "IsNotIn": "is not in", "IsOnOrAfter": "is on or after", "IsOnOrBefore": "is on or before", "IsToday": "is today", "IsTrue": "is true", "LessThan": "less than", "LessThanOrEqualTo": "less than or equal to", "Next": "next", "NotEquals": "not equals", "Previous": "previous" }, "RemoveFilter": "Remove filter", "SelectTime": "Select time" }, "Formatting": { "AppliesToTable": "Applies to table", "AppliesToUnderlyingData": "Applies to underlying data", "Area": "Area", "Area100": "Area 100%", "AreaChartType": "Area Chart Type", "CellLabels": "Cell Labels", "CollapseGroupsWhenThereAre2OrMoreGroupBysShowingSubtotalsForEachGroupTablesWithBreakdownsMustAlwaysBePivoted": "Collapse groups when there are 2 or more \"Group bys\", showing subtotals for each group. Tables with breakdowns must always be pivoted.", "CollapsibleGroups": "Collapsible groups", "Hidden": "Hidden", "Large": "Large", "MarkerRadius": "Marker Radius", "NoFormatOptionsAvailableForVisualization": "No format options available for {{visualization}}", "ShowConfigurableTotalsAtTheBottomOfEachColumn": "Show configurable totals at the bottom of each column", "Small": "Small", "StartWithGroupsCollapsed": "Start with Groups Collapsed", "Visible": "Visible", "WhenEnabledPivotTableGroupsWillBeCollapsedByDefaultWhenTheTableFirstLoads": "When enabled, pivot table groups will be collapsed by default when the table first loads." }, "Inputs": { "SearchByNameOrDescription": "Search by name or description", "SearchValue": "Search value" }, "Menus": { "Download": "Download", "SendToEmail": "Send to email", "ShareToWeb": "Share to web", "ViewUnderlyingData": "View underlying data" }, "NeedsConfigurationPanel": { "ADropdownOrDatepickerIsRequired": "A dropdown or date picker is required to load this chart. Please select an option.", "ConfigureChartToGetStarted": "Configure the chart to get started.", "SomethingWentWrong": "Something went wrong. Please refresh the page and try again." }, "ReportBuilder": { "AllReports": "All Reports", "BuiltIn": "Built In", "BuiltInReport": "Built In Report", "BuiltInReport_plural": "Built In Reports", "BuiltInReportsArePreBuiltReportsThatYouCanUseToQuicklyPreviewDataOrCreateYourOwnReportsOffOf": "Built In Reports are pre-built reports that you can use to quickly preview data or create your own reports off of.", "ChangesToBuiltInReportsCannotBeSavedButYouCanSaveYourChangesToANewReport": "Changes to Built In Reports cannot be saved but you can save your changes to a new report.", "ClickOnATableRowToRevealTheUnderlyingData": "Click on a table row to reveal the underlying data", "ClickOnAVisualizationDataPointToRevealTheUnderlyingData": "Click on a visualization data point to reveal the underlying data", "CloseWithoutSaving": "Close without saving", "CollapseUnderlyingData": "Collapse underlying data", "CreateFirstReport": "Create your first report", "CreateYourFirstReport": "Create your first report", "Description": "Description", "DisplayingRows": "Displaying {{rowCount}} of {{totalCount}} rows", "EitherSaveYourChangesToThisReportBeforeClosingItOrDiscardTheChanges": "Either save your changes to this report before closing it or discard the changes.", "EnterANameForYourView": "Enter a name for your view", "FailedToLoadCategoriesPleaseRefresh": "Failed to load categories. Please refresh the page and try again.", "ForPerformanceOnlyTheFirst1000ValuesAreShownInThisList": "For performance, only the first 1000 values are shown in this list.", "General": "General", "GetStartedWithTheseBuiltInReports": "Get started with these Built In Reports", "MyBuiltIn": "My Built In", "Name": "Name", "NewAppendText": "Copy", "NewReportName": "New report name", "NoBuiltIns": "No built ins", "NoReportsCreated": "No reports created", "NoStarredReportsOrBuiltIns": "No starred reports or built ins", "NoVisualizationSelected": "No visualization selected. Choose a visualization from the dropdown above or click Report AI to start a chat.", "Onboarding": { "AccessTheExportManagerByClickingExportScheduleExport": "Access the export manager by clicking Export > Schedule Export", "AfterAVisualizationTypeIsSelectedTheChartWillBeCreatedOnceAllFieldsAreValid": "After a visualization type is selected, the chart will be created once all fields are valid - the interface will indicate which ones need refinement.", "AllColumnsWillBeShownInTablesByDefault": "All columns will be shown in tables by default. You can adjust the order of the columns by directly rearranging the columns in the Report Data section. You can also use the eye icons in this section to show and hide columns.", "AreaChart": "Area chart - view data by category or time through filled curves", "AttemptingToSwitchVisualizationsInASingleViewWillTryToConvertTheExistingVisualizationIntoTheNext": "Attempting to switch visualizations in a single view will try to convert the existing visualization into the next.", "BarChart": "Bar chart - view data by category", "BarFunnel": "Bar Funnel - view data through stages of a process", "CategoryFilters": "Category Filters", "ChooseWhatDataToIncludeInYourReportBySpecifyingADataSet": "Choose what data to include in your report by specifying a data set", "CreateVisualizationsWithAI": "Create visualizations with AI", "DataSelection": "Data Selection", "DateFilters": "Date Filters", "EachOfYourReportsCanHaveMultipleViews": "Each of your reports can have multiple views", "Exporting": "Exporting", "Features": "Features", "Filters": "Filters", "FiltersAllowYouToLookAtMoreSpecificSlicesOfYourData": "Filters allow you to look at more specific slices of your data", "GettingStarted": "Getting Started", "Heatmap": "Heatmap - view data with values depicted by color", "KPIMetric": "KPI - view a single “Key Performance Indicator” metric", "KickStartYourViewsWithTheAIVisualizationCenter": "Kick start your views with the AI visualization center!", "LineChart": "Line chart - view data over a continuous spectrum", "NumberFilters": "Number Filters", "PieChart": "Pie chart - view how individual values contribute to a whole", "RefineDetailsBeforeCreatingANewViewInYourReport": "Refine details before creating a new view in your report", "ReportAI": "Report AI", "ReportBuilderGuides": "Report Builder guides", "ReportFunctionality": "Report Functionality", "Scatter": "Scatter - view data as dots representing values for two different variables", "ScheduledExportsCanBeSentToAnyNumberOfEmailsAtASetOfCadences": "Scheduled exports can be sent to any number of emails at a set of cadences", "SearchGuides": "Search guides", "SelectTheDataYouWantToUseInYourReport": "Select the data you want to use in your report", "SomeReportsHaveAdditionalFormattingOptions": "Some reports have additional formatting options (like directional and grouping options for bar charts)", "Table": "Table - view all data or grouped data in tabular format", "TableSetup": "Table Setup", "ThereAre5PossibleTypesOfVisualizations": "There are 5 possible types of visualizations. Each view can have one visualization. The types of visualizations are:", "TipTryOutUsingKeyTermsToHelpMakeYourPromptsMoreSpecific": "Tip: Try out using key terms to help make your prompts more specific", "ToCreateAggregationsDragSpecificColumnsInTheValuesSectionAndSelectTheAggregationTypeInTheDropdown": "To create aggregations, drag specific columns in the Values section, and select the aggregation type in the dropdown. You can also use the plus icon to the right of the section header to add columns to each section. Note that you may find custom aggregations via the Values “add” button.", "TotalsAndSubtotalsCanBeTurnedOnAndOffOnEachRow": "Totals and subtotals can be turned on and off on each row. You can change the aggregation method by clicking each of the columns, except in the case of the Values in the grouped by format. These aggregations can be changed in the data panel.", "Views": "Views", "Visualizations": "Visualizations", "YouCanBeAsSpecificAsYouWant": "You can be as specific as you want!", "YouCanExportYourReportImmediatelyAsACSVOrScheduleItToGoOutToASetOfEmailsAtASetOfCadences": "You can export your report immediately as a CSV or schedule it to go out to a set of emails at a set of cadences" }, "OpenInNewView": "Open in new view", "ReportName": "Report name", "ReportPermissions": "Report permissions", "Reports": "Reports", "SaveAndClose": "Save and close", "SaveAsNewReport": "Save as new report", "SaveAsNewReportAndClose": "Save as new report and close", "SaveNewReport": "Save new report", "SaveToANewReport": "Save to a new report", "SavingIsOnlyAvailableInTheEmbed": "Saving is only available in the embed", "SeeAllBuiltInReports": "See all Built In Reports", "SelectVisualization": "Select a visualization", "Settings": "Settings", "Starred": "Starred", "UntitledReport": "Untitled report", "UntitledView": "Untitled view", "ViewDataNotLoaded": "View data not loaded", "XAxisAndGroupingColumnsMustBeDistinct": "X-axis and Grouping columns must be distinct", "XAxisAndYAxisMustBeDistinct": "X-axis and Y-axis must be distinct", "YAxisAndGroupingColumnsMustBeDistinct": "Y-axis and Grouping columns must be distinct", "YouHaveUnsavedChangesOnThisBuiltInReport": "You have unsaved changes on this Built In Report", "YouHaveUnsavedChangesOnThisReport": "You have unsaved changes on this report" }, "ShareButton": { "AllowViewersToInteractWithFilters": "Allow viewers to interact with filters", "ClickHere": "Click here", "ClickHereToCopyLink": "Click here to copy link", "DownloadComplete": "Download complete", "DownloadFailed": "Download failed", "Downloading": "Downloading", "EmailFailedToSend": "Email failed to send", "EmailWillBeSentShortly": "Email will be sent shortly", "EnterAPassword": "Enter a password", "EnterAUsername": "Enter a username", "EnterEmail": "Enter email", "ExposeUnderlyingData": "Expose underlying data", "Generating": "Generating", "IfDownloadDidNotStartAutomatically": "If download did not start automatically", "IfDownloadFailedToStart": "If download failed to start", "NeedToPublishAVersionToCreateAShareLink": "Need to publish a version to create a share link", "NoPublishedVersions": "No published versions", "PasswordRequired": "Password required", "SubtitleNoPassword": "No password", "SubtitlePassword": "Password", "UsernameRequired": "Username required" }, "Time": { "At": "at", "LastEdited": "Last edited", "On": "on", "OnThe": "on the", "TimeLabel": "Time", "Timezone": "Timezone" }, "VersionControl": { "Saved": "Saved", "UnsavedChanges": "Unsaved changes" } } ``` ## Custom Date Formats For data tables and data panels, you can also pass in a custom format for dates if the pre-made options don't work for your use case. Internationalization Date format options can be found [here](https://day.js.org/docs/en/display/format). ## Supported Languages * English (en-us) * English, United Kingdom (en-gb) * French (fr-fr) * French (Canadian) (fr-ca) * German (de-de) * Italian (it-it) * Portuguese (Brazilian) (pt-br) * Spanish (es-es) * Japanese (ja-jp) ### Supported currencies * American Dollar (usd) * Brazilian Real (brl) * British Sterling (gbp) * Canadian Dollar (cad) * Danish Krone (dkk) * Euro (eur) * Indian Rupee (inr) * Indonesia Rupiah (idr) * Japanese Yen (jpy) * Mexican Peso (mxn) * Pakistani Rupee (pkr) * Philipine Peso (php) * South African Rand (zar) * Thai Baht (thb) * United Arab Emirates Dirham (aed) If there is a language or currency you would like us to support, please email us at [support@explo.co](mailto:support@explo.co) and we can add that for you. # Timezones Source: https://docs.explo.co/general-features/timezones Timezones are annoying. Luckily Explo makes it easy to manage timezones for your dashboard on a granular level to enable you to serve data to your customers in the most accurate form possible. ## Default Timezone Behavior Out of the box, Explo dashboards behave in a predictable fashion with regards to timezones. Explo assumes that all of the data coming from your database is in UTC format ([as it should be](https://dev.to/corykeane/3-simple-rules-for-effectively-handling-dates-and-timezones-1pe0)). We then convert the dates to the local time of the user that is viewing the dashboard to show them the data. For example, if a user views the dashboard from PST, then Explo shows all of the dates converted from UTC to PST. If a user views the same dashboard from EST, Explo displays the dates convert from UTC to EST. ## Configurability If you go to a dashboard's settings dropdown, you will see a section called "Timezone". Here you can choose between two options: "User Local Time" and "UTC". The default for all new dashboards is UTC, which behaves the way described above. In most cases, the default setting should be the best approach and give your customers the most consistent viewing experience. However, there are times when you will want to have more granular control or force the customer to view the dashboard in a certain timezone. In those cases you'll want to use the UTC setting. ## UTC Timezone Setting The UTC configuration gives you the most control over your customer's viewing experience with respect to timezone aware data. ### What it does UTC dashboards will display all datetime data exactly as it was received from the query. We won't do any conversions to the user's local time. If your DB has a datetime stored at 11 PM UTC, the data on the frontend will interpret and display it as 11 PM. ### Setting a specific timezone Since the dashboard will show the users the dates exactly as they are coming from the backend, you can use this setting to set the dashboard to either a specific timezone, or a user-configurable timezone. #### Setting a specific timezone To do this, you should convert the datetime data in your SQL queries to the timezone using your database's SQL dialect. For example, in postgres, you can convert your data to PST timezone as follows: ```sql theme={null} select created_at at time zone 'utc' at time zone 'pst' from users; ``` When the data is then retrieved from the backend, Explo will show it as is, in PST. #### User-configurable timezones It is also possible to create dropdown on the dashboard which your users can then use to set the timezones to their preference. To do this, create a [Dropdown Select element](https://docs.explo.co/creating-dashboards/ui-elements/dropdown-select) and make the options the various timezones that you want your users to be able to use. Default the dropdown to the default timezone you want the dashboard rendered in Then, in your queries, you can modify the hardcoded timezone to be configurable as such: ```sql theme={null} select [[created_at at time zone 'utc' at time zone {{timezone_dropdown}}]] from users; ``` Now, when your users switch between timezone options in the dropdown, they can change the timezone of the data in the UI. ## Passing a timezone to embed code. You can also pass a timezone in via the web component or iframe. The parameter will look something like this: ``` timezone = "America/New_York" ``` The list of valid timezone values can be found [here](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones). # Editing the Current Draft Source: https://docs.explo.co/general-features/version-control/editing-the-current-draft In Explo, versions follow a linear history. You always start editing off of the most recent version of the dashboard or report builder. ### Entering Edit Mode To begin editing the most recent version, click the "Edit" button in the top right of the page. Edit controls In the above example, there is no current draft since Version 3 has already been publish. Thus, when you click Edit, it will create a new draft, Version 5. Editing mode ### Edit Interface  Editing interface After clicking edit, the editing controls will open up. In here, you can create new datasets, add new components, and configure the chart. ### Saving Changes All changes that you make to the elements, layout, and dataset are automatically saved to the current draft Edits saved to draft When you refresh the page or come back to your edits later, they will still be there. However, since this is jut a draft, the edits will not be pushed to your production applications until they have been published. # Embedding Environments Source: https://docs.explo.co/general-features/version-control/embedding-environments ### Embedding with the Web Component When you embed an Explo dashboard or report builder with the web component, you may specify the environment for example with dashboards in the following way: ```html theme={null} ``` Specify the environment tag with the `environment` property. ### Embedding with the IFrame When you embed with an IFrame, you can specify the environment tag as the final parameter in the URL for example with dashboards as such: > [https://explo.co/iframe/:dashboardid/:customer\_token/production](https://explo.co/iframe/:dashboardid/:customer_token/production) ### Not specifying an environment If you don't specify an environment tag, then we will use the most recently saved version. # Managing Environment Tags Source: https://docs.explo.co/general-features/version-control/managing-environment-tags Managing environment tags in the version control modal ### What are environment tags? Environment tags are a way of managing which version of the dashboard or report builder is being shown in your application. When you embed, you can pass in an environment field which corresponds to an environment tag. The embedded component will then render the resource associated with the provided environment tag. ### Creating new environment tags By default, your account has a `production` and `staging` environment tag. You may create any number of tags to manage as many environments as you may have. Creating a new development environment To create a new environment, click "Add new Environment Tag" and then configure the new tag. Read more about publishing a version to a specific environment [here](/general-features/version-control/publishing-a-new-version). ### Special environment tags for Dashboards Some environment tags have special behavior for emails and the customer portal. If a dashboard version is tagged with `portal`, then that version will be used by the customer portal. If a dashboard version is tagged with `email`, then that version will be used by for scheduled email reports. # Publishing a New Version Source: https://docs.explo.co/general-features/version-control/publishing-a-new-version All changes you make to the current draft are not yet made accessible to embed until you publish the draft as a new version. To publish a version, navigate back to the preview page and select the "Version Control" modal. Version control modal for new version Add in a description of the changes made and click "Save". In the next section, we'll explain how to manage the environment tags for the different versions. Add in a description of the changes made and click "Save". In the next section, we'll explain how to manage the environment tags for the different versions. ### Publishing to an environment Publishing Staging to version 3 To publish a version to an environment, simply select the "Publish To" option and select the environment you would like to publish the version to. This action will publish this version to any part of your website which is embedding an Explo dashboard or report builder with that environment tag specified. # Reverting Versions Source: https://docs.explo.co/general-features/version-control/reverting-versions If you found some issues with your current version or just simply want to get back to a previous version you can click on the revert version menu button and it will revert to that version. If the dashboard or report builder has a current draft it will ask you to confirm that you want to replace the draft with the version you selected. If there is no current draft it will set the version selected as the current draft. # Viewing Versions Source: https://docs.explo.co/general-features/version-control/viewing-versions Explo provides a straightforward way to version your dashboards or report builders. The following pages describe how this system works and how to use it. ### View Page The viewing page When you navigate to a dashboard or report builder from the home page, you will be taken to the viewer page. This page is a view-only preview. You can switch between customers with the top bar. By default, you will be viewing the most recent version or current draft ### Switching Viewing Version Version Control modal If you click on the "Version Control" button, a modal pops up showing you the dashboard or report builder's history. In Explo, versions follow a linear history. You always start editing off of the most recent version of the dashboard or report builder. To view the resource as a previous version, simply select the "Preview" option for the version you would like to view. # Creating My First Dashboard Source: https://docs.explo.co/getting-started/creating-my-first-dashboard Follow along to this article to get started creating your first dashboard! ## Set up your datasets in your first dashboard The first step to building your [first dashboard](https://www.explo.co/blog/what-is-a-dashboard) is to create **dashboard-specific datasets**. Although this is not required, this allows you to configure viewing permissions, configure variables, and optimize your queries that are specific to each dashboard. Even if you don't require any additional changes to your data, we suggest you create a new dataset and select entire tables as shown below: ```sql theme={null} SELECT * FROM Table_1; ``` Read more about how to use the dataset editor [here](/creating-dashboards/dataset-editor). ## Create your first data panel in your first dashboard After you've configured your dashboard-specific dataset(s), you're now ready to create a data panel in Explo! Simple drag and drop a `Chart Component` onto the canvas, and select the dataset you'd like to use. Double click on the panel you created to access the editor. There are 2 separate sections in the editor. `Data` - select which visualization to use and configure the aggregations, filters, and different parameters `Format` - format your visualizations that adjust labels, colors, text, and more We encourage users to build visualizations from dashboard-specific datasets for each dashboard and not source datasets. This allows you to configure variables for drop-downs, user access controls, and other custom variables to interact with your dashboard. ## Add additional components and configure variables in your first dashboard ### Adding components to your first dashboard Add additional components to your first dashboard by dragging and dropping them onto your canvas. ### Configure variables in your datasets in your first dashboard Some components such as [date selectors](/creating-dashboards/ui-elements/controls/date) and [dropdowns](/creating-dashboards/ui-elements/controls/dropdown) require you to add variables into your SQL queries. For more information on how to configure variables, click [here](/creating-dashboards/variables). ## Share and embed your first dashboard Once your first dashboard is complete, you're ready to embed or share your first dashboard! Please ensure that your customers are set before this step to ensure your customer are only seeing their own data. For more details on how to embed your first dashboard, click [here](/embedding-documentation/dashboard/option-1-web-component/). If you want your users to be able to share links or download the dashboards as a pdf, simply drag a Share component onto your dashboard. ## Some general resources and examples: * [Database Dashboards][1] * [DevOps Metric Dashboard][2] * [Embedded Dashboards][3] * [HR Dashboard][4] * [Marketplace Dashboard][5] * [React Dashboard][6] * [Sales Dashboard][7] * [Self Service Dashboard][8] * [SQL Dashboard][9] * [User Dashboard Design][10] [1]: https://www.explo.co/blog/database-dashboards [2]: https://www.explo.co/blog/designing-devops-dashboards [3]: https://www.explo.co/blog/top-embedded-dashboards [4]: https://www.explo.co/blog/hr-dashboard [5]: https://www.explo.co/dashboard-gallery/online-marketplace-dashboard [6]: https://www.explo.co/blog/react-dashboard [7]: https://www.explo.co/blog/sales-dashboards [8]: https://www.explo.co/blog/self-service-dashboards [9]: https://www.explo.co/blog/sql-dashboards [10]: https://www.explo.co/blog/user-dashboard-design # User Roles Source: https://docs.explo.co/managing-permissions/user-roles Manage your users' permissions in Explo Use roles to control what your users can see and do in Explo. Each user is assigned to a role when you invite them, and that role can be reassigned via the team members page. Explo supports four roles: * Admin * Publisher * Editor * Viewer # High Level Role Breakdown Note that each role has the permissions of the roles before it, e.g. the Publisher role has all the permisisons of the Viewer and Editor roles. ### Assign someone to be a viewer if * You want them to only be able to see your data (dashboards, data sources, customers, blueprints) in Explo * You do not want them to be able to make any modifications at all to your data ### Assign someone to be an editor if * You want them to be able to create new data (dashboards, data sources, customers, blueprints) in Explo * You want them to be able to make edits to this data BUT you don't want them to be able to make these edits visible to customers via publishing * You want them to be able to develop your embed locally without affecting your production dashboards ### Assign someone to be a publisher if * You want them to be able to manage your productionalized dashboards via publishing and settings such as internationalization and email management * You want them to be able to delete data (dashboards, data sources, customers, blueprints) from Explo ### Assign someone to be an admin if * You want them to be able to control team settings, such as member invites, roles, and billing # Table of Permissions | Entity | Action | Admin | Publisher | Editor | Viewer | | :------------------------------------------: | :------------------------: | :---: | :-------: | :----: | :----: | | Data Sources and Schema | View | x | x | x | x | | | Create | x | x | x | | | | Edit | x | x | x | | | | Delete | x | x | | | | Customers | View | x | x | x | x | | | Create | x | x | x | | | | Edit | x | x | x | | | | Delete | x | x | | | | Dashboards, Report Builders, and Data Shares | View | x | x | x | x | | | Create | x | x | x | | | | Edit | x | x | x | | | | Delete | x | x | | | | | View Embed Code | x | x | x | | | | Publish | x | x | | | | | Modify Settings | x | x | | | | Custom Styles | View | x | x | x | x | | | Create | x | x | | | | | Edit | x | x | | | | | Delete | x | x | | | | API Tokens | View | x | | | | | | Create | x | | | | | | Edit | x | | | | | | Delete | x | | | | | Settings | View Team Members | x | x | x | x | | | Invite Team Members | x | | | | | | Remove Team Members | x | | | | | | Update Admin Settings | x | | | | | | Update Developer Settings | x | x | | | | | Update Billing Information | x | | | | # Data Visibility Groups Source: https://docs.explo.co/managing-permissions/visibility-groups Manage how your data can be read or written by our API Use Data Visibility Groups to control what data can be accessed via our API and to split out your data by groups such as testing and production. A data visibility group consists of API tokens, data sources, and customers. Each API token can be configured to have either read-write or read-only permissions to our API. When one of your team members uses that API token to access your data, Explo will only send the data sources and customers associated with that token's data visibility group. If someone tries to create a new customer via the API, they will only be able to associate that customer with data sources also linked to their token. ### Real-World Example You might want to create a "Testing" data visibility group for your developers. This group would have one API token with read-write permissions and would be associated with any of the customers or data sources that you've created for the purposes of testing your dashboards. Now, anyone using the "Testing" API token would be able to test embedding Explo dashboards without seeing any production data. Because the token is read-write, they'd be able to create new customers to test with, but those new customers would also only be able to use your "testing" data. ### Managing Data Visibility Groups To manage your data visibility groups, go to the Data Visibility Groups section of the settings page. From there, you have the ability to create and delete data visibility groups, add, modify, or delete API tokens, and update the data sources associated with each. A "Visibility Group 1" data visibility group with one read-write API token For each schema, you can choose one data source to be the default for your data visibility group and any number of other data sources to also belong to that data visibility group. Note that one data source can belong to multiple data visibility groups if you require that. Defaults can be configured in the manage schemas modal on the data sources page. A "Manage Schemas Modal" set default data sources #### Updating customer Visibility Data Visibility Groups and their association with customers can be managed from the customer modal. Note that an customer can only be associated with one data visibility group at a time. # Custom Aggregations Source: https://docs.explo.co/report-builder-features/custom-aggregations Custom aggregations allow you to define aggregated metrics for a dataset that end users can use in the Report Builder when the standard aggregation set does not cover all use cases. ## Using a Custom Aggregation Custom aggregations will appear when end users click on the `+` sign in the `Values` section of a report. End users can use the custom aggregation on its own or when data is grouped. They can also be used as the aggregation in visualizations. Configurations ## Configuration In the dataset configuration panel, open the tab called `Custom Aggregations` and click `New Custom Aggregation`. Configurations First, name the aggregation. This is how the custom aggregation will be identified in the final Report Builder. Then, define the aggregation using raw `SQL`. These are some examples of formulas you can write: `SUM(tip_amount) / SUM(amount)` `SUM(revenue) - SUM(cost)` You can add a description for the aggregation that will appear to the right of the aggregation name in the reports. Configurations Lastly, you can format the value of the custom aggregation. All standard value formatting options are available here. Configurations # Duplicating Report Builders Source: https://docs.explo.co/report-builder-features/duplicating-report-builders Learn how to duplicate report builders in Explo You can duplicate a report builder in two ways: 1. **From the Resource List Page**: Locate the report builder you want to duplicate, click the options menu, and select "Duplicate". You will be prompted to select a specific version to duplicate. Report Builder List Page Duplicate Modal 2. **From the Version Control Panel**: Open the report builder, navigate to the version control panel, and select the version you want to duplicate. Dashboard Version Panel Duplicate Modal ### Important Notes * Scheduled emails will not be duplicated. * Ensure you have the necessary permissions to duplicate report builders. # Read-Only Report Builders Source: https://docs.explo.co/report-builder-features/read-only Some customers want their end users to have a report builder experience that is read-only, meaning that all reporting creating functionality is taken away. In some cases, even ephemeral analytical features like filtering and sorting are removed as well. ## How does it work? When you generate a [JWT](/embedding-documentation/embed-secrets/intro) to be used for a report builder, you can add a `rbc` claim to the JWT that indicates the allowed editing features for the report builder. This is an optional claim, meaning it is not needed to construct a valid JWT. If it's not passed in or the list that is passed in is the wildcard string (`["*"]`), all functionality will be allowed. By **default**, end users will always be able to: * View reports. * Toggle favorite reports. * Configure scheduled emails. Pass specific key words to allow corresponding capabilities: * `flt` -> Allow filtering of reports * `srt` -> Allow sorting of reports * `core` -> Allow core editing functionality (creating/editing reports, adding/editing views) * `crt-view` -> Allow creating a new view within an existing built-in report * `fork` -> Allow saving as a customer report after modifying an existing built-in report > **Note**: If you are enabling `core` functionality, you don't need to explicitly include `view` or `fork`, as they are covered by `core`. > **Note**: The `fork` and `crt-view` permissions will not allow modifying the underlying data. > **Note**: The `fork` permissions will allow saving changes on forked customer reports. By default if the `rbc` claim is in the JWT with the empty list (`[]`), then all editing capabilities are disabled. Here are some example configurations: ```json theme={null} [] // Disable all editing capabilities ["flt", "srt"] // Allow filtering and sorting ["flt"] // Allow only filtering ["srt"] // Allow only sorting ["crt-view"] // Allow creating new views in built-in reports ["fork"] // Allow saving modified built-in reports as new customer reports ["crt-view", "fork"] // Allow both viewing and forking ``` # Report Builder AI Source: https://docs.explo.co/report-builder-features/report-builder-ai ## Overview Embed AI powered self-service reporting directly into your applications. End users can create new Views with the help of Explo AI resulting in the ability to uncover hidden trends, surface actionable insights, and get precise answered tailored to their business context. For information on Privacy and Compliance, please read our [Privacy FAQs](/security/ai-acknowledgement#explo-ai-feature-faq) ## Using Report Builder AI ### Control End User Access to AI Turn on Report Builder AI for end users through customer specific and group tag specific permissions. Navigate to your Report Builders top left-hand dropdown and select AI Settings. Here you’ll find the ability to select Group Tags and Customers that have AI turned on for this specific Report Builder. RB AI Settings ### Report Builder AI End User Experience **Step 1: Create a new View** Report Builder AI is available when creating a new View within Report Builder. End Users will be prompted to interact with Report Builder AI when creating a new View with the option to input Free Text or choose from three Chart suggestions. A new Explo AI Chat is available with each new View. The Explo AI Chat is specific to that View and is not able to be referenced in another View’s Chat. RB AI Assistant 1 **Step 2: Kick off a chat with Explo AI or choose a chart type** If End Users do not wish to interact with Report Builder AI, they can choose a chart option on the right hand side of the View. RB AI Assistant 2 **Step 3: Create a Chart** Once the End User kicks off their conversation with Explo AI, they’ll be able to iterate with Explo AI to create a chart that helps deliver the insights they are looking for. Once the User selects Create Chart in the Explo AI chart, a chart view will be displayed and the user will be able to change the Visualization Type. RB AI Assistant 3 **Step 4: Create View** When ready, the End User will select Create View to exit the AI conversation and is now able to interact with and Edit the AI-created View. Once the End User chooses Create View, they will no longer be able to revisit that Explo AI Chat for this View. All visualizations will not be saved until the End User creates the view. Refreshing the page will clear the session. The number of messages allowed is 20, but if you'd like to increase this, please reach out to support. RB AI Assistant 4 # AI Acknowledgement Source: https://docs.explo.co/security/ai-acknowledgement Explo AI is a series of features designed to improve the dashboard creation process and end-user dashboard interaction process by enlisting the power of large language models (LLMs). Explo utilizes state-of-the-art LLM APIs to provide this functionality to users. ## General FAQs * Today, Explo uses [OpenAI APIs](https://openai.com/api/) for its AI features, but reserves the right to use any LLM that is available via the public cloud or as a private hosted solution. * As of May 13th, the United States District Court Southern District of New York has ordered OpenAI to preserve and segregate all output log data that would otherwise be deleted on a going forward basis until further order of the court. [Here](https://cases.justia.com/federal/district-courts/new-york/nysdce/1%3A2023cv11195/612697/551/0.pdf) is the court order. We will be following this closely. * As per OpenAI’s platform documentation [here](https://platform.openai.com/docs/models/how-we-use-your-data#how-we-use-your-data) and community monitor [comment here](https://community.openai.com/t/does-open-ai-api-use-api-data-for-training/659053), the data fed into their API will not be used for training. ## Compliance Details * Customers need to opt-in to use AI features. * The OpenAI API is [SOC 2 Type 2 compliant](https://us.aicpa.org/interestareas/frc/assuranceadvisoryservices/serviceorganization-smanagement.html) and has been audited by an independent third-party auditor against the [2017 Trust Services Criteria for Security](https://us.aicpa.org/content/dam/aicpa/interestareas/frc/assuranceadvisoryservices/downloadabledocuments/trust-services-criteria.pdf). * Explo agrees to use LLM solutions that maintain Explo’s SOC 2 Type 2 compliance requirements. * Explo is potentially able to sign Business Associate Agreements in support of customers’ compliance with the Health Insurance Portability and Accountability Act (HIPAA). To qualify for this, you must have an Enterprise Agreement with OpenAI & Explo and a qualifying use case. Please [reach out to the OpenAI sales team](https://openai.com/contact-sales) and the Explo team if you are interested. ## Levels of AI Usage ### Level 1: Schemas, Queries, Errors, DB Types In Explo’s queries to LLM providers, we can expose: * `table schemas` (table names, column names, column type) * `SQL queries` * `error messages` * `data source types` If there is data that falls in the items above that you would have concern with being exposed via an API call to an LLM provider, please reach out to Explo prior to using the AI features. As of July 14th, 2025, `data source types` was added to the list above. All customers who previously agreed to the acknowledgement have been notified appropriately. ### Level 2: Customer Data In addition to the information in Level 1, Explo’s queries to LLM providers can also include: * `customer data` The `customer data` that Explo can feed into the LLM can only and will only come from global datasets in the [Data Library](/data-sources/data-library/overview) and local datasets in dashboards or report builders. Corresponding [archetype variables](/creating-dashboards/variables/types-of-variables/customer-object#archetype-variables) will always be passed in to ensure that the data is segmented correctly. Features that require Level 2 are in active development and have not been released yet. # Caching Layer Source: https://docs.explo.co/security/caching-layer Explo's caching layer brings customer data into an in-memory cache to further improve the product experience. Depending on which data connector your workspace uses, Explo will either use [Heroku Shield Redis](https://blog.heroku.com/announcing-shield-redis) or [Apache Ignite](https://ignite.apache.org/). Both of these technologies are aligned to ensure that Explo upholds our SOC 2 Type 2 accreditation and HIPAA compliance. If you are using our [new data connector (FIDO)](/data-sources/new-data-connector-fido), then you are using Apache Ignite. ## Redis FAQs * Redis is an ephemeral data storage, meaning the data is only held temporarily * Our Redis is deployed on Heroku Shield, which is a managed Redis service ## Apache Ignite FAQs * Apache Ignite is an open source project (Github can be found [here](https://github.com/apache/ignite)) * Explo is only using Ignite's default setting, which operates in a pure in-memory mode * Our Apache Ignite is deployed in our AWS ECS clusters ## General Cache FAQs * Certified to handle `PHI`, `PII`, and `HIPAA` data * The data is only held in memory and not written to disk, so the data is never stored * All communication channels with the cache are fully encrypted * How long the data is held is memory is configurable in the application ## Compliance * Customers are able to opt-out of using our cache * It is recommended for a better experience, but it is not required * Explo's Privacy Policy, HIPAA Breach Notification Policy, and Incident Response Plan HIPAA Addendum with Breach Notification Procedures are updated to reflect the use of the cache and the ability to opt-out ## Is this considered storing data? No. Data is only held in memory and never written to disk, so the data is never stored in Explo's systems. # Rate Limits Source: https://docs.explo.co/security/rate-limits ## Do Explo's API endpoints have a rate limit? Yes. Currently our rate limit for `https://api.explo.co/` is set to 180 requests per minute across all endpoints, on a requestor IP basis. This was updated on February 19, 2025 from 600 requests per minute to ensure healthy API hygiene and prevent adversarial actions. There is an additional cap on the API endpoint used to ad hoc export dashboard PDFs. This endpoint should not be called programmatically, rather it is only called by the Explo application itself. It is being called out in the docs for completeness. The cap for `https://api.explo.co/embed/export/dashboard/pdf` is set to 20 requests per 10 minutes per requestor IP. Other specific endpoints may have more restrictive rate limits and can be adjusted in the future. Requests made when over quota will receive an `HTTP 429` error code with a descriptive message. If you would like a bulk API endpoint, please reach out to the Explo support team. ## Example Code Snippet to Handle HTTP 429s Below is some code examples you can use to directionally help you navigate how to check for `HTTP 429` error codes and ease off the API until the rate limit resets. ### JavaScript, Axios Example ``` const axios = require('axios'); const API_URL = 'https://api.explo.co/api/create_customer'; const WAIT_TIME_MS = 60000; // 1 minute async function createCustomers(customer_post_bodies) { for (const customer_post_body of customer_post_bodies) { let successful_call = false; while (!successful_call) { try { const response = await axios.post(API_URL, customer_post_body); successful_call = true; } catch (error) { if (error.response && error.response.status === 429) { console.warn('Rate limit exceeded. Waiting for 1 minute.'); await new Promise(resolve => setTimeout(resolve, WAIT_TIME_MS)); } else { console.error(`Error creating customer ${customer.name}:`, error.message); // TODO: Decide how you want to handle other errors. } } } } } ``` ### Python, Requests Example ``` import requests import time API_URL = 'https://api.explo.co/api/create_customer' WAIT_TIME_S = 60 # 1 minute def create_customers(customer_post_bodies): for customer_post_body in customer_post_bodies: successful_call = False while not successful_call: try: response = requests.post(API_URL, json=customer_post_body) response.raise_for_status() successful_call = True except requests.exceptions.RequestException as error: if response is not None and response.status_code == 429: print('Rate limit exceeded. Waiting for 1 minute.') time.sleep(WAIT_TIME_S) else: print(f"Error creating customer {customer_post_body.get('name', 'Unknown')}: {error}") # TODO: Decide how you want to handle other errors. ``` # Security FAQs Source: https://docs.explo.co/security/security-faqs Check out [Explo's Security Trust Center page](https://security.explo.co/?itemUid=7bfa66da-33ab-49de-8391-e329738a1ae9\&source=click) to get access to our compliance certification reports. ### Is data encrypted at rest? **Yes**, data is encrypted at rest with `AES-256, block-level storage encryption`. Amazon manages the keys and individual volume keys are stable for the lifetime of the volume. More information can be found [here](https://devcenter.heroku.com/articles/heroku-postgres-production-tier-technical-characterization#data-encryption). Heroku doesn't encrypt data at the Postgres level. Sensitive fields, like passwords, are encrypted at the Postgres level by our application using `256 bit + 390k stretch key lengths`. If data is ever sent to S3 for exports, the files are short-lived and encrypted in S3. There is a 7-day object expiration rule applied to the entire S3 bucket. ### Is data encrypted in transit? **Yes**, the data is encrypted in transit with `Mutual TLS` or `mTLS`. Heroku uses mTLS to create a secure and mutually authenticated channel between an external resource and our Heroku Postgres database. More information can be found [here](https://devcenter.heroku.com/articles/heroku-postgres-and-private-spaces#connecting-via-mtls). Heroku uses `TLS 1.2 or 1.3`, more information can be found [here](https://devcenter.heroku.com/articles/ssl#supported-ssl-protocols). ### How is unauthorized access to code repositories and cloud hosting platforms prevented? * These platforms can only by accessed by authorized Explo employees. * Only Explo administrators can add additional employees to these platforms. * All accounts added to our code repositories and cloud hosting platforms are required to have MFA enabled. Additional details are listed in our [SOC 2 Report](https://security.explo.co/?itemUid=f4951085-df2e-4fac-9d43-60b796478b2e\&source=documents_card). ### How are customer database credentials rotated? Explo is unable to rotate our customer's database or data warehouse credentials. It is on the customer to rotate the database passwords for Explo's service user and update those values in the Explo platform. If you'd like to programmatically update these values with an API, please reach out to the Explo team. ### How are customer tokens rotated? Explo recommends you to embed with [JWTs](/embedding-documentation/embed-secrets) and not with the non-expiring customer token. JWTs are short-lived tokens (the lifetime of the token can be configured) that allow for additional security. The JWT encodes the dashboard or report builder embed\_id, the customer object's provided\_id, and the length of time the token should live for. If you need to use the customer token, please be sure to periodically [refresh the token](/api-reference/customer-api/refresh-token). Explo will not automatically refresh these tokens because this could cause your platform to be out of sync with the Explo platform. ### Does Explo have an incident response plan? What are the customer communication protocols? **Yes**. We've had an incident response plan in place since we got our first audited SOC 2 Report in January 2021. Explo deeply values the importance of privacy and security and that's why we got our SOC 2 so early as a startup. This plan is revisited every year as part of our yearly SOC 2 Type 2 audit to ensure it is up to date. If a breach has taken place, all (and likely) impacted customers are notified and communicated with as soon as possible. Our status page will reflect a wider message and a broadcast will be sent to the wider customer fleet with information about the incident, remediation steps, and any additional information. For more information, please check out our [SOC 2 Report](https://security.explo.co/?itemUid=f4951085-df2e-4fac-9d43-60b796478b2e\&source=documents_card). ### Do Explo's API endpoints have a rate limit? We've added a new section about rate limits [here](/security/rate-limits).