如何从MDX调用中排除某个成员,该调用获取更高级别成员的所有后代

时间:2008-09-29 14:20:23

标签: mdx

在我使用的OLAP数据库中,有一个“位置”层次结构,包含级别Company - >地区 - >面积 - >网站 - >房间。我正在使用以下MDX来获取公司级别的特定成员的所有后代。

DESCENDANTS([Location].[Test Company],[Location].[Site], SELF_AND_BEFORE)

我现在要求从报告中排除名为“Redundant”的特定区域。如何更改上面的MDX以排除此特定区域(及其所有后代)?我知道这个区域将被称为“冗余”,但我不想对任何其他区域名称进行硬编码,因为这些名称可能会发生变化。

2 个答案:

答案 0 :(得分:21)

EXCEPT功能将取一组,并删除您不想要的成员。在你的情况下,你需要说:

EXCEPT(
{DESCENDANTS([Location].[Test Company],[Location].[Site], SELF_AND_BEFORE)},
{DESCENDANTS([Location].[Whatever].[Redundant],[Location].[Site], SELF_AND_BEFORE)}
)

除了你在第二组中提到的内容之外,它为你提供了第一组中的所有内容。这样比较容易理解:

EXCEPT({the set i want}, {a set of members i dont want})

您不必担心第三个(可选)参数:http://msdn.microsoft.com/en-us/library/ms144900.aspx

答案 1 :(得分:0)

返回层次结构的成员时,只需使用" - "排除你不想要的成员。 这就是我排除未知成员的方式:

select
{[Module].[Hierarchy].[Module].Members - [Module].[Hierarchy].[Module].[Unknown]} on rows,
{[Date].[Month-day].[Day Of Month].Members - [Date].[Month-day].[Day Of Month].[Unknown]} on     columns
from [StatsView]
where {[Measures].[Maintainability Index]}