Create and configure AnalysisConfig objects for query, funnel, and flow analysis modes in Drizzle Cube dashboards.
This skill helps you create AnalysisConfig objects - the canonical format for persisting analysis state in Drizzle Cube. Use AnalysisConfig for:
analysisConfig field)interface AnalysisConfig {
version: 1 // Always 1
analysisType: 'query' | 'funnel' | 'flow'
activeView: 'table' | 'chart'
charts: {
[K in AnalysisType]?: ChartConfig // Per-mode chart settings
}
query: CubeQuery | MultiQueryConfig | ServerFunnelQuery | ServerFlowQuery
}
interface ChartConfig {
chartType: ChartType
chartConfig: ChartAxisConfig
displayConfig: ChartDisplayConfig
}
For standard queries and multi-query analysis.
const singleQueryConfig: QueryAnalysisConfig = {
version: 1,
analysisType: 'query',
activeView: 'chart',
charts: {
query: {
chartType: 'bar',
chartConfig: {
xAxis: ['Employees.department'],
yAxis: ['Employees.count', 'Employees.avgSalary']
},
displayConfig: {
showLegend: true,
stackType: 'none'
}
}
},
query: {
measures: ['Employees.count', 'Employees.avgSalary'],
dimensions: ['Employees.department'],
filters: [
{
member: 'Employees.isActive',
operator: 'equals',
values: [true]
}
],
order: {
'Employees.count': 'desc'
},
limit: 10
}
}
Combine multiple queries with merge strategies:
const multiQueryConfig: QueryAnalysisConfig = {
version: 1,
analysisType: 'query',
activeView: 'chart',
charts: {
query: {
chartType: 'line',
chartConfig: {
xAxis: ['Orders.createdAt'],
yAxis: ['Sales.totalRevenue', 'Returns.totalRefunds']
},
displayConfig: {
showLegend: true,
showGrid: true
}
}
},
query: {
queries: [
{
measures: ['Sales.totalRevenue'],
timeDimensions: [{
dimension: 'Orders.createdAt',
granularity: 'month'
}]
},
{
measures: ['Returns.totalRefunds'],
timeDimensions: [{
dimension: 'Returns.createdAt',
granularity: 'month'
}]
}
],
mergeStrategy: 'merge',
mergeKeys: ['Orders.createdAt'],
queryLabels: ['Revenue', 'Refunds']
}
}
Merge Strategies:
'concat' - Append rows with __queryIndex marker (for separate series)'merge' - Align data by common dimension key (for combined visualization)For sequential step analysis with conversion tracking.
const funnelConfig: FunnelAnalysisConfig = {
version: 1,
analysisType: 'funnel',
activeView: 'chart',
charts: {
funnel: {
chartType: 'funnel',
chartConfig: {},
displayConfig: {
funnelStyle: 'funnel', // 'funnel' or 'bars'
funnelOrientation: 'horizontal', // 'horizontal' or 'vertical'
showFunnelConversion: true,
showFunnelAvgTime: true
}
}
},
query: {
funnel: {
// Binding key links steps together (user/entity ID)
bindingKey: 'Events.userId',
// Time dimension for ordering and time-to-convert
timeDimension: 'Events.timestamp',
// Sequential steps
steps: [
{
name: 'Signup',
cube: 'Events',
filter: {
member: 'Events.eventType',
operator: 'equals',
values: ['signup']
}
},
{
name: 'First Purchase',
cube: 'Purchases',
filter: {
member: 'Purchases.amount',
operator: 'gt',
values: [0]
},
timeToConvert: 'P30D' // Must convert within 30 days
},
{
name: 'Repeat Purchase',
cube: 'Purchases',
filter: {
member: 'Purchases.isRepeat',
operator: 'equals',
values: [true]
},
timeToConvert: 'P90D'
}
],
// Optional: track time metrics between steps
includeTimeMetrics: true,
// Optional: overall time window for the entire funnel
globalTimeWindow: 'P180D'
}
}
}
When the binding key has different names in different cubes: