1

我有一个带有两个度量值组的多维数据集,一个是 MOLAP 格式,另一个是 ROLAP 格式。我还从每个成员组( MOLAPROLAP[C] )中的单个列创建了一个计算成员 ( )。我想要的只是返回我的值,如果它不为空,否则返回。这很容易通过以下语句实现:[A] [B] [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 会:

  1. 只过滤掉空的行[C][A]并且[B]是空的)
  2. 过滤掉所有[A]OR[B]为空的行

为什么NONEMPTY只考虑[A]到这里?

4

2 回答 2

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]
于 2012-10-19T15:42:49.517 回答
1

我想知道措施 [B]。是计算出来的吗?显然 SSAS 的默认行为是忽略集合函数中的计算度量。NONEMPTY 是一个集合函数。将 Time 维度包装在 AddCalculatedMembers 函数中会发生什么?

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]
于 2012-10-19T15:27:17.847 回答