2014-01-05 40 views
1

我用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函数筛选我的结果?

+0

我不确定你会想要使用那样的过滤功能。通常,过滤器函数用于过滤一组维度成员。例如,过滤上个月销售额超过$ 100000的商店。你只是在理论上问,还是有什么比你想要完成的这个查询更多? – mmarie

+0

如果您试图在不使用where子句的情况下找到一种方法来执行此查询,则可以在ROWS轴上放置[Circulation Kind]。[Circulation Code]。[&]。或者创建一个计算出的成员总和([Measures]。[Circulation Count],[Circulation Kind]。[Circulation Code]。] [1]),然后在列上使用。 – mmarie

回答

0

与@FrankPI沟通后,我喜欢这是好的:

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

Select 
    X On Columns 
From <> 

而且在这个方法我可以用dimension过滤我measure

+1

实际上,你可以省略内部圆括号,因为你真正使用的元组是'([Measures]。[Circulation Count],[Circulation Kind]。[Circulation Code]&[1])''。 Analysis Services只是宽容的,并允许您使用这些括号。 – FrankPl

+0

merci @FrankPl。 –

1

你的Filter表达的作用是:

  • 与由测量[Measures].[Circulation Count]的一个元素集开始。
  • 然后,从这个组的保持(=滤波器)中的元素(=措施),其中值的[Circulation Kind].[Circulation Code]是一样的值的[Circulation Kind].[Circulation Code].&[1]。比较一个属性和一个成员会触发一个隐式类型转换来使两个类型相同,在这种情况下,通过隐式应用DefaultMember方法将该属性转换为成员。这意味着您将默认成员(通常是All成员)的值与具有密钥1的成员的值进行比较。而且,假设此属性中有多个成员,这可能总是错误的。

注意=两侧进行比较,在此情况下,作为上下文设置措施Circulation Count,的Circulation Count值。如果您想比较会员身份,则必须使用IS而不是=

这是什么意思为您的声明?我不知道为什么你不希望使用WHERE条款,但作为@mmarie说,你可以只从WHERE轴移动[Circulation Code]对行轴:

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,不=使用,在最后陈述。

+0

我想创建一个成员,并在成员语法我不能使用的地方! –

+0

有些事情是这样的:With Member X As([Measures]。[Circulation Count],([Circulation Kind]。[Circulation Code]。] [1])) –

+0

你在哪种情况下假设你需要成员语法?也许你需要的是一套,而不是一个成员。 – FrankPl