2012-10-19 49 views
1

我有一個帶有兩個度量值組的多維數據集,一個用於MOLAP格式,另一個用於ROLAP格式。我還在每個成員組的單個列中創建了計算成員([C])([A]MOLAP[B]ROLAP)。我只想要[C]返回0123B的值(如果它不是空的),否則返回[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]是空的)OR
  2. 過濾掉所有行[A][B]是空

爲什麼NONEMPTY只需要[A] in acc ount這裏?

回答

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] 
+0

你說得對,'NON EMPTY'是我想要的。但在這種情況下,在同一軸上不是'[A]'和'[B]'?爲什麼'NONEMPTY'只會過濾出[A]爲空的行,而不是'[B]'所在的行? – mclark1129

+0

啊,我現在看到了。 NONEMPTY是FILTER功能的特殊形式。它從第一組中刪除第二組中空的項目。如果你沒有提供第二套,它只是使用你的立方體的默認度量 - 在這種情況下,[A]。如果您想針對[C]測試NONEMPTY,則必須將[C]放入函數的第二個參數中。 – Bill

1

我想知道Measure [B]。它是計算的嗎?顯然,SSAS的默認行爲是忽略集合函數中的計算度量。 NONEMPTY是一個集合函數。當您將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] 
+0

'[B]'不計算,除非它的ROLAP意味着它被視爲自動處理的計算結果。沒有任何情況下,度量組的一種度量是空的,但另一種則不是。在這種特殊情況下,如果某個度量爲空,那是因爲整個行不存在於事實表中。我可以像使用第二個例子一樣,通過使用'NON EMPTY'以及在'NONEMPTY'中包含'[C]'來實現我正在尋找的功能。我甚至不知道這些選擇(MDX的新增功能)。 – mclark1129

+0

我能夠實現我現在想要的,但我仍然不確定NONEMPTY只考慮「[A]」的原因。 – mclark1129