2011-08-08 32 views
0

我想根據當前行計算度量值。 問題是我找不到在WITH MEMBER部分中獲取當前行的方法。如何在WITH MEMBER計算MDX中獲取當前行值?

WITH MEMBER [Measures].[Test] AS AVG(
    NonEmptyCrossJoin(
       FILTER(DESCENDANTS([Exigences].[ENVGR], [Levier], SELF), 
         [Exigences].CurrentMember.Name = 'Chemicals'), 
       DESCENDANTS([Organization].[Valeo].[Powertrain Systems], [entity], SELF)), 
    [Measures].[ProgressLevel]) 

SELECT {[Measures].[ProgressLevel], [Measures].[Test]} ON COLUMNS, 
DESCENDANTS([Exigences].[ENVGR].[ENVGR-01.001], [Levier], SELF) ON 
ROWS FROM [Exigences] 

化學物質目前爲硬編碼。這是例子。 我想用'化學物'代替當前的行數。

因此,假設這些值是行將返回'化學物質','藥房','測試',我想[度量]。[測試]計算改變。

MDX能做到嗎?如果是這樣,我怎麼能得到當前值。

我試過[Levier] .CurrentMember.Name,但我認爲它與[Exigences] .CurrentMember.Name衝突。

任何人有一個想法?

謝謝

+0

不知道理解,你是什麼意思到當前行。底層表的行?如果是,哪一個? (這不是非常OLAP得到rowid :-)) – ic3

+0

在ON ROWS選擇上,我做了一個DESCENDANTS,它會給我一組[Levier]成員。現在在頂部的WITH MEMBER中,您可以看到硬編碼的'Chemicals'字符串。我想這個字符串是我的[Levier] .CurrentMember.Name值。但由於[Exigences]維上的過濾我有衝突,[Exigences] .CurrentMember.Name和[Levier] .CurrentMember.Name之間的平等測試將始終爲真,因此,過濾器將不會過濾任何內容。 – Spredzy

+0

我看到你的問題,棘手的問題之一。 icCube OLAP服務器支持功能語言來解決問題。對不起,我沒有看到如何解決你的問題,除非在Axis()上做些什麼或使用重複的層次結構。你需要爲這個標準的MDX su..s創建一個變量uff。 – ic3

回答

2

這已採取努力一點,但是這就是優勢,擁有一個漂亮的金色徽章。我們使用的MDX Generate功能和命名集(myCellSet在link & 2D爲例):

不知道這是要爲你的供應商工作,但你可以試試這個:

WITH MEMBER [Measures].[Test] AS AVG(
NonEmptyCrossJoin(
      Generate({[Exigences].CurrentMember} as MyCellSet, 
       FILTER(DESCENDANTS([Exigences].[ENVGR], [Levier], SELF), 
        [Exigences].CurrentMember.Name = MyCellSet.CurrentMember.Name) 
      ) 
      , 
      DESCENDANTS([Organization].[Valeo].[Powertrain Systems], [entity], SELF)), 
[Measures].[ProgressLevel]) 
+0

感謝您的幫助。我明白爲什麼Generate做以及爲什麼我們在這裏使用它,但是AS MyCellSet是使用Generate的標準方式。我無法找到關於它的任何文檔。而且這似乎是什麼試圖實現這個時候不起作用。題外話:你有什麼意思「擁有一個漂亮的金徽章」? – Spredzy

+0

928點意味着你一直在幫助別人,所以這是公平的,我們也一樣 – ic3

+0

ahha謝謝。我只是通過複製維度來做到這一點。我不喜歡這個解決方案,但它會爲我贏得一些空閒時間來找到更好的解決方案。我將嘗試挖掘更多關於生成函數的信息。感謝icCube提供一些幫助。非常感激。 – Spredzy