@@ -192,6 +192,15 @@ type MemberSets = {
192192 allMembers : Set < string > ;
193193} ;
194194
195+ type ViewResolvedMember = {
196+ member : string ;
197+ name : string ;
198+ } ;
199+
200+ type ViewExcludedMember = {
201+ member : string ;
202+ } ;
203+
195204const FunctionRegex = / f u n c t i o n \s + \w + \( ( [ A - Z a - z 0 - 9 _ , ] * ) | \( ( [ \s \S ] * ?) \) \s * = > | \( ? ( \w + ) \) ? \s * = > / ;
196205export const CONTEXT_SYMBOLS = {
197206 SECURITY_CONTEXT : 'securityContext' ,
@@ -578,8 +587,10 @@ export class CubeSymbols implements TranspilerSymbolResolver {
578587
579588 const joinMap : string [ ] [ ] = [ ] ;
580589
590+ const viewAllMembers : ViewResolvedMember [ ] = [ ] ;
591+
581592 for ( const type of types ) {
582- let cubeIncludes : any [ ] = [ ] ;
593+ let cubeIncludes : ViewResolvedMember [ ] = [ ] ;
583594
584595 // If the hierarchy is included all members from it should be included as well
585596 // Extend `includes` with members from hierarchies that should be auto-included
@@ -610,6 +621,7 @@ export class CubeSymbols implements TranspilerSymbolResolver {
610621 } ) : includedCubes ;
611622
612623 cubeIncludes = this . membersFromCubes ( cube , cubes , type , errorReporter , splitViews , memberSets ) || [ ] ;
624+ viewAllMembers . push ( ...cubeIncludes ) ;
613625
614626 if ( type === 'hierarchies' ) {
615627 for ( const member of cubeIncludes ) {
@@ -627,7 +639,7 @@ export class CubeSymbols implements TranspilerSymbolResolver {
627639 }
628640 }
629641
630- const includeMembers = this . generateIncludeMembers ( cubeIncludes , type , cube ) ;
642+ const includeMembers = this . generateIncludeMembers ( cubeIncludes , type , cube , viewAllMembers ) ;
631643 this . applyIncludeMembers ( includeMembers , cube , type , errorReporter ) ;
632644
633645 const existing = cube . includedMembers ?? [ ] ;
@@ -677,8 +689,8 @@ export class CubeSymbols implements TranspilerSymbolResolver {
677689 errorReporter : ErrorReporter ,
678690 splitViews : SplitViews ,
679691 memberSets : MemberSets
680- ) {
681- const result : any [ ] = [ ] ;
692+ ) : ViewResolvedMember [ ] {
693+ const result : ViewResolvedMember [ ] = [ ] ;
682694 const seen = new Set < string > ( ) ;
683695
684696 for ( const cubeInclude of cubes ) {
@@ -776,7 +788,8 @@ export class CubeSymbols implements TranspilerSymbolResolver {
776788 splitViewDef = splitViews [ viewName ] ;
777789 }
778790
779- const includeMembers = this . generateIncludeMembers ( finalIncludes , type , splitViewDef ) ;
791+ const viewAllMembers : ViewResolvedMember [ ] = [ ] ;
792+ const includeMembers = this . generateIncludeMembers ( finalIncludes , type , splitViewDef , viewAllMembers ) ;
780793 this . applyIncludeMembers ( includeMembers , splitViewDef , type , errorReporter ) ;
781794 } else {
782795 for ( const member of finalIncludes ) {
@@ -792,7 +805,7 @@ export class CubeSymbols implements TranspilerSymbolResolver {
792805 return result ;
793806 }
794807
795- protected diffByMember ( includes : any [ ] , excludes : any [ ] ) {
808+ protected diffByMember ( includes : ViewResolvedMember [ ] , excludes : ViewExcludedMember [ ] ) {
796809 const excludesMap = new Map ( ) ;
797810
798811 for ( const exclude of excludes ) {
@@ -806,15 +819,7 @@ export class CubeSymbols implements TranspilerSymbolResolver {
806819 return this . symbols [ cubeName ] ?. cubeObj ( ) ?. [ type ] ?. [ memberName ] ;
807820 }
808821
809- protected generateIncludeMembers ( members : any [ ] , type : string , targetCube : CubeDefinitionExtended ) {
810- const availableDimMembers = new Set < string > ( ) ;
811-
812- if ( type === 'measures' ) {
813- Object . keys ( targetCube . dimensions || { } ) . forEach ( dimName => {
814- availableDimMembers . add ( `${ targetCube . name } .${ dimName } ` ) ;
815- } ) ;
816- }
817-
822+ protected generateIncludeMembers ( members : any [ ] , type : string , targetCube : CubeDefinitionExtended , viewAllMembers : ViewResolvedMember [ ] ) {
818823 return members . map ( memberRef => {
819824 const path = memberRef . member . split ( '.' ) ;
820825 const resolvedMember = this . getResolvedMember ( type , path [ path . length - 2 ] , path [ path . length - 1 ] ) ;
@@ -836,15 +841,16 @@ export class CubeSymbols implements TranspilerSymbolResolver {
836841
837842 const drillMembersArray = ( Array . isArray ( evaluatedDrillMembers )
838843 ? evaluatedDrillMembers
839- : [ evaluatedDrillMembers ] ) . map ( member => {
840- const memberParts = member . split ( '.' ) ;
841- if ( memberParts [ 0 ] === sourceCubeName ) {
842- return `${ targetCube . name } .${ memberParts [ 1 ] } ` ;
844+ : [ evaluatedDrillMembers ] ) ;
845+
846+ const filteredDrillMembers = drillMembersArray . flatMap ( member => {
847+ const found = viewAllMembers . find ( v => v . member . endsWith ( member ) ) ;
848+ if ( ! found ) {
849+ return [ ] ;
843850 }
844- return member ; // Keep as-is if not from source cube
845- } ) ;
846851
847- const filteredDrillMembers = drillMembersArray . filter ( member => availableDimMembers . has ( member ) ) ;
852+ return [ `${ targetCube . name } .${ found . name } ` ] ;
853+ } ) ;
848854
849855 processedDrillMembers = ( ) => filteredDrillMembers ;
850856 }
0 commit comments