import { MetaInterface } from './dataset/meta.interface';
export interface CubePreAggregationInterface {
    type?: 'rollup' | 'original_sql' | 'rollup_join';
    measures?: Array<string>;
    dimensions?: Array<string>;
    segments?: Array<string>;
    timeDimension?: string;
    granularity?: string;
    rollups?: Array<string>;
    refreshKeySql?: string;
    refreshKeyEvery?: string;
    refreshKeyIncremental?: boolean;
    refreshKeyUpdateWindow?: string;
    lambdaAggregation?: boolean;
}
export interface CubePreAggregationsInterface {
    [key: string]: CubePreAggregationInterface;
}
export interface CubeDatasetInterface {
    id: string;
    dataSource: string;
    name: string;
    description: string;
    tenantId: string;
    parentId?: string;
    sql?: string;
    refreshSql?: string;
    meta?: MetaInterface;
    dimensions: CubeDimensionsInterface;
    segments?: CubeSegmentsInterface;
    relations?: CubeRelationsInterface;
    measures?: CubeMeasuresInterface;
    preAggregations?: CubePreAggregationsInterface;
}
export interface CubeDimensionsInterface {
    [key: string]: CubeDimensionInterface;
}
export interface CubeDimensionInterface {
    title: string;
    description: string;
    index?: boolean;
    upperIndex?: boolean;
    type: string;
    format?: string;
    primaryKey?: boolean;
    public?: boolean;
    subQuery?: boolean;
    sql?: string;
    case?: CubeDimensionCaseInterface;
    meta?: MetaInterface;
    granularities?: {
        [key: string]: {
            interval: string;
        };
    };
}
export interface CubeDimensionCaseInterface {
    when: Array<CubeDimensionCaseWhenInterface>;
    else: {
        label: string;
    };
}
export interface CubeDimensionCaseWhenInterface {
    label: string;
    sql: string;
}
export interface CubeRelationsInterface {
    [key: string]: CubeRelationInterface;
}
export interface CubeRelationInterface {
    relationship: string;
    sql: string;
}
export interface CubeSegmentsInterface {
    [key: string]: CubeSegmentInterface;
}
export interface CubeSegmentInterface {
    public: boolean;
    sql: string;
    title?: string;
    description?: string;
}
export interface CubeMeasuresInterface {
    [key: string]: CubeMeasureInterface;
}
export interface CubeMeasureInterface {
    title: string;
    description?: string;
    public?: boolean;
    type: string;
    format?: string;
    sql: string;
    meta?: MetaInterface;
}
