我有一个多维数据集,其中包含多级管理器层次结构以及已在时间维度上完成的工作单元。让我们假设这是我正在使用的数据:
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表设置中,以正确显示层次结构。
任何人都可以伸出援助之手或指向正确的方向吗?谢谢!
答案 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] )