Ssas 在挖掘成员时在多级层次结构上聚合值

Ssas 在挖掘成员时在多级层次结构上聚合值,ssas,mdx,hierarchy,Ssas,Mdx,Hierarchy,我有一个多维数据集,它包含一个多级管理器层次结构以及在时间维度上完成的工作单元。假设这是我正在处理的数据: 我试图通过MDX将重点放在一个特定的级别上,级别1,John Smith,并将最终用户和经理从层次结构中删除,并正确地汇总值 如上图所示,我们已经删除了Lisa Rice和Morgan Richardson的整个团队。预期结果将是两列,全名和工作单位 到目前为止,我提出的查询如下所示: WITH SET [MyCustomSet] AS EXCEPT( DESCENDANTS([H

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

我试图通过MDX将重点放在一个特定的级别上,级别1,John Smith,并将最终用户和经理从层次结构中删除,并正确地汇总值

如上图所示,我们已经删除了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表设置中,该表具有递归父关系,以正确显示层次结构


谁能帮我一把或给我指个方向吗?谢谢

我认为您希望将聚合更改为每个成员下方的聚合,而不是整个[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]
)
我会和一个朋友一起去;通过这种方式,您将能够仅选择要保留的[HR]成员,并使用可视默认行为与非可视模式,您将获得实际选定成员或维度中所有成员的聚合值:

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] )

更改此选项将聚合仍包含要排除的成员的集合的工作项总数。这就是为什么自定义集必须包含在这个计算中。啊,对不起,我误解了你的问题。那么,您想要一个自定义集合,并且希望每个级别的总数与您从自定义集合中保留或删除的成员一致吗?您尝试过子选择吗?啊,我完全忘记了子查询对于MDX来说还是相当新的。因此,我修改了查询,并确认子查询返回了正确的成员,但在整个查询中,排除的成员仍然包括在内。有什么想法吗?谢谢你的帮助!这可能取决于您的层次结构,以及您选择或排除的确切内容。请记住,子选择/子多维数据集将包括您选择的任何成员的所有上升点和后代-您告诉多维数据集要保留层次结构的哪些分支,而不是给出单个成员的简单列表。因此,如果您的子选择在层次结构的顶部/附近包含一个成员,您仍将获得其所有子成员;如果您的subselect只指定了一些子项,那么您将使他们的父母/上升者返回到层次结构的根,而不是他们的叔叔。感谢finango,这是我在子查询方面没有掌握的概念,MDX不允许在这种情况下选择特定成员,这是一个令人遗憾的问题。感谢您的建议,看起来子查询可能是findango建议的路径,但是except语句似乎没有过滤掉我需要排除的成员。此外,在尝试您的查询版本后,似乎无法在子查询中使用外部查询中命名的集。再次感谢你的意见。最后我自己解决了