@@ -185,6 +185,15 @@ type MemberSets = {
185185 allMembers : Set < string > ;
186186} ;
187187
188+ type ViewResolvedMember = {
189+ member : string ;
190+ name : string ;
191+ } ;
192+
193+ type ViewExcludedMember = {
194+ member : string ;
195+ } ;
196+
188197const FunctionRegex = / f u n c t i o n \s + \w + \( ( [ A - Z a - z 0 - 9 _ , ] * ) | \( ( [ \s \S ] * ?) \) \s * = > | \( ? ( \w + ) \) ? \s * = > / ;
189198export const CONTEXT_SYMBOLS = {
190199 SECURITY_CONTEXT : 'securityContext' ,
@@ -569,8 +578,10 @@ export class CubeSymbols implements TranspilerSymbolResolver {
569578 // because drillMembers processing for views in generateIncludeMembers() relies on this
570579 const types = [ 'hierarchies' , 'dimensions' , 'measures' , 'segments' ] ;
571580
581+ const viewAllMembers : ViewResolvedMember [ ] = [ ] ;
582+
572583 for ( const type of types ) {
573- let cubeIncludes : any [ ] = [ ] ;
584+ let cubeIncludes : ViewResolvedMember [ ] = [ ] ;
574585
575586 // If the hierarchy is included all members from it should be included as well
576587 // Extend `includes` with members from hierarchies that should be auto-included
@@ -596,6 +607,7 @@ export class CubeSymbols implements TranspilerSymbolResolver {
596607 } ) : includedCubes ;
597608
598609 cubeIncludes = this . membersFromCubes ( cube , cubes , type , errorReporter , splitViews , memberSets ) || [ ] ;
610+ viewAllMembers . push ( ...cubeIncludes ) ;
599611
600612 if ( type === 'hierarchies' ) {
601613 for ( const member of cubeIncludes ) {
@@ -613,7 +625,7 @@ export class CubeSymbols implements TranspilerSymbolResolver {
613625 }
614626 }
615627
616- const includeMembers = this . generateIncludeMembers ( cubeIncludes , type , cube ) ;
628+ const includeMembers = this . generateIncludeMembers ( cubeIncludes , type , cube , viewAllMembers ) ;
617629 this . applyIncludeMembers ( includeMembers , cube , type , errorReporter ) ;
618630
619631 const existing = cube . includedMembers ?? [ ] ;
@@ -665,8 +677,8 @@ export class CubeSymbols implements TranspilerSymbolResolver {
665677 errorReporter : ErrorReporter ,
666678 splitViews : SplitViews ,
667679 memberSets : MemberSets
668- ) {
669- const result : any [ ] = [ ] ;
680+ ) : ViewResolvedMember [ ] {
681+ const result : ViewResolvedMember [ ] = [ ] ;
670682 const seen = new Set < string > ( ) ;
671683
672684 for ( const cubeInclude of cubes ) {
@@ -764,7 +776,8 @@ export class CubeSymbols implements TranspilerSymbolResolver {
764776 splitViewDef = splitViews [ viewName ] ;
765777 }
766778
767- const includeMembers = this . generateIncludeMembers ( finalIncludes , type , splitViewDef ) ;
779+ const viewAllMembers : ViewResolvedMember [ ] = [ ] ;
780+ const includeMembers = this . generateIncludeMembers ( finalIncludes , type , splitViewDef , viewAllMembers ) ;
768781 this . applyIncludeMembers ( includeMembers , splitViewDef , type , errorReporter ) ;
769782 } else {
770783 for ( const member of finalIncludes ) {
@@ -780,7 +793,7 @@ export class CubeSymbols implements TranspilerSymbolResolver {
780793 return result ;
781794 }
782795
783- protected diffByMember ( includes : any [ ] , excludes : any [ ] ) {
796+ protected diffByMember ( includes : ViewResolvedMember [ ] , excludes : ViewExcludedMember [ ] ) {
784797 const excludesMap = new Map ( ) ;
785798
786799 for ( const exclude of excludes ) {
@@ -794,15 +807,7 @@ export class CubeSymbols implements TranspilerSymbolResolver {
794807 return this . symbols [ cubeName ] ?. cubeObj ( ) ?. [ type ] ?. [ memberName ] ;
795808 }
796809
797- protected generateIncludeMembers ( members : any [ ] , type : string , targetCube : CubeDefinitionExtended ) {
798- const availableDimMembers = new Set < string > ( ) ;
799-
800- if ( type === 'measures' ) {
801- Object . keys ( targetCube . dimensions || { } ) . forEach ( dimName => {
802- availableDimMembers . add ( `${ targetCube . name } .${ dimName } ` ) ;
803- } ) ;
804- }
805-
810+ protected generateIncludeMembers ( members : any [ ] , type : string , targetCube : CubeDefinitionExtended , viewAllMembers : ViewResolvedMember [ ] ) {
806811 return members . map ( memberRef => {
807812 const path = memberRef . member . split ( '.' ) ;
808813 const resolvedMember = this . getResolvedMember ( type , path [ path . length - 2 ] , path [ path . length - 1 ] ) ;
@@ -824,15 +829,16 @@ export class CubeSymbols implements TranspilerSymbolResolver {
824829
825830 const drillMembersArray = ( Array . isArray ( evaluatedDrillMembers )
826831 ? evaluatedDrillMembers
827- : [ evaluatedDrillMembers ] ) . map ( member => {
828- const memberParts = member . split ( '.' ) ;
829- if ( memberParts [ 0 ] === sourceCubeName ) {
830- return `${ targetCube . name } .${ memberParts [ 1 ] } ` ;
832+ : [ evaluatedDrillMembers ] ) ;
833+
834+ const filteredDrillMembers = drillMembersArray . flatMap ( member => {
835+ const found = viewAllMembers . find ( v => v . member . endsWith ( member ) ) ;
836+ if ( ! found ) {
837+ return [ ] ;
831838 }
832- return member ; // Keep as-is if not from source cube
833- } ) ;
834839
835- const filteredDrillMembers = drillMembersArray . filter ( member => availableDimMembers . has ( member ) ) ;
840+ return [ `${ targetCube . name } .${ found . name } ` ] ;
841+ } ) ;
836842
837843 processedDrillMembers = ( ) => filteredDrillMembers ;
838844 }
0 commit comments