我有两个维度,分别为T
和L
运行此命令时:
SELECT
{measures.[value]} on 0,
{nonempty([T].[Hierarchy Items].[T1])} on 1
FROM [Cube]
WHERE
(
[L].[L3].&[49733]
)
我获得了所有T1成员,而where子句适用
但是当我删除nonempty
函数
SELECT
{measures.[value]} on 0,
{[T].[Hierarchy Items].[T1]} on 1
FROM [Cube]
WHERE
(
[L].[L3].&[49733]
)
我将获得所有T1成员,而where子句不适用。
还有什么办法可以获取所有null值,并且filter(where)也适用?
答案 0 :(得分:1)
您需要了解非空是如何工作的。例如,我想查看2011年的InternetSalesAmount,请考虑以下查询
select [Measures].[Internet Sales Amount] on 0 ,
[Product].[Category].[Category]
on 1
from
[Adventure Works]
where
[Date].[Calendar Year].&[2011]
结果:
现在查询返回所有2011年已售出或未售出的产品。对于已售出的产品,它将返回销售金额。但是,其他三种产品是由于在2011年与product(MDX的行为与SQL的行为不同)之间的笛卡尔积而返回的。现在,我只想查看2011年售出的产品。
select [Measures].[Internet Sales Amount] on 0 ,
nonempty(
[Product].[Category].[Category],
[Measures].[Internet Sales Amount]) on 1
from
[Adventure Works]
where
[Date].[Calendar Year].&[2011]
结果
为此,我可以使用{non empty}或{nonempty}关键字来告诉MDX仅检索事实表中具有有效条目的那些组合。由于事实表在2011年没有行包含其他三种产品,因此它将不返回它们。
答案 1 :(得分:0)
也许是这样的:
WITH
SET S AS
EXISTS(
[T].[Hierarchy Items].[T1].members,
{ [L].[L3].&[49733] },
"MeasureGroupName"
)
SELECT
{measures.[value]} on 0,
S on 1
FROM [Cube];