diff --git a/packages/cubejs-schema-compiler/src/compiler/CubeEvaluator.ts b/packages/cubejs-schema-compiler/src/compiler/CubeEvaluator.ts index 56dbd50f12d1c..14f3d8576b5b3 100644 --- a/packages/cubejs-schema-compiler/src/compiler/CubeEvaluator.ts +++ b/packages/cubejs-schema-compiler/src/compiler/CubeEvaluator.ts @@ -238,6 +238,11 @@ export class CubeEvaluator extends CubeSymbols { if (cube.isView && (cube.includedMembers || []).length) { const includedMemberPaths: string[] = R.uniq(cube.includedMembers.map(it => it.memberPath)); const includedCubeNames: string[] = R.uniq(includedMemberPaths.map(it => it.split('.')[0])); + // Path to name (which can be prefixed or aliased) map for hierarchy + const hierarchyPathToName = cube.includedMembers.filter(it => it.type === 'hierarchies').reduce((acc, it) => ({ + ...acc, + [it.memberPath]: it.name + }), {}); const includedHierarchyNames = cube.includedMembers.filter(it => it.type === 'hierarchies').map(it => it.memberPath.split('.')[1]); for (const cubeName of includedCubeNames) { @@ -260,8 +265,13 @@ export class CubeEvaluator extends CubeSymbols { return null; }).filter(Boolean); + const name = hierarchyPathToName[[cubeName, it.name].join('.')]; + if (!name) { + throw new UserError(`Hierarchy '${it.name}' not found in cube '${cubeName}'`); + } return { ...it, + name, levels }; }) diff --git a/packages/cubejs-schema-compiler/test/unit/hierarchies.test.ts b/packages/cubejs-schema-compiler/test/unit/hierarchies.test.ts index 0dd190bba8d2f..d49222de4a7ff 100644 --- a/packages/cubejs-schema-compiler/test/unit/hierarchies.test.ts +++ b/packages/cubejs-schema-compiler/test/unit/hierarchies.test.ts @@ -50,6 +50,10 @@ describe('Cube hierarchies', () => { (it) => it.config.name === 'all_hierarchy_view' ); expect(allHierarchyView.config.hierarchies.length).toBe(3); + + const prefixedHierarchy = allHierarchyView.config.hierarchies.find((it) => it.name === 'all_hierarchy_view.users_users_hierarchy'); + expect(prefixedHierarchy).toBeTruthy(); + expect(prefixedHierarchy?.levels).toEqual(['all_hierarchy_view.users_age', 'all_hierarchy_view.users_city']); }); it(('hierarchy with measure'), async () => {