2008-11-05 176 views
3

我對整個MDX的東西很陌生,但以下只是驅使我batty。我使用的FILTER聲明奇怪地表現了......。代碼示例,接着描述:MDX過濾器問題

SELECT 
    { 
     FILTER(
      MEMBERS([Time].[5-4-4 Week Year]), 
      [Measures].[Ship Gross Units] > 0 
     ) 
    } 
    ON COLUMNS, 
    { 
     FILTER(
      MEMBERS([Group].[Alternate Hierarchies]), 
      [Measures].[Ship Gross Units] > 0 
     ) 
    } 
    ON ROWS 
FROM SBD.SBD 
WHERE 
    (
     [FiscalYear].[FY09], 
     [Scenario].[Actuals Total], 
     [Measures].[Ship Gross Units], 
     [Channel].[FOS] 
    ) 

我想拉總檯特定銷售渠道,通過本財年的一週(某些列稍微模糊)。所有這些過濾器都適用,因爲我經常需要在SKU級別分解這些過濾器,並且在我的機器上處理截斷的數據集更簡單(讓我們說數據庫完成工作)。

問題是,此查詢在FOS通道中返回0銷售量。這似乎很奇怪,所以我刪除了行篩選器:

SELECT 
    { 
     FILTER(
      MEMBERS([Time].[5-4-4 Week Year]), 
      [Measures].[Ship Gross Units] > 0 
     ) 
    } 
    ON COLUMNS, 
    MEMBERS([Group].[Alternate Hierarchies]) 
    ON ROWS 
FROM SBD.SBD 
WHERE 
    (
     [FiscalYear].[FY09], 
     [Scenario].[Actuals Total], 
     [Measures].[Ship Gross Units], 
     [Channel].[FOS] 
    ) 

突然之間,銷售額突然出現在FOS渠道中。這打擊了我的思想;以前,我認爲我過濾只是接收顯示銷售的行,而我沒有。現在我正在展示一切,並且有銷售行。用Perl或其他方法解決這個問題很簡單,但我寧願解決它「正確」。

我相當確定我只是誤解了一些小小的細節,但我厭倦了把我的頭撞向桌子。

謝謝!

回答

2

我通常使用Microsoft Analysis Services,但MDX通常非常類似於Essbase中使用的MDX。

該軸將獨立進行評估,因此組上的過濾器語句將僅查看where子句中的成員。那麼09年有可能您的總單位有一些負值並且小於或等於0?或者你的單元數量是否足夠大,以至於它們可能會溢出數據類型幷包裝到負數?

如果您只是尋找非空單元,可能的解決方法之一是在軸上使用NON EMPTY關鍵字。 例如。

SELECT  
    NON EMPTY MEMBERS([Time].[5-4-4 Week Year]), 
    ON COLUMNS, 
    NON EMPTY MEMBERS([Group].[Alternate Hierarchies]) 
    ON ROWS 
FROM SBD.SBD 
WHERE 
    (
     [FiscalYear].[FY09], 
     [Scenario].[Actuals Total], 
     [Measures].[Ship Gross Units], 
     [Channel].[FOS] 
    )