diff --git a/packages/cubejs-schema-compiler/src/adapter/BaseMeasure.ts b/packages/cubejs-schema-compiler/src/adapter/BaseMeasure.ts index 141e4918975df..9a050a3c9c6ab 100644 --- a/packages/cubejs-schema-compiler/src/adapter/BaseMeasure.ts +++ b/packages/cubejs-schema-compiler/src/adapter/BaseMeasure.ts @@ -146,6 +146,10 @@ export class BaseMeasure { return this.query.runningTotalDateJoinCondition(); } const { rollingWindow } = definition; + if (rollingWindow.type === 'to_date') { + return this.query.rollingWindowToDateJoinCondition(rollingWindow.granularity); + } + // TODO deprecated if (rollingWindow.type === 'year_to_date' || rollingWindow.type === 'quarter_to_date' || rollingWindow.type === 'month_to_date') { return this.query.rollingWindowToDateJoinCondition(rollingWindow.type.replace('_to_date', '')); } diff --git a/packages/cubejs-schema-compiler/src/compiler/CubeValidator.ts b/packages/cubejs-schema-compiler/src/compiler/CubeValidator.ts index f97fc1dd99818..c48825440006e 100644 --- a/packages/cubejs-schema-compiler/src/compiler/CubeValidator.ts +++ b/packages/cubejs-schema-compiler/src/compiler/CubeValidator.ts @@ -116,6 +116,8 @@ const FixedRollingWindow = { offset: Joi.any().valid('start', 'end') }; +const GranularitySchema = Joi.string().valid('second', 'minute', 'hour', 'day', 'week', 'month', 'quarter', 'year').required(); + const YearToDate = { type: Joi.string().valid('year_to_date'), }; @@ -128,6 +130,11 @@ const MonthToDate = { type: Joi.string().valid('month_to_date'), }; +const ToDate = { + type: Joi.string().valid('to_date'), + granularity: GranularitySchema, +}; + const BaseMeasure = { aliases: Joi.array().items(Joi.string()), format: Joi.any().valid('percent', 'currency', 'number'), @@ -149,6 +156,7 @@ const BaseMeasure = { { is: 'year_to_date', then: YearToDate }, { is: 'quarter_to_date', then: QuarterToDate }, { is: 'month_to_date', then: MonthToDate }, + { is: 'to_date', then: ToDate }, { is: 'fixed', then: FixedRollingWindow, otherwise: FixedRollingWindow @@ -277,8 +285,6 @@ const OriginalSqlSchema = condition( }), ); -const GranularitySchema = Joi.string().valid('second', 'minute', 'hour', 'day', 'week', 'month', 'quarter', 'year').required(); - const ReferencesFields = ['timeDimensionReference', 'rollupReferences', 'measureReferences', 'dimensionReferences', 'segmentReferences']; const NonReferencesFields = ['timeDimension', 'timeDimensions', 'rollups', 'measures', 'dimensions', 'segments']; diff --git a/packages/cubejs-schema-compiler/test/integration/postgres/sql-generation.test.ts b/packages/cubejs-schema-compiler/test/integration/postgres/sql-generation.test.ts index 0d5bf28bbc094..c890a9dd4de6c 100644 --- a/packages/cubejs-schema-compiler/test/integration/postgres/sql-generation.test.ts +++ b/packages/cubejs-schema-compiler/test/integration/postgres/sql-generation.test.ts @@ -83,7 +83,8 @@ describe('SQL Generation', () => { type: 'sum', sql: 'amount', rollingWindow: { - type: 'quarter_to_date' + type: 'to_date', + granularity: 'quarter' } }, revenue_day_ago: {