2012-01-13 55 views
2

我有以下問題:MDX使用除不起作用

Select 
    { 
     [Measures].[PerformanceTotalYtd] 

    } on columns, 

    Non Empty{ 
     Except(([Desk].[DeskName].[Trade].Members,[Time].[Year-Month-Day].[Day].&[2012]&[1]&[10]),([Desk].[DeskName].[Trade].Members,[Time].[Year-Month-Day].[Day].&[2012]&[1]&[09])) 
    } on rows 

from [Cube] 

where ([Entity].[Entity].&[9], [Audience].[View].&[GOD]) 

它的存在與名稱服務檯維度。此維有一個名稱爲DeskName的層次結構。最低等級ist貿易。

臺: - 總 - 段-BusinessArea -Department -4th等級組合-Desk - 行業

與下面的查詢顯示,我想告訴所有行業,即有措施「PerformanceTotalYtd」 = NULL上! 2012/01/10的日期,除了「PerformanceTotalYtd」度量值的交易!!= 2012/01/09日期的空值!

實施例:

交易與測量在2012/01/10 PerformanceTotalYtd:

ABC 12,99

DEF 3,22

GHI 55,60

2012/01/09度量PerformanceTotalYtd的交易:

ABC 80,00

DEF 8,78

我想下面的結果,因爲貿易 「GHI」 不存在於2012/01/09,是新的:

GHI 55, 60

我下面的查詢顯示有這樣的結果:

ABC 12,99

DEF 3,22

GHI 55,60

它不會從2012/01/09刪除現有的交易。

我在SQL一個解決方案,但要讓它在MDX:

SELECT DD.Code, Sum(PerformanceTotalYtd) as TOTAL 
     FROM [Reporting_DB].[Star].[Fact_PerformanceTotal] FIS 
      inner join Star.Dimension_Desk DD on FIS.DeskID = DD.DeskID 
     WHERE FIS.TimeID = 20120110 and FIS.EntityID = 9 AND DD.Code not in (SELECT DD.Code 
FROM [Reporting_DB_HRE].[Star].[Fact_PerformanceTotal] FIS inner join Star.Dimension_Desk DD on FIS.DeskID = DD.DeskID WHERE FIS.TimeID = 20120109 and FIS.EntityID = 9 group by DD.Code)group by DD.Code 

任何人可以幫助我嗎?我找不到解決方案。

對不起,我的英語不好!

亞歷

回答

2

我已發現在冒險的類似示例Works多維數據集: 設定{[Customer].[City].&[Bell Gardens]&[CA], [Customer].[City].&[Bellevue]&[WA], [Customer].[City].&[Bellflower]&[CA]}具有用於[Date].[Calendar Year].&[2002][Measures].[Internet Sales Amount] 3個值,並且只有2 [Date].[Calendar Year].&[2004]值。因此,我們需要以示對成員度量值於2002年在那裏測量值== NULL在2004年 下MDX查詢達到期望的結果:

with set S as '{[Customer].[City].&[Bell Gardens]&[CA], [Customer].[City].&[Bellevue]&[WA], [Customer].[City].&[Bellflower]&[CA]}' 
select 
[Measures].[Internet Sales Amount] on 0, 
non empty { Filter(S, IsEmpty(([Date].[Calendar Year].&[2004], [Measures].[Internet Sales Amount]))) } on 1 
from [Adventure Works] 
where ([Date].[Calendar Year].&[2002]) 

我試圖相應地修改你的榜樣,但無法測試它。這裏是:

select 
{ [Measures].[PerformanceTotalYtd] } on 0, 
non empty { Filter([Desk].[DeskName].[Trade].Members, IsEmpty(([Time].[Year-Month-Day].[Day].&[2012]&[1]&[09], [Measures].[PerformanceTotalYtd]))) } on 1 
from [Cube] 
where ([Entity].[Entity].&[9], [Audience].[View].&[GOD], [Time].[Year-Month-Day].[Day].&[2012]&[1]&[10]) 

簡而言之:使用過濾器,而不是除了。

+0

非常感謝!有用! :)稍後我會用Except聲明發佈一個解決方案!我可以在我的文章寫作8小時後做到這一點! – Alexo 2012-01-13 13:03:16

1

我有我的問題的解決方案。以下查詢顯示與Dmitry Polyanitsa的查詢相同的結果!祝你有個美好的一天!

with 
    set [Trades Today] as NonEmpty([Desk].[DeskName].[Trade].Members, ([Measures].[PerformanceTotalYtd], [Time].[Year-Month-Day].[Day].&[2012]&[1]&[10])) 
    set [Trades Yesterday] as NonEmpty([Desk].[DeskName].[Trade].Members, ([Measures].[PerformanceTotalYtd], [Time].[Year-Month-Day].[Day].&[2012]&[1]&[9])) 
    set [Trades Difference] as Except([Trades Today], [Trades Yesterday]) 

Select 
    { 
     [Measures].[PerformanceTotalYtd] 

    } on columns, 

    Non Empty{ 
     [Trades Difference] 
    } on rows 

from [Cube] 

where ([Entity].[Entity].&[9], [Audience].[View].&[GOD])