使用MDX,有一种通用的方法可以计算出与特定层次结构中选定成员有关的单元格比率吗?

时间:2018-08-17 12:15:56

标签: ssas mdx analysisservices

我想在SSAS Analysis Services多维数据集(多维模型)中定义一个多维数据集度量,该度量计算用户对预定义层次结构所做选择的比率。下面的示例说明了所需的行为:

|-City----|---|
| Hamburg | 2 |
| Berlin  | 1 |
| Munich  | 3 |

这是我的基本表。我要实现的是一种基于用户选择来计算比率的多维数据集度量。例如。当用户查询Hamburg (2)Berlin (1)时,度量应返回值67%(对于Hamburg)和33%(对于Berlin)。但是,如果将Munich (3)添加到同一查询,则返回值为33%Hamburg),17%Berlin)和50%Munich)。无论MDX查询中包含多少个层次结构成员,这些值的总和应始终等于100%

到目前为止,我想出了不同的方法,但是它们似乎都遇到了相同的问题,即似乎不可能从一个单元内访问整个MDX查询的上下文。

我的第一种方法是采取以下措施:

[Measures].[Ratio] AS SUM([City].MEMBERS,[Measures].[Amount])/[Measures].[Amount]

这将汇总所有城市的数量,而不考虑用户的选择,尽管总会返回一个城市相对于整个城市等级的比率。

我还尝试通过添加EXISTING关键字将成员限制为查询上下文。

[Measures].[Ratio] AS SUM(EXISTING [City].MEMBERS,[Measures].[Amount])/[Measures].[Amount]

但这似乎将上下文限制为该单元格,这意味着我得到100%作为每个单元格的结果(因为EXISTING [City].MEMBERS现在被限制为一个单元格,它仅返回当前所在城市单元格。)

我还用Google搜索来确定是否可以添加总计的列或行,但在MDX内似乎也不可能。

与我最接近的是以下措施:

[Measures].[Ratio] AS SUM(Axis(1),[Measures].[Amount])/[Measures].[Amount]

与此MDX查询一起

SELECT {[Measures].[Ratio]} ON 0, {[City].[Hamburg],[City].[Berlin]} ON 1 FROM [Cube]

它将产生正确的结果。但是,这要求用户将针对此特定度量的正确层次结构放到特定轴上-容易出错,非常不直观,我不想这样做。

还有其他想法或方法可以帮助我定义此措施吗?

1 个答案:

答案 0 :(得分:0)

我首先要与选定的城市定义一个集合

[GeoSet] AS {[City].[Hamburg],[City].[Berlin]}

然后是比率

[Measures].[Ratio] AS [Measures].[Amount]/SUM([GeoSet],[Measures],[Amount])

获取该城市与城市集的比率。最后

SELECT [Measures].[Ratio] ON COLUMNS,
[GeoSet] ON ROWS
FROM [Cube]

只要选择城市列表,只要不选择2个重叠值([城市],[汉堡]和[地区]。例如[DE6]。