2008-10-13 85 views
2

我需要在MDX中定義一個計算成員(這是SAS OLAP,但我會很感謝來自使用不同OLAP實現的人員的答案)。在MDX中定義一個計算成員 - 過濾一個度量的值

新的度量值應該通過應用額外的過濾條件從現有的度量來計算。我想它會用一個例子可以更清晰:

  • 現有措施:「共交通」
  • 現有維:「方向」(「in」或「外部」)
  • 我需要創建一個計算成員「傳入的流量」,相當於「總流量」與一個額外的過濾器(方向=「In」)

問題是,我不知道MDX和我在一個非常緊張的時間表對於一個新手問題抱歉)。我能想出的最好的是:

([Measures].[Total traffic], [Direction].[(All)].[In]) 

幾乎工程,除具有特定方向細胞:

example

因此,它看起來像方向的「內在」過濾器覆蓋有我自己的過濾器)。我需要一個「內在」過濾器和我自己的交集。我的直覺是,它與相交[Direction].[(All)].[In]與待評估細胞的內在座標有關,但很難知道我需要什麼,而不需要先閱讀相關主題:)

我最終以要執行

IIF([Direction].currentMember = [Direction].[(All)].[Out], 
    0, 
    ([Measures].[Total traffic], [Direction].[(All)].[In]) 
) 

..但至少在SAS OLAP這將導致額外的查詢([IN]的值來計算)到基礎數據集,所以我沒有到底使用它。

回答

7

首先,你可以在你的MDX定義一個新的計算指標,並告訴它使用的另一項措施的價值,而是使用了濾鏡開始:

WITH MEMBER [Measures].[Incoming Traffic] AS 
'([Measures].[Total traffic], [Direction].[(All)].[In])' 

每當你上顯示新措施一個報告,它會表現得好像它有一個'方向> In'的過濾器,無論方向維度是否被使用。

但是在你的情況下,你希望Direction維度在使用時能夠獲得優先...所以事情會變得有點混亂。你將不得不檢測是否該尺寸在使用,並採取相應的行動:

WITH MEMBER [Measures].[Incoming Traffic] AS 
'IIF([Direction].currentMember = [Direction].[(All)].[Out], 
    ([Measures].[Total traffic]), 
    ([Measures].[Total traffic], [Directon].[(All)].[In]) 
)' 

要看到,如果尺寸在使用中,我們如果當前單元格是使用OUT檢查。如果是這樣,我們可以按原樣返回總流量。如果沒有,我們可以告訴它在我們的元組中使用IN。

+0

除了傳入流量[out] = 0,所以而不是「([Measures]。[Total traffic])」我使用了「0」。非常感謝! – Nickolay 2008-10-15 13:15:43

1

我認爲你應該在你的總交通事實表中爲IN/OUT指示設置一個列&爲IN &創建一個Dim表。然後,您可以根據IN & Out分析您的數據。

1

也看看this question,它描述了同樣的問題,並在那裏發佈了不同的答案。