diff --git a/packages/cubejs-schema-compiler/src/adapter/BaseQuery.js b/packages/cubejs-schema-compiler/src/adapter/BaseQuery.js index 41cdbf3020517..6c53412570bd1 100644 --- a/packages/cubejs-schema-compiler/src/adapter/BaseQuery.js +++ b/packages/cubejs-schema-compiler/src/adapter/BaseQuery.js @@ -2191,9 +2191,13 @@ export class BaseQuery { let index; - index = this.dimensionsForSelect().findIndex( - d => equalIgnoreCase(d.dimension, id) || equalIgnoreCase(d.expressionName, id) - ); + index = this.dimensionsForSelect() + // Not all time dimensions are used in select list, some are just filters, + // but they exist in this.timeDimensions, so need to filter them out + .filter(d => d.selectColumns()) + .findIndex( + d => equalIgnoreCase(d.dimension, id) || equalIgnoreCase(d.expressionName, id) + ); if (index > -1) { return index + 1; diff --git a/packages/cubejs-schema-compiler/test/unit/base-query.test.ts b/packages/cubejs-schema-compiler/test/unit/base-query.test.ts index 6a4752d600765..b1c2c27ccb0a5 100644 --- a/packages/cubejs-schema-compiler/test/unit/base-query.test.ts +++ b/packages/cubejs-schema-compiler/test/unit/base-query.test.ts @@ -5,6 +5,7 @@ import { createCubeSchema, createCubeSchemaWithCustomGranularities, createCubeSchemaYaml, + createECommerceSchema, createJoinedCubesSchema, createSchemaYaml, createSchemaYamlForGroupFilterParamsTests @@ -360,6 +361,62 @@ describe('SQL Generation', () => { const expectedParams = ['type_value', 'not_type_value', '3']; expect(queryAndParams[1]).toEqual(expectedParams); }); + + it('Simple query - order by for query with filtered timeDimension', async () => { + const compilersLocal = prepareYamlCompiler( + createSchemaYaml(createECommerceSchema()) + ); + + await compilersLocal.compiler.compile(); + + let query = new PostgresQuery(compilersLocal, { + measures: [ + 'orders.count' + ], + timeDimensions: [ + { + dimension: 'orders.updated_at', + granularity: 'week' + }, + { + dimension: 'orders.created_at', + dateRange: [ + '2016-01-01', + '2018-01-01' + ] + }, + ], + order: [{ id: 'orders.updated_at', desc: false }], + }); + + let queryAndParams = query.buildSqlAndParams(); + expect(queryAndParams[0].includes('ORDER BY 1')).toBeTruthy(); + + // The order of time dimensions should have no effect on the `ORDER BY` clause + + query = new PostgresQuery(compilersLocal, { + measures: [ + 'orders.count' + ], + timeDimensions: [ + { + dimension: 'orders.created_at', + dateRange: [ + '2016-01-01', + '2018-01-01' + ] + }, + { + dimension: 'orders.updated_at', + granularity: 'week' + } + ], + order: [{ id: 'orders.updated_at', desc: false }], + }); + + queryAndParams = query.buildSqlAndParams(); + expect(queryAndParams[0].includes('ORDER BY 1')).toBeTruthy(); + }); }); describe('Custom granularities', () => {