如何使用维度筛选事实



我使用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函数过滤结果?

Filter表达式的作用是:

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

注意,=比较两侧的,在这种情况下,因为上下文将度量值设置为Circulation Count,即Circulation Count的值。如果要比较成员身份,则必须使用IS而不是=

这对你的陈述意味着什么?我不知道你为什么不想使用WHERE子句,但正如@mmarie所说,你可以将[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而非=

在与@FrankPI沟通后,我喜欢这很好:

With 
Member X As 
( 
[Measures].[Circulation Count] , 
(
[Circulation Kind].[Circulation Code].&[1]
) 
)
Select 
X On Columns
From <>

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

最新更新