@@ -3508,16 +3508,16 @@ export class BaseQuery {
35083508 }
35093509 }
35103510
3511- static findAndSubTreeForFilterGroup ( filter , groupMembers , newGroupFilter ) {
3511+ static findAndSubTreeForFilterGroup ( filter , groupMembers , newGroupFilter , aliases ) {
35123512 if ( ( filter . operator === 'and' || filter . operator === 'or' ) && ! filter . values ?. length ) {
35133513 return null ;
35143514 }
35153515 const filterMembers = BaseQuery . extractFilterMembers ( filter ) ;
3516- if ( filterMembers && Object . keys ( filterMembers ) . every ( m => groupMembers . indexOf ( m ) !== - 1 ) ) {
3516+ if ( filterMembers && Object . keys ( filterMembers ) . every ( m => ( groupMembers . indexOf ( m ) !== - 1 || aliases . indexOf ( m ) !== - 1 ) ) ) {
35173517 return filter ;
35183518 }
35193519 if ( filter . operator === 'and' ) {
3520- const result = filter . values . map ( f => BaseQuery . findAndSubTreeForFilterGroup ( f , groupMembers , newGroupFilter ) ) . filter ( f => ! ! f ) ;
3520+ const result = filter . values . map ( f => BaseQuery . findAndSubTreeForFilterGroup ( f , groupMembers , newGroupFilter , aliases ) ) . filter ( f => ! ! f ) ;
35213521 if ( ! result . length ) {
35223522 return null ;
35233523 }
@@ -3542,21 +3542,30 @@ export class BaseQuery {
35423542 ) ;
35433543 }
35443544
3545- static renderFilterParams ( filter , filterParamArgs , allocateParam , newGroupFilter ) {
3545+ static renderFilterParams ( filter , filterParamArgs , allocateParam , newGroupFilter , aliases ) {
35463546 if ( ! filter ) {
35473547 return '1 = 1' ;
35483548 }
35493549
35503550 if ( filter . operator === 'and' || filter . operator === 'or' ) {
35513551 const values = filter . values
3552- . map ( f => BaseQuery . renderFilterParams ( f , filterParamArgs , allocateParam , newGroupFilter ) )
3552+ . map ( f => BaseQuery . renderFilterParams ( f , filterParamArgs , allocateParam , newGroupFilter , aliases ) )
35533553 . map ( v => ( { filterToWhere : ( ) => v } ) ) ;
35543554
35553555 return newGroupFilter ( { operator : filter . operator , values } ) . filterToWhere ( ) ;
35563556 }
35573557
3558- const filterParams = filter && filter . filterParams ( ) ;
3559- const filterParamArg = filterParamArgs . filter ( p => p . __member ( ) === filter . measure || p . __member ( ) === filter . dimension ) [ 0 ] ;
3558+ const filterParams = filter . filterParams ( ) ;
3559+ const filterParamArg = filterParamArgs . filter ( p => {
3560+ const member = p . __member ( ) ;
3561+ return member === filter . measure ||
3562+ member === filter . dimension ||
3563+ ( aliases [ member ] && (
3564+ aliases [ member ] === filter . measure ||
3565+ aliases [ member ] === filter . dimension
3566+ ) ) ;
3567+ } ) [ 0 ] ;
3568+
35603569 if ( ! filterParamArg ) {
35613570 throw new Error ( `FILTER_PARAMS arg not found for ${ filter . measure || filter . dimension } ` ) ;
35623571 }
@@ -3589,15 +3598,21 @@ export class BaseQuery {
35893598 return f . __member ( ) ;
35903599 } ) ;
35913600
3592- const filter = BaseQuery . findAndSubTreeForFilterGroup ( newGroupFilter ( { operator : 'and' , values : allFilters } ) , groupMembers , newGroupFilter ) ;
3601+ const aliases = allFilters . map ( v => v . query . allBackAliasMembers ( ) ) . reduce ( ( a , b ) => ( { ...a , ...b } ) , { } ) ;
3602+ const filter = BaseQuery . findAndSubTreeForFilterGroup (
3603+ newGroupFilter ( { operator : 'and' , values : allFilters } ) ,
3604+ groupMembers ,
3605+ newGroupFilter ,
3606+ Object . values ( aliases )
3607+ ) ;
35933608
3594- return `(${ BaseQuery . renderFilterParams ( filter , filterParamArgs , allocateParam , newGroupFilter ) } )` ;
3609+ return `(${ BaseQuery . renderFilterParams ( filter , filterParamArgs , allocateParam , newGroupFilter , aliases ) } )` ;
35953610 } ;
35963611 }
35973612
35983613 static filterProxyFromAllFilters ( allFilters , cubeEvaluator , allocateParam , newGroupFilter ) {
35993614 return new Proxy ( { } , {
3600- get : ( target , name ) => {
3615+ get : ( _target , name ) => {
36013616 if ( name === '_objectWithResolvedProperties' ) {
36023617 return true ;
36033618 }
@@ -3614,12 +3629,15 @@ export class BaseQuery {
36143629 return cubeEvaluator . pathFromArray ( [ cubeNameObj . cube , propertyName ] ) ;
36153630 } ,
36163631 toString ( ) {
3632+ const aliases = allFilters . map ( v => ( v . query ? v . query . allBackAliasMembers ( ) : { } ) ) . reduce ( ( a , b ) => ( { ...a , ...b } ) , { } ) ;
36173633 const filter = BaseQuery . findAndSubTreeForFilterGroup (
36183634 newGroupFilter ( { operator : 'and' , values : allFilters } ) ,
36193635 [ cubeEvaluator . pathFromArray ( [ cubeNameObj . cube , propertyName ] ) ] ,
3620- newGroupFilter
3636+ newGroupFilter ,
3637+ Object . values ( aliases )
36213638 ) ;
3622- return `(${ BaseQuery . renderFilterParams ( filter , [ this ] , allocateParam , newGroupFilter ) } )` ;
3639+
3640+ return `(${ BaseQuery . renderFilterParams ( filter , [ this ] , allocateParam , newGroupFilter , aliases ) } )` ;
36233641 }
36243642 } )
36253643 } )
0 commit comments