如何使用Dimension过滤Fact?

时间:2014-01-05 06:19:56

标签: sql sql-server-2008-r2 ssas mdx

我使用SSASSQL Server 2008 R2

我写这个查询并且有效:

SELECT 
 [Measures].[Circulation Count] 
    ON COLUMNS 
FROM [Store]
where [Circulation Kind].[Circulation Code].&[1]

结果是:362154.2154

但是当我使用Filter函数时,我的结果是空的。

SELECT 
Filter(
    [Measures].[Circulation Count] 
         ,
    [Circulation Kind].[Circulation Code]
    = 
    [Circulation Kind].[Circulation Code].&[1]
)
    ON COLUMNS 
FROM [Store]

如何使用Filter功能过滤我的结果?

2 个答案:

答案 0 :(得分:1)

Filter表达式的作用是:

  • 从包含度量[Measures].[Circulation Count]
  • 的一个元素集开始
  • 然后,从此设置中保留(=过滤)[Circulation Kind].[Circulation Code]与{的相同的元素(=度量) {1}}。比较属性和成员会触发隐式类型转换以使两者具有相同的类型,在这种情况下,通过隐式应用[Circulation Kind].[Circulation Code].&[1]方法将属性转换为成员。这意味着您将默认成员(通常是DefaultMember成员)的值与具有键All的成员的值进行比较。并且,假设此属性中有多个成员,则可能始终为false。

请注意,1会比较双方的,在这种情况下,上下文会将度量设置为=Circulation Count的值。如果您想比较会员身份,则必须使用Circulation Count代替IS

这对你的陈述意味着什么?我不确定你为什么不想使用=子句,但正如@mmarie所说,你可以将WHERE[Circulation Code]轴移动到行轴:

WHERE

如果你真的想要使用SELECT [Measures].[Circulation Count] ON COLUMNS, [Circulation Kind].[Circulation Code].&[1] ON ROWS FROM [Store] ,你可以使用:

Filter

请注意使用SELECT [Measures].[Circulation Count] ON COLUMNS, Filter([Circulation Kind].[Circulation Code].Members as c, c.Current IS [Circulation Kind].[Circulation Code].&[1] ) ON ROWS FROM [Store] 将属性显式转换为其成员集,并在最后一个语句中使用.Members,而不是IS

答案 1 :(得分:0)

与@FrankPI沟通后,我非常喜欢:

With 
    Member X As 
       ( 
          [Measures].[Circulation Count] , 
          (
              [Circulation Kind].[Circulation Code].&[1]
          ) 
       )

Select 
    X On Columns
From <>

在这种方法中,我可以使用measure过滤我的dimension