2017-03-08 32 views
0

我有對行和列的多個CROSSJOIN查詢我要過濾的所有數據進行過濾與多個CROSSJOINs查詢數據[Measures].[Flag] = 1 下面是一個例子:如何通過一個標誌值

SELECT 
    { 
    NonEmpty 
    (
     CrossJoin 
     (
     { 
      [Time].[2016] 
     ,[Time].[2017] 
     } 
     ,CrossJoin 
     (
      { 
      [Quarters].[2 Quarter] 
      ,[Quarters].[1 Quarter] 
      } 
     ,{ 
      [Measures].[Load] 
      ,[Measures].[Flag] 
      } 
     ) 
    ) 
    ) 
    } ON ROWS 
,{CrossJoin([Industry].[Industry 1],[Client].[Set 1])} ON COLUMNS 
FROM [Cube] 
WHERE 
    [Version].[Actual]; 

如果我做這樣的事情:

SELECT 
    { 
    NonEmpty 
    (
     CrossJoin 
     (
     { 
      [Time].[2016] 
     ,[Time].[2017] 
     } 
     ,CrossJoin 
     (
      { 
      [Quarters].[2 Quarter] 
      ,[Quarters].[1 Quarter] 
      } 
     ,{ 
      [Measures].[Load] 
      ,[Measures].[Flag] 
      } 
     ) 
    ) 
    ) 
    } ON ROWS 
,{ 
    Filter 
    (
     CrossJoin 
     (
     [Industry].[Industry 1] 
     ,[CLient].[Set 1] 
    ) 
    , 
     [Measures].[Flag] = 1 
    ) 
    } ON COLUMNS 
FROM [Cube] 
WHERE 
    [Version].[Actual]; 

我得到一個空集。在設置不用其他的過濾器的結果沒有與Flag = 1

+0

我認爲過濾器會爲每列執行'[Measures]。[Flag]'的總和 - 如果總和爲1,那麼保持列...但我懷疑每個[Measures] 。[標誌]'列是大於1 – whytheq

回答

0

嗨我找到了解決這個問題的辦法。解決方法是使用不同的過濾器。這裏有一個例子:

的一件大事這裏要注意的是,在特定的空間配置中提供「標誌」的數據。

SELECT 
    { 
    NonEmpty 
    (
     CrossJoin 
     (
     { 
      [Time].[2016] 
     ,[Time].[2017] 
     } 
     ,CrossJoin 
     (
      { 
      [Quarters].[2 Quarter] 
      ,[Quarters].[1 Quarter] 
      } 
     ,{ 
      [Measures].[Load] 
      ,[Measures].[Flag] 
      } 
     ) 
    ) 
    ) 
    } ON ROWS 
,{ 
    Filter 
    (
     CrossJoin 
     (
     [Industry].[Industry 1] 
     ,[CLient].[Set 1] 
    ) 
    , 
     (
     [Cube].(
       [Time].[2016], 
       [Quarters].[1 Quarter], 
       [Measures].[Flag] 
      ) = 1 
    ) 
    ) 
    } ON COLUMNS 
FROM [Cube] 
WHERE 
    [Version].[Actual]; 
1

數據如果你只是把它移動到HAVING子句有何幫助?

SELECT 
    { 
    NonEmpty 
    (
     CrossJoin 
     (
     { 
      [Time].[2016] 
     ,[Time].[2017] 
     } 
     ,CrossJoin 
     (
      { 
      [Quarters].[2 Quarter] 
      ,[Quarters].[1 Quarter] 
      } 
     ,{ 
      [Measures].[Load] 
      ,[Measures].[Flag] 
      } 
     ) 
    ) 
    ) 
    } ON ROWS 
, 
     CrossJoin 
     (
     [Industry].[Industry 1] 
     ,[CLient].[Set 1] 
    ) 
    having [Measures].[Flag] = 1 ON COLUMNS 
FROM [Cube] 
WHERE 
    [Version].[Actual]; 
+0

我已經測試此。給了我Cognos TM1的語法錯誤。 – Mindaugas

+0

@Mindaugas我發現這個關於使用具有在Cognos的:https://www.ibm.com/developerworks/community/forums/html/topic?id=77777777-0000-0000-0000-000014464971 – whytheq

+0

我已經找到了解。我必須使用不同的過濾器。 – Mindaugas