在我的SSAS解决方案中,有一个“位置”层次结构,包含级别公司 - >地区 - >区域
-All
-Company1
-Region11
-Region12
-Company2
-Region21
-Region22
-Company3
-Region31
-Region32
我有使用此维度层次结构作为数据源的报表过滤器。我要求从报告过滤器中排除特定公司,例如“Company2”。
我正在使用 EXCEPT 和 DESCENDANTS MDX函数从集合中排除此特定成员及其子元素。但是,我丢失了ALL级别(层次结构中的最高级别),返回的集合如下所示:
-Company1
-Region11
-Region12
-Company3
-Region31
-Region32
如何保留ALL会员?我需要将Company1和Company3分组到更高的级别。
答案 0 :(得分:1)
Except功能应该有效。您正在使用的MDX是什么?
答案 1 :(得分:1)
可能与使用DESCENDANTS
有关。如果我没记错的话,所有人实际上都是一个级别,也就是一个成员 - 一个单一的成员级别 - 因此,如果你使用DESCENDANTS
,那么排除更高的所有级别可能是有道理的。
On Adventure会工作,那么它会从以下结果集中排除,而不会丢失All Customers
成员:
SELECT
{} ON 0,
EXCEPT(
[Customer].[Customer Geography].ALLMEMBERS,
{[Customer].[Customer Geography].[Country].&[Australia]}
) ON 1
FROM [Adventure Works]
跟进ic3的评论
后代(除())而不是except(descendants())
以下示例保留了成员All Geographies
,但加拿大及其后代被排除在外:
SELECT
{} on 0,
EXCEPT(
DESCENDANTS(
[Geography].[Geography].[All Geographies],
[Geography].[Geography].[State-Province],
SELF_AND_BEFORE
),
DESCENDANTS(
[Geography].[Geography].[Country].[Canada],
[Geography].[Geography].[State-Province],
SELF_AND_BEFORE
)
)
ON 1
FROM [Adventure Works]