0

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

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

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

到目前为止,我提出了不同的措施,但它们似乎都遇到了相同的问题,即似乎无法从单元格内访问整个 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现在仅限于一个单元格,它只返回当前单元格的城市)。

我还搜索了一下是否可以添加带有总计的列或行,但这在 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]

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

是否有任何其他想法或方法可以帮助我定义此度量?

4

1 回答 1

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]

每当您选择城市列表时,将 [GeoSet] 更改为城市列表或层次结构中的其他级别,只要您不选择 2 个重叠值([City].[Hamburg] 和 [Region]. [DE6],例如)。

于 2018-08-22T23:18:01.880 回答