React Embedded AnalyticsSharing & Caching Data

Version 3.0.0

A Data Engine loads, processes, and caches data for Studio widgets.

Studio creates one automatically when you pass data sources via the data property, but you can create the built-in engine yourself to share it across instances, or cache it across a Studio instance's lifecycle.

Built-in Engine Copy Link

When you pass data sources directly to Studio, it creates a built-in Data Engine behind the scenes. Creating the engine externally with createDataEngine(data) gives you two benefits:

  • Sharing - multiple Studio instances can point at the same engine, so they share a single copy of the data.
  • Caching across lifecycles - the engine survives when Studio is destroyed and recreated, so data doesn't need to be re-fetched or reprocessed on remount.
const dataEngine = createDataEngine({
    sources: [{
        id: 'medals',
        data: [
            {
                year: 2000,
                sport: 'Swimming',
                country: 'United States',
                // ... other fields
            },
            // ... other rows
        ],
    }],
});
const data = useMemo(() => { 
	return dataEngine;
}, []);

<AgStudio data={data} />

See Loading Data for the full range of data loading patterns.

createDataEngine(data) accepts a data object of type AgDataSourcesDefinition.

sourcesCopy Link
AgDataSource<TRegistry>[]
One or more data sources.
relationshipsCopy Link
AgRelationDefinition[]
When using multiple related tables, this describes the fields that link the tables together.
expressionsCopy Link
AgExpressionFieldDefinition<TRegistry, AgFormat<TRegistry>, any>[]
Expression field definitions for calculated columns.
formatsCopy Link
TRegistry["formats"]
Overrides to existing formats, or additional custom formats.
descriptionCopy Link
string
AI-facing overview of the entire dataset: what it contains, what it's for, domain quirks.
calendarsCopy Link
AgCalendar[]
Named time dimensions (calendars) that supply date fragments and a continuous date spine.
bucketsCopy Link
TRegistry["buckets"]
Additional date-fragment bucket definitions to register alongside the built-in set (year, quarter, month, week, day, monthOfYear, dayOfWeek, …). Use this to add project-specific groupings such as weekend, dayOfMonth, or hour that the built-in registry does not include. Provide via createBuckets so type-level registry inference works correctly.
optionsCopy Link
AgDataSourcesOptions
Engine-wide behavioural options, such as fan-out detection policy.

Embedding Single Widgets Copy Link

A widget cannot be used on its own outside of Studio. To place an individual widget in your own application, run a Studio instance that shows a single widget filling the canvas, with the panels hidden. Several such instances can share one engine, so the data is loaded once.

To show a single widget, give the report a one-cell layout and hide the panels:

const [mode, setMode] = useState('view');
const panels = {};
const layout = { columns: 1, height: 300, rowHeight: 300, pagePadding: 0, widgetPadding: 0 };

<AgStudio
    mode={mode}
    panels={panels}
    layout={layout}
/>

Each instance is independent. Panels belong to a single instance, so one panel cannot control several instances. Only the data engine is shared.

Custom Engines Copy Link

Sharing and caching, as described above, are features of the built-in engine only. For larger datasets, or when you want to replace query execution with a backend you already own, see the Custom Engine guide in the Server-Side Data section.