使用基于集合中唯一的第一个属性更改的MDX获取运行总和

时间:2013-12-19 00:54:12

标签: mdx olap members

我有以下数据结构

age     range    sex    population_segment
1        0-4      1       100
2        0-4      1       100
3        0-4      1       100
4        0-4      1       100
5        5-9      1       150
6        5-9      1       150

我希望在第一个范围内获得运行总和,并且在集合中性别属性发生变化。 例如,对我来说,正确的答案是仅总结记录1和记录5(即250)。我的石斑鱼是范围和性别。

目前我的衡量标准只是对所有价值求和,给我错误的总和:750 我知道如何在标准SQL中执行此操作(此处发布以进行说明),但我需要MDX解决方案,计算成员。

示例sql:

WITH cte AS 
(
select 
*,
RowNum = row_number() over(partition by range, sex order by range, sex)
FROM myPopulationData
)
SELECT  SUM(population_segment) FROM  cte WHERE  RowNum = 1

1 个答案:

答案 0 :(得分:0)

这是一个可以通过多对多关系解决的案例:

  • 构建一个表/视图,其中包含范围和性别的唯一组合以及population_segment和主键列。这将用作包含population_segment度量的度量值组的事实表。它还将用作范围 - 性别组合的维度表。
  • 构建一个包含年龄的表/视图,用作年龄的维度表。
  • 构建包含年龄维度表的外键的桥接表/视图,以及第一个表中的一个。这将获得另一个度量组的基础,它只包含计数作为度量,您可能希望它不可见。
  • 在“维度用法”标签上,使用桥接度量值组将主要度量值组和年龄维度之间的关系设置为多对多关系。

设置好所有内容后,Analysis Services会自动处理所有计算逻辑。

除了范围 - 性别维度之外,如果您在年龄维度中保留范围和性别并且制作范围 - 性别维度(从第一个表格构建并从桥接表链接),则用户可用性问题看不见的,或者如果你把年龄保持在其他维度并且在另一个维度上。我个人更喜欢第一种选择,至少在范围内。