Optimal Dataset Loading
Overview
In Dashboard Designer, all data visualizations are powered by published datasets connected through data services. To maintain high performance and prevent redundant reloads, datasets must be loaded only when necessary — following an optimized sequence.
This guide explains how to implement optimal dataset loading logic using SDK context management methods and connection scripts, ensuring efficient, event-driven dashboard updates.
Recommended Dataset Loading Flow
To optimize dashboard responsiveness and avoid unnecessary data reloads, follow this three-step loading hierarchy:
This sequential approach ensures that:
Example Scenario
Let’s consider the following configuration:
Dataset ID
Type
Purpose
C_2
Filter Dataset
Filter 1 Data Source
C_3
Filter Dataset
Filter 2 Data Source
C_4, C_5, C_6
Dependent Chart Datasets
Charts driven by filter selections
Objective:
Load C_4, C_5, and C_6 only after both C_2 and C_3 (filter datasets) have finished loading.
Implementation Steps
We’ll implement this using three core SDK context methods:
Method
Purpose
sdk.setContext()
Defines or updates shared global context objects (e.g., flags).
sdk.getContext()
Retrieves the current context state.
sdk.reload()
Triggers reloads of specified datasets.
Step 1 — Initialize Context Flags
Create a context variable to track the loading status of each filter dataset.
Location: Dashboard Script Area (executed when the dashboard first loads)
// Initialize flags for filter datasets
sdk.setContext('serviceload', { 'C2': false, 'C3': false });Step 2 — Update Flags in Each Filter Connection
Update the flags within each connection’s Connection Script.
For C_2 Connection Script
// Mark filter dataset C_2 as loaded
sdk.setContext('serviceload').C2 = true;
// Check if both filters are ready, then reload dependent datasets
if (sdk.getContext('serviceload').C2 && sdk.getContext('serviceload').C3) {
sdk.reload(['C_4', 'C_5', 'C_6']);
}For C_3 Connection Script
// Mark filter dataset C_3 as loaded
sdk.setContext('serviceload').C3 = true;
// Check if both filters are ready, then reload dependent datasets
if (sdk.getContext('serviceload').C2 && sdk.getContext('serviceload').C3) {
sdk.reload(['C_4', 'C_5', 'C_6']);
}Key Notes & Best Practices
Avoid Redundant Reloads: Do not reload the same dataset multiple times. Trigger reloads only when all required dependencies are ready.
Never Reload Parent Connections from Child Datasets: Reloading a filter (parent) from a dependent component can cause infinite reload loops.
Use Context Flags Effectively: Leverage
sdk.setContext()andsdk.getContext()to track dataset load completion states, thereby improving synchronization between components.Use Logical Grouping for Multiple Dependencies: If more than two filters are used, structure the context like:
sdk.setContext('serviceload', { 'C2': false, 'C3': false, 'C7': false });Then, check all flags before reloading.
Keep Dashboard Load Lightweight: Load only essential datasets initially — defer dependent datasets to event-based reloads.
Summary
By following the optimal dataset loading strategy, you can:
Ensure filters and selectors load first to drive all downstream visualizations.
Refresh dependent datasets only when prerequisite data is ready.
Prevent redundant reloads and infinite loops.
Deliver a faster, more responsive, and resource-efficient dashboard experience.
Quick Reference
SDK Method
Purpose
Example Usage
sdk.setContext()
Sets a global context object or flag
sdk.setContext('serviceload', { 'C2': false, 'C3': false });
sdk.getContext()
Reads the current global context
sdk.getContext('serviceload').C2
sdk.reload()
Reloads one or more data services
sdk.reload(['C_4', 'C_5']);
Example Summary Workflow
// Step 1: Initialize in Dashboard Script
sdk.setContext('serviceload', { 'C2': false, 'C3': false });
// Step 2: Connection Script for C_2
sdk.setContext('serviceload').C2 = true;
if (sdk.getContext('serviceload').C2 && sdk.getContext('serviceload').C3) {
sdk.reload(['C_4', 'C_5', 'C_6']);
}
// Step 3: Connection Script for C_3
sdk.setContext('serviceload').C3 = true;
if (sdk.getContext('serviceload').C2 && sdk.getContext('serviceload').C3) {
sdk.reload(['C_4', 'C_5', 'C_6']);
}Outcome
Last updated