在排除成员的同时在多级层次结构上聚合值

时间:2013-06-20 14:18:28

标签: ssas mdx hierarchy

我有一个多维数据集,其中包含多级管理器层次结构以及已在时间维度上完成的工作单元。让我们假设这是我正在使用的数据:

http://i.stack.imgur.com/eNP4L.png

我通过MDX尝试做的是关注特定级别(Level 1,John Smith)并从层次结构中删除个人(包括最终用户和经理)并正确汇总值。

http://i.stack.imgur.com/xW5CF.png

从上图中可以看出,我们已经删除了Lisa Rice和Morgan Richardson的整个团队。预期结果将是两列,全名和工作单位。

到目前为止我放在一起的查询看起来像这样:

WITH SET [MyCustomSet] AS EXCEPT(
    DESCENDANTS([HR].[Mgr Hierarchy].&[JSMITH],, SELF_AND_AFTER), 
    {DESCENDANTS([HR].[Mgr Hierarchy].&[MRICHARDSON],,SELF_AND_AFTER), DESCENDANTS([HR].[Mgr Hierarchy].&[LRICE],,SELF_AND_AFTER)}
)
MEMBER [Measures].[MyMeasure] AS Aggregate([MyCustomSet], [Measures].[#Work Units])
SELECT {
    [Measures].[MyMeasure]
} ON COLUMNS, 
NON EMPTY {
    [MyCustomSet]
} ON ROWS
FROM [MyCube]

但是这会返回我需要的成员列表,但每个成员的聚合值是所有成员的总和。当我删除计算出的度量并仅使用[Measures].[#Work Units]时,值表示不会删除成员的总汇总值,但成员不在列中。

此数据的最终主页将位于具有递归父关系的SSRS表设置中,以正确显示层次结构。

任何人都可以伸出援助之手或指向正确的方向吗?谢谢!

2 个答案:

答案 0 :(得分:1)

我认为您希望将Aggregate()更改为每个成员下方的聚合,而不是整个[MyCustomSet]。类似的东西:

MEMBER [Measures].[MyMeasure] AS 
    Aggregate([HR].[Mgr Hierarchy].CurrentMember, [Measures].[#Work Units])

编辑:如果您要查找要在每个父级别更改的聚合,可能您应该考虑使用子选择。

SELECT 
    [Measures].[#Work Units] ON COLUMNS, 
    NON EMPTY [HR].[Mgr Hierarchy].Members ON ROWS
FROM (
    SELECT EXCEPT(
        DESCENDANTS([HR].[Mgr Hierarchy].&[JSMITH],, SELF_AND_AFTER), 
        {DESCENDANTS([HR].[Mgr Hierarchy].&[MRICHARDSON],,SELF_AND_AFTER), DESCENDANTS([HR].[Mgr Hierarchy].&[LRICE],,SELF_AND_AFTER)}
        ON COLUMNS
    FROM [MyCube]
)

答案 1 :(得分:1)

我会选择sub-query;通过这种方式,您只能选择要保留的[HR]成员,并使用VISUAL(默认行为)和NON VISUAL模式,您将获得实际选定成员或所有成员的聚合值。维度:

WITH SET [MyCustomSet] AS EXCEPT(
    DESCENDANTS([HR].[Mgr Hierarchy].&[JSMITH],, SELF_AND_AFTER), 
    {DESCENDANTS([HR].[Mgr Hierarchy].&[MRICHARDSON],,SELF_AND_AFTER), DESCENDANTS([HR].[Mgr Hierarchy].&[LRICE],,SELF_AND_AFTER)}
)

SELECT
    [Measures].[#Work Units] ON 0, NON EMPTY [MyCustomSet] ON 1
FROM ( select [MyCustomSet] on 0 from [MyCube] )