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.

To optimize dashboard responsiveness and avoid unnecessary data reloads, follow this three-step loading hierarchy:

1

Load Independent Connections First

Load datasets that do not depend on other components — e.g., filters, date selectors, radio buttons.

2

Load Dependent Connections Later

Load datasets connected to charts, KPI tiles, or widgets that depend on filter selections.

3

Reload Dependent Datasets Only when Filters are Ready

Ensure all parent datasets (filters) are fully loaded before triggering reloads for child datasets.

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 });

Explanation:

  • serviceload acts as a shared state object.

  • Both filters (C_2, C_3) start as false, meaning they haven’t finished loading.

  • As each dataset completes loading, its flag will be updated to true.

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']);
}

Explanation:

  • Each connection updates its flag (C2 or C3) when data is fetched successfully.

  • Once both filters are loaded, the dependent datasets (C_4, C_5, C_6) are reloaded only once.

  • Prevents duplicate reloads or premature data fetching.

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() and sdk.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