@@ -266,13 +266,15 @@ export class PreAggregations {
266266 }
267267
268268 static transformQueryToCanUseForm ( query ) {
269- const sortedDimensions = this . squashDimensions ( query ) ;
269+ const flattenDimensionMembers = this . flattenDimensionMembers ( query ) ;
270+ const sortedDimensions = this . squashDimensions ( query , flattenDimensionMembers ) ;
271+ const aliasedToFirstNonAliasedDimension = this . aliasedToFirstNonAliasedDimension ( query , flattenDimensionMembers ) ;
270272 const measures = query . measures . concat ( query . measureFilters ) ;
271- const measurePaths = R . uniq ( measures . map ( m => m . measure ) ) ;
273+ const measurePaths = R . uniq ( PreAggregations . firstNonAliasMember ( query , measures ) ) ;
272274 const collectLeafMeasures = query . collectLeafMeasures . bind ( query ) ;
273- const dimensionsList = query . dimensions . map ( dim => dim . dimension ) ;
274- const segmentsList = query . segments . map ( s => s . segment ) ;
275- const ownedDimensions = PreAggregations . ownedMembers ( query , PreAggregations . concatDimensionMembers ( query ) ) ;
275+ const dimensionsList = PreAggregations . firstNonAliasMember ( query , query . dimensions ) ;
276+ const segmentsList = PreAggregations . firstNonAliasMember ( query , query . segments ) ;
277+ const ownedDimensions = PreAggregations . ownedMembers ( query , flattenDimensionMembers ) ;
276278 const ownedTimeDimensions = query . timeDimensions . map ( td => {
277279 const owned = PreAggregations . ownedMembers ( query , [ td ] ) ;
278280 let { dimension } = td ;
@@ -288,6 +290,19 @@ export class PreAggregations {
288290 } ) ;
289291 } ) . map ( d => query . newTimeDimension ( d ) ) ;
290292
293+ const firstNonAliasTimeDimensions = query . timeDimensions . map ( td => {
294+ const nonAlias = PreAggregations . firstNonAliasMember ( query , [ td ] ) ;
295+ let { dimension } = td ;
296+ if ( nonAlias . length === 1 ) {
297+ [ dimension ] = nonAlias ;
298+ }
299+ return query . newTimeDimension ( {
300+ dimension,
301+ dateRange : td . dateRange ,
302+ granularity : td . granularity ,
303+ } ) ;
304+ } ) . map ( d => query . newTimeDimension ( d ) ) ;
305+
291306 const measureToLeafMeasures = { } ;
292307
293308 const leafMeasurePaths =
@@ -319,16 +334,18 @@ export class PreAggregations {
319334 return true ;
320335 }
321336
322- const sortedTimeDimensions = PreAggregations . sortTimeDimensionsWithRollupGranularity ( query . timeDimensions ) ;
323- const timeDimensions = PreAggregations . timeDimensionsAsIs ( query . timeDimensions ) ;
337+ const sortedTimeDimensions = PreAggregations . sortTimeDimensionsWithRollupGranularity ( firstNonAliasTimeDimensions ) ;
338+ const timeDimensions = PreAggregations . timeDimensionsAsIs ( firstNonAliasTimeDimensions ) ;
324339 const ownedTimeDimensionsWithRollupGranularity = PreAggregations . sortTimeDimensionsWithRollupGranularity ( ownedTimeDimensions ) ;
325340 const ownedTimeDimensionsAsIs = PreAggregations . timeDimensionsAsIs ( ownedTimeDimensions ) ;
326341
327342 const hasNoTimeDimensionsWithoutGranularity = ! query . timeDimensions . filter ( d => ! d . granularity ) . length ;
328343
329344 const allFiltersWithinSelectedDimensions =
330345 R . all ( d => dimensionsList . indexOf ( d ) !== - 1 ) (
331- query . filters . map ( f => f . dimension )
346+ R . flatten (
347+ query . filters . map ( f => f . getMembers ( ) )
348+ ) . map ( f => PreAggregations . firstNonAliasMember ( query , [ f ] ) [ 0 ] )
332349 ) ;
333350
334351 const isAdditive = R . all ( m => m . isAdditive ( ) , query . measures ) ;
@@ -345,7 +362,8 @@ export class PreAggregations {
345362
346363 let filterDimensionsSingleValueEqual = this . collectFilterDimensionsWithSingleValueEqual (
347364 query . filters ,
348- dimensionsList . concat ( segmentsList ) . reduce ( ( map , d ) => map . set ( d , 1 ) , new Map ( ) )
365+ dimensionsList . concat ( segmentsList ) . reduce ( ( map , d ) => map . set ( d , 1 ) , new Map ( ) ) ,
366+ aliasedToFirstNonAliasedDimension
349367 ) ;
350368
351369 filterDimensionsSingleValueEqual =
@@ -381,6 +399,14 @@ export class PreAggregations {
381399 ) ;
382400 }
383401
402+ static firstNonAliasMember ( query , members ) {
403+ return members . map (
404+ member => query
405+ . collectFrom ( [ member ] , query . collectMemberNamesFor . bind ( query ) , 'collectMemberNamesFor' )
406+ . find ( d => ! query . cubeEvaluator . byPathAnyType ( d ) . aliasMember )
407+ ) ;
408+ }
409+
384410 static sortTimeDimensionsWithRollupGranularity ( timeDimensions ) {
385411 return timeDimensions && R . sortBy (
386412 R . prop ( 0 ) ,
@@ -395,13 +421,14 @@ export class PreAggregations {
395421 ) || [ ] ;
396422 }
397423
398- static collectFilterDimensionsWithSingleValueEqual ( filters , map ) {
424+ static collectFilterDimensionsWithSingleValueEqual ( filters , map , aliasedToFirstNonAliasedDimension ) {
399425 // eslint-disable-next-line no-restricted-syntax
400426 for ( const f of filters ) {
401427 if ( f . operator === 'equals' ) {
402- map . set ( f . dimension , Math . min ( map . get ( f . dimension ) || 2 , f . values . length ) ) ;
428+ const nonAliasedDimension = aliasedToFirstNonAliasedDimension [ f . dimension ] || f . dimension ;
429+ map . set ( nonAliasedDimension , Math . min ( map . get ( nonAliasedDimension ) || 2 , f . values . length ) ) ;
403430 } else if ( f . operator === 'and' ) {
404- const res = this . collectFilterDimensionsWithSingleValueEqual ( f . values , map ) ;
431+ const res = this . collectFilterDimensionsWithSingleValueEqual ( f . values , map , aliasedToFirstNonAliasedDimension ) ;
405432 if ( res == null ) return null ;
406433 } else {
407434 return null ;
@@ -632,14 +659,29 @@ export class PreAggregations {
632659 }
633660 }
634661
635- static squashDimensions ( query ) {
662+ static squashDimensions ( query , flattenDimensionMembers ) {
636663 return R . pipe ( R . uniq , R . sortBy ( R . identity ) ) (
637- query . dimensions . concat ( query . filters ) . map ( d => d . dimension ) . concat ( query . segments . map ( s => s . segment ) )
664+ PreAggregations . firstNonAliasMember (
665+ query ,
666+ flattenDimensionMembers
667+ )
638668 ) ;
639669 }
640670
641- static concatDimensionMembers ( query ) {
642- return query . dimensions . concat ( query . filters ) . concat ( query . segments ) ;
671+ static aliasedToFirstNonAliasedDimension ( query , flattenDimensionMembers ) {
672+ return flattenDimensionMembers
673+ . map ( member => (
674+ { [ member . dimension ] : PreAggregations . firstNonAliasMember ( query , [ member ] ) [ 0 ] }
675+ ) ) ;
676+ }
677+
678+ static flattenDimensionMembers ( query ) {
679+ return R . flatten (
680+ query . dimensions
681+ . concat ( query . filters )
682+ . concat ( query . segments )
683+ . map ( m => m . getMembers ( ) ) ,
684+ ) ;
643685 }
644686
645687 // eslint-disable-next-line no-unused-vars
0 commit comments