我使用SSAS
和SQL 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 :(得分: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
。