or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

chart-components.mdchart-plugins.mddata-transformation.mdform-data.mdindex.mdquery-building.md
tile.json

query-building.mddocs/

Query Building

The query building system constructs database queries for timeseries data with support for complex operations like time comparison, forecasting, and advanced aggregations.

Capabilities

Build Query Function

Main query building function that constructs query contexts from form data.

/**
 * Builds query context for timeseries data fetching
 * Supports time comparison, forecasting, and complex aggregations
 * @param formData - Form data configuration
 * @returns Array of query contexts for data fetching
 */
function buildQuery(formData: QueryFormData): QueryContext[];

Usage:

import { buildQuery } from "@superset-ui/plugin-chart-echarts";

const queryContexts = buildQuery({
  // Basic query configuration
  datasource: "1__table",
  viz_type: "echarts_timeseries",
  metrics: ["sum__value"],
  groupby: ["category"],
  
  // Time configuration
  time_range: "Last 30 days",
  time_grain_sqla: "P1D",
  
  // Time comparison
  time_compare: ["1 year ago"],
  
  // Advanced features
  rolling_type: "mean",
  rolling_periods: 7,
  // ... other configuration
});

Query Context Interface

The result of query building containing all information needed for data fetching.

/**
 * Query context containing complete query configuration
 */
interface QueryContext {
  /** Base query object with metrics and filters */
  queries: QueryObject[];
  /** Form data configuration */
  form_data: QueryFormData;
  /** Result format specification */
  result_format: string;
  /** Result type specification */
  result_type: string;
}

interface QueryObject {
  /** Metrics to aggregate */
  metrics: QueryFormMetric[];
  /** Columns to group by */
  columns: QueryFormColumn[];
  /** Series columns for multi-series charts */
  series_columns: QueryFormColumn[];
  /** Time series flag */
  is_timeseries?: boolean;
  /** Ordering specification */
  orderby: QueryFormOrderBy[];
  /** Time offset for comparisons */
  time_offsets: string[];
  /** Post-processing operations */
  post_processing: PostProcessingRule[];
}

Query Processing Pipeline

Post-Processing Operations

The query builder constructs a comprehensive post-processing pipeline:

/**
 * Post-processing operations applied to query results
 */
interface PostProcessingRule {
  operation: string;
  options: Record<string, any>;
}

Processing Pipeline:

  1. Pivot Operation: Transforms data into pivot format
  2. Rolling Window: Applies rolling window calculations
  3. Time Compare: Adds time comparison metrics
  4. Resample: Resamples data to different time granularities
  5. Rename: Renames columns and metrics
  6. Contribution: Calculates contribution percentages
  7. Sort: Sorts data by specified criteria
  8. Flatten: Flattens multi-index dataframes
  9. Prophet: Applies Prophet forecasting

Pivot Operations

Data pivoting for proper time series structure:

/**
 * Pivot operator for data restructuring
 */
type PostProcessingPivot = PostProcessingRule & {
  operation: 'pivot';
  options: {
    index: string[];
    columns: string[];
    values: string[];
    aggfunc?: string;
  };
};

Time Comparison Operations

Support for time-over-time comparisons:

/**
 * Time comparison configuration
 */
interface TimeComparisonConfig {
  /** Time periods to compare */
  time_compare: string[];
  /** Comparison type */
  comparison_type?: 'values' | 'difference' | 'percentage' | 'ratio';
}

Forecasting Operations

Integration with forecasting algorithms:

/**
 * Forecasting configuration
 */
interface ForecastingConfig {
  /** Enable forecasting */
  forecastEnabled: boolean;
  /** Number of periods to forecast */
  forecastPeriods: number;
  /** Confidence interval percentage */
  forecastInterval: number;
  /** Seasonality patterns */
  forecastSeasonalityDaily?: null | boolean;
  forecastSeasonalityWeekly?: null | boolean;
  forecastSeasonalityYearly?: null | boolean;
}

Advanced Query Features

Rolling Window Operations

Support for rolling window calculations:

/**
 * Rolling window operation configuration
 */
interface RollingWindowConfig {
  /** Rolling window type */
  rolling_type: 'mean' | 'sum' | 'std' | 'count' | 'min' | 'max';
  /** Number of periods for rolling calculation */
  rolling_periods: number;
  /** Minimum periods required */
  min_periods?: number;
}

Contribution Calculations

Percentage contribution calculations:

/**
 * Contribution calculation types
 */
enum ContributionType {
  Absolute = null,
  Row = 'row',
  Column = 'column',
}

Series Limit and Ordering

Control over data series and ordering:

/**
 * Series configuration
 */
interface SeriesConfig {
  /** Maximum number of series to display */
  series_limit: number;
  /** Series limit metric for ranking */
  series_limit_metric?: QueryFormMetric;
  /** Order by configuration */
  orderby: QueryFormOrderBy[];
  /** Descending order flag */
  order_desc: boolean;
}

Time Range and Granularity

Time-specific query configuration:

/**
 * Time configuration for queries
 */
interface TimeConfig {
  /** Time range specification */
  time_range: string;
  /** Time granularity */
  time_grain_sqla: TimeGranularity;
  /** Time column override */
  granularity_sqla?: string;
  /** Time zone */
  time_zone?: string;
}

type TimeGranularity = 
  | 'PT1S'   // 1 second
  | 'PT1M'   // 1 minute
  | 'PT5M'   // 5 minutes
  | 'PT30M'  // 30 minutes
  | 'PT1H'   // 1 hour
  | 'P1D'    // 1 day
  | 'P1W'    // 1 week
  | 'P1M'    // 1 month
  | 'P1Y';   // 1 year

Query Optimization

Column Selection

Efficient column selection based on chart requirements:

  • Automatic inclusion of time columns for time series
  • Series columns for multi-series charts
  • Groupby columns for aggregation
  • Extra metrics for sorting and calculations

Data Filtering

Built-in support for various filter types:

  • Time range filters
  • Categorical filters
  • Numerical range filters
  • Custom SQL filters

Performance Optimization

Query optimization features:

  • Row Limiting: Automatic row limit application
  • Column Pruning: Only select necessary columns
  • Index Optimization: Proper ordering for database indexes
  • Caching: Query result caching support