过滤MDX层次结构,但是仍然显示完全离开 - Ragged Hierarchy?

时间:2013-07-30 09:16:24

标签: ssas mdx olap business-intelligence dimensional-modeling

以下查询

 SELECT
{  [Measures].[Comp Money In] } ON COLUMNS,
{ 
 (
  [Dim User].[UserLevel1].[UserLevel1].AllMembers * 
  [Dim User].[UserLevel2].[UserLevel2].AllMembers * 
  [Dim User].[UserLevel3].[UserLevel3].AllMembers * 
  [Dim User].[UserLevel4].[UserLevel4].AllMembers * 
  [Dim User].[UserLevel5].[UserLevel5].AllMembers   
 )
} ON ROWS
FROM   [Activities] 
WHERE ( [Dim User].[UserIdHierarchy].[UserLevel1Id].&[#513],
[Dim User].[UserTypeHierarchy].[UserTypeLevel1].&[Commercial Partner].&[Agent]  ) CELL Properties Value 

得出以下结果:

enter image description here

我的问题在于,由于我正在过滤[Dim User]。[UserTypeHierarchy],所显示的度量值仅为具有[商业伙伴]类型的度量值。& [Agent] 。我希望即使我显示用户树,显示的数字也会显示所有度量,就好像它就像后代一样([Hierarchy],0,self_and_after)。

我如何实现这一目标?我已尝试使用计算成员,但显示的数字并未聚合[Dim User]。[UserTypeHierarchy]层次结构下所有用户类型的后代。

为了更好地解释自己,下面的图片没有用户类型过滤器: enter image description here

所以我想要的结果,是第一张图片,我只显示用户类型商业伙伴的用户,但是第二张图片的数字,例如

  • 513将显示汇总后代的所有数字

  • 100310将显示聚集3级以下所有用户的所有数字

所以第四个。

2 个答案:

答案 0 :(得分:3)

[活动]多维数据集未正确设置。查询一个级别时,它应显示自身及其子级的值(例如“Country Shop 1”应显示19)。这应该是多维数据集中聚合规则的一部分。现在在多维数据集的父母中显示的值(例如,国家商店1€6)应显示在另一个自动创建的休息组中,作为每个父母的附加子项。

因此,这个多维数据集的简单MDX将是:

SELECT {
[Measures].[In]
} ON COLUMNS,
{
DESCENDANTS([Dim User].[UserTypeHierarchy].[UserTypeLevel1],0,SELF_AND_AFTER)
}
from [Activities]

将向所有地区,国家和商店显示正确的汇总值。

电贺 菲尔

答案 1 :(得分:0)

这是解决方案:

WITH 
    MEMBER [Measures].[Test] AS
        0
SELECT
    { 
         [Test]
    } ON 0, 
    NON EMPTY { 
        filter (
            {[dim user].[userhierarchy].[userlevel1].allmembers  }
            ,[dim user].[userhierarchy].currentmember.children.count > 1
        ),
        filter (
            {[dim user].[userhierarchy].[userlevel2].allmembers  }
            ,[dim user].[userhierarchy].currentmember.children.count > 1
        ),
        filter (
            {[dim user].[userhierarchy].[userlevel3].allmembers  }
            ,[dim user].[userhierarchy].currentmember.children.count > 1
        ),
        filter (
            {[dim user].[userhierarchy].[userlevel4].allmembers  }
            ,[dim user].[userhierarchy].currentmember.children.count > 1
        ),
        filter (
            {[dim user].[userhierarchy].[userlevel5].allmembers  }
            ,[dim user].[userhierarchy].currentmember.children.count > 1
        ),
        filter (
            {[dim user].[userhierarchy].[userlevel6].allmembers  }
            ,[dim user].[userhierarchy].currentmember.children.count > 1
        ),
        filter (
            {[dim user].[userhierarchy].[userlevel7].allmembers  }
            ,[dim user].[userhierarchy].currentmember.children.count > 1
        ),
        filter (
            {[dim user].[userhierarchy].[userlevel8].allmembers  }
            ,[dim user].[userhierarchy].currentmember.children.count > 1
        ),
        filter (
            {[dim user].[userhierarchy].[userlevel9].allmembers  }
            ,[dim user].[userhierarchy].currentmember.children.count > 1
        ),
        filter (
            {[dim user].[userhierarchy].[userlevel10].allmembers  }
            ,[dim user].[userhierarchy].currentmember.children.count > 1
        )
    } ON 1
FROM   [Activities]

我没有按父用户类型进行过滤,而是将那些子项数大于1的用户调出来。