我有一个包含两个度量值组的多维数据集,一个是MOLAP格式,另一个是ROLAP格式。我还从每个成员组中的单个列创建了一个计算成员([C]
)([A]
MOLAP 和[B]
ROLAP < /强>)。我想要的是[C]
如果它不为空,则返回[A]
的值,否则返回[B]
。使用CASE
语句非常容易实现:
WITH MEMBER [C] AS
CASE
WHEN ISEMPTY([A]) THEN [B]
ELSE [A]
END
这很好用,并且运行以下查询会显示与我希望它们显示的结果完全相同的结果,[C]
仅在[B]
为空时才为[A]
。
SELECT
{ [A]
, [B]
, [C]
} ON COLUMNS
, [Time].CHILDREN ON ROWS
FROM
[Cube]
但是,在某些情况下,[A]
和[B]
都是空的,我想将它们从结果集中过滤掉。通常,我可以将[Time]
维度包装在NONEMPTY
中以实现此目的:
SELECT
{ [A]
, [B]
, [C]
} ON COLUMNS
, NONEMPTY([Time].CHILDREN) ON ROWS
FROM
[Cube]
但是当我使用上述查询尝试此操作时,无论[A]
是否为空,结果都会过滤掉[B]
为空的所有行。 [B]
为空的行不会被过滤掉。
我希望NONEMPTY会:
[C]
为空([A]
且[B]
为空)的行或 [A]
或[B]
为空的所有行为什么NONEMPTY
仅将[A]
加入帐户?
答案 0 :(得分:2)
有NonEmpty
个功能和NON EMPTY
关键字。他们没有相同的行为。
如果你写:
NON EMPTY [Time].CHILDREN ON ROWS
它将删除空行。
NonEmpty
功能未考虑其他轴。让我们调用h1
[A],[B]和[C]的层次结构。在您的情况下,NonEmtpy
是在默认成员h1
上计算的。
查询
NONEMPTY([Time].CHILDREN) ON ROWS
相当于
NONEMPTY([Time].CHILDREN, {[h1].DefaultMember}) ON ROWS
以下查询应该可以帮助您了解会发生什么:
SELECT
{ [A]
, [B]
, [C]
, [A].Hierarchy.DefaultMember
} ON COLUMNS
, [Time].CHILDREN ON ROWS
FROM
[Cube]
答案 1 :(得分:1)
我想知道测量[B]。它是否计算好了?显然,SSAS的默认行为是忽略集合函数中的计算度量。 NONEMPTY是一个set函数。当你在AddCalculatedMembers函数中包装Time维时会发生什么?
SELECT
{ [A]
, [B]
, [C]
} ON COLUMNS
, NONEMPTY(AddCalculatedmeasures([Time].CHILDREN)) ON ROWS
FROM
[Cube]
我还想知道如果你明确告诉NONEMPTY功能哪些措施可以过滤,它是否会更好。也许您的ROLAP度量组还有其他一些措施即使在[B]时也不是空的。记住NONEMPTY和NON EMPTY之间的区别。
SELECT
{ [A]
, [B]
, [C]
} ON COLUMNS
, NONEMPTY([Time].CHILDREN, [C]) ON ROWS
FROM
[Cube]