我想在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]
它将产生正确的结果。但是,这要求用户将针对此特定度量的正确层次结构放到特定轴上-容易出错,非常不直观,我不想这样做。
还有其他想法或方法可以帮助我定义此措施吗?
答案 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]。