如何使用MDX在Cube中创建由两个维度拼接而成的新维度
实现跨维度成员组合的全新维度(MDX方案)
核心结论
直接用MDX公式无法创建独立的全新维度,但可以通过两种方式满足你的需求:
方法1:在Cube模型中创建预定义组合维度(推荐)
如果有权限修改Cube的数据源或维度设计,这是最优解:
- 在数据源中生成包含
PositionType和GeographyCluster所有笛卡尔积的视图(用SQL的CROSS JOIN即可实现) - 基于该视图创建新维度,将成员名称设置为
PositionType + ' - ' + GeographyCluster的拼接格式 - 重新处理Cube后,这个全新维度就能像原生维度一样被所有报表复用,性能和原生维度一致
方法2:用MDX查询动态生成组合(临时方案)
如果无法修改Cube模型,可在MDX查询中模拟组合维度的效果:
WITH -- 生成两个维度所有成员的交叉组合 SET [Position-Geography Combos] AS CrossJoin( [PositionType].[PositionType].Members, [GeographyCluster].[GeographyCluster].Members ) -- 定义拼接后的成员名称度量 MEMBER [Measures].[Combo Name] AS [PositionType].[PositionType].CurrentMember.Name + ' - ' + [GeographyCluster].[GeographyCluster].CurrentMember.Name SELECT [Measures].[Combo Name] ON 0, [Position-Geography Combos] ON 1 FROM [你的Cube名称]
- 该查询会输出两个维度所有成员的组合,并展示拼接后的名称
- 局限性:仅能在当前查询中使用,无法全局复用;若维度成员数量多,
CrossJoin会生成大量组合,可能影响查询性能
关键提醒
如果需要在多维数据集级别持久化这个组合维度,必须修改Cube的模型设计——MDX计算成员只能在现有维度内扩展,无法创建独立的全新维度。
内容的提问来源于stack exchange,提问作者Karlo Barac
相关产品推荐
相关产品推荐

