维度层次结构未显示所有数据

时间:2013-05-17 11:23:42

标签: ssas mdx business-intelligence

我有一个用户维度,代表许多商店的层次结构。例如,商店分为国家 - >地区 - >城镇/村庄 - >实际商店。因此,当您从层次结构的角度来看它时,它是Level1,Level2,Level3,Level4等。

现在奇怪的是,如果我在WHERE子句中按层次结构执行MDX查询和过滤,则对于特定用户,不会显示任何数据。但是,如果我执行完全相同的MDX而不是按层次结构过滤,而是按属性过滤,则会显示记录。

重要的是要提到用户层次结构[UserIdHierarchy]包含以下成员的层次结构

  1. [UserLevel1Id]
  2. [UserLevel2Id]
  3. [UserLevel3Id]
  4. [UserLevel4Id]
  5. [UserLevel5Id]
  6. 这两种情况应该返回完全相同的结果......

    使用用户层次结构过滤子句:

    where 
    (
        DESCENDANTS([Dim User].[UserIdHierarchy].&[#12345],0, self) 
    )
    

    没有用户层次结构的Where子句过滤:

    where 
    (
        DESCENDANTS([Dim User].[UserLevel3Id].&[#12345],0, self) 
    )
    

    为什么两个过滤器都没有为这个特定用户提供相同的数据?

1 个答案:

答案 0 :(得分:0)

原因是用户层次结构使用的是历史方法。因此,当用户具有多个层次结构(如下所示)时,由于某种奇怪的原因,MDX变得混乱并且站在维度层次结构中的第一个项目。下面,我将在注册到系统后显示用户的3种不同设置。解决我的问题,而不仅仅是做

[Dim User].[UserIdHierarchy].&[#12345]

我在where子句中过滤所有用户成员,即

{[Dim User].[UserIdHierarchy].[UserLevel1Id].&[#12345],
[Dim User].[UserIdHierarchy].[UserLevel2Id].&[#12345],
[Dim User].[UserIdHierarchy].[UserLevel3Id].&[#12345]}

然后对FACT数据进行实际过滤。这样,我包含用户层次结构中与我的用户匹配的所有成员的所有数据 - 在本例中为#12345。