export declare namespace QueryAttributes {
    type Aggregate = string | 'none';
    type SortDirection = 'asc' | 'desc';
    type Measure = {
        field: Field;
        function: Aggregate;
        /**
         * @deprecated
         *
         * Do not worry about this field outside of the upcasting logic. You can rely on function being set.
         *
         * */
        aggregate?: string;
    };
    type Order = {
        field: Field;
        direction: SortDirection;
        function: Aggregate;
        /**
         * @deprecated
         *
         * Do not worry about this field outside of the upcasting logic. You can rely on function being set.
         *
         * */
        aggregate?: Aggregate;
    };
    type Operator = string;
    type Dimension = {
        field: string;
        function: string;
        pivot?: 'x' | 'y';
    };
    type Field = string;
    type Filter = {
        field: Field;
        op: Operator;
        value: any;
        function?: string;
    };
    type Limit = number;
    type AggregateMetricGroup = boolean;
    type Offset = number;
    namespace TimeDimension {
        type Truncate = string;
    }
    type TimeDimension = {
        field: Field;
        truncate: TimeDimension.Truncate;
        timeZone?: string;
        bucketFill?: boolean;
    };
}
export declare type SupportedOperator = {
    publicName: string;
    validDataTypes: Array<'number' | 'boolean' | 'string' | 'date_time' | 'string[]'>;
};
export declare type SupportedOperators = {
    [id: string]: SupportedOperator;
};
export declare type QueryAttributes = {
    dataSetId: string;
    measure: QueryAttributes.Measure[];
    dimension: QueryAttributes.Dimension[];
    order: QueryAttributes.Order[];
    timeDimension: QueryAttributes.TimeDimension | null;
    limit?: QueryAttributes.Limit;
    offset?: QueryAttributes.Offset;
    filter: QueryAttributes.Filter[][];
    aggregateMetricGroup?: QueryAttributes.AggregateMetricGroup;
};
