/** * Chainable query builder. * * Usage: * query('orders') * .dimensions(['customer_segment', 'order_date']) * .metrics(['total_revenue', 'order_count']) * .filters([{ field: 'order_date', operator: 'inThePast', value: 90, unit: 'days' }]) * .metricFilters([{ field: 'total_revenue', operator: 'greaterThan', value: 1000 }]) * .sorts([{ field: 'total_revenue', direction: 'desc' }]) * .limit(100) * * The builder is immutable -- each method returns a new instance. */ import type { AdditionalMetric, CustomDimension, Filter, InternalFilterDefinition, ParametersValuesMap, QueryDefinition, Sort, TableCalculation } from './types'; type BuilderState = { explore: string; dimensions: string[]; metrics: string[]; filters: InternalFilterDefinition[]; metricFilters: InternalFilterDefinition[]; sorts: { fieldId: string; descending: boolean; }[]; tableCalculations: TableCalculation[]; additionalMetrics: AdditionalMetric[]; customDimensions: CustomDimension[]; limit: number; parameters: ParametersValuesMap; label: string | undefined; }; /** * Create a query builder for a model. * * Usage: * query('orders') * .dimensions(['customer_segment']) * .metrics(['total_revenue']) * .limit(100) */ export declare function query(modelName: string): QueryBuilder; export declare class QueryBuilder { private readonly _state; constructor(explore: string); constructor(state: BuilderState); private _clone; /** Human-readable label for dev tools / query inspector */ label(name: string): QueryBuilder; /** Set dimension fields (GROUP BY columns) */ dimensions(fields: string[]): QueryBuilder; /** Set metric fields (aggregations) */ metrics(fields: string[]): QueryBuilder; /** Add dimension (WHERE) filters */ filters(filters: Filter[]): QueryBuilder; /** Add metric (HAVING) filters. The metrics do not need to be selected. */ metricFilters(filters: Filter[]): QueryBuilder; /** Add sorts */ sorts(sorts: Sort[]): QueryBuilder; /** Add table calculations (computed columns evaluated after the query) */ tableCalculations(calcs: TableCalculation[]): QueryBuilder; /** * Add additional metrics (ad-hoc aggregations defined at query time). * Use this for metrics on joined tables or custom aggregations not in the YAML. */ additionalMetrics(metrics: AdditionalMetric[]): QueryBuilder; /** * Add custom dimensions (ad-hoc dimensions defined at query time). */ customDimensions(dims: CustomDimension[]): QueryBuilder; /** * Set Lightdash parameter values (`${lightdash.parameters.X}` substitutions). * Merges with any values from prior `.parameters()` calls — later keys win. * * Parameters must be declared in `lightdash.yml` / model YAML and referenced * via `${lightdash.parameters.X}` in SQL. */ parameters(map: ParametersValuesMap): QueryBuilder; /** Set the maximum number of rows to return (default: 500) */ limit(n: number): QueryBuilder; /** Convert to a plain QueryDefinition object */ build(): QueryDefinition; } export {};