Sql-Server

MDX Crossjoin 過濾來自同一維度的不同層次結構非常慢

  • June 12, 2014

我有一個 MDX 查詢,它是由一個非常慢的 MDX 新手編寫的(查詢,即不是 MDX 新手)。而且我也是一個MDX新手。這是查詢:

SELECT
NON EMPTY
(
   [Measures].[Status]
)
ON COLUMNS,
NON EMPTY
(
   Filter
   ( 
       Crossjoin
       (
           {
               [Value1].[Value1].[Value1A],
               [Value1].[Value1].[Value1B]
           },
           [Value2].[Value2A].[Value2A],
           [Value3].[Value3].[Value3].ALLMEMBERS,
           [Value4].[Value4].[Value4].ALLMEMBERS,
           [Value5].[Value5].[Value5],
           [Value2].[Value2B].[Value2C],
           [Value6].[Value6].[Value6],
           [Value7].[Value7A].[Value7A]
       ),
       (
           [Measures].[Status]
       ) > 0
   )
)
ON ROWS
FROM [Cube]
WHERE
(
   [Value7].[Value7].[Value7A],
   [Value8].[Value8].[Value8A],
   [Value9].[Value9].[Value9A]
)
CELL PROPERTIES VALUE

我對 MDX 知之甚少,但通過反複試驗,我發現從 中刪除這兩個[Value1].[Value1]條目Crossjoin會使查詢快速返回。或者,同時刪除[Value2].[Value2A][Value5]條目也會使其快速返回。但是,顯然,這正在改變查詢,所以不是解決方案,但如果 SQL 分析服務中有類似的東西,它也許提供了關於我應該在哪裡查看索引或類似內容的線索(我更熟悉SQL Server 數據庫)?

我確實嘗試過的一件事是放在and&之前。這導致查詢非常快地返回而沒有結果。不幸的是,我不知道這是否正確,因為沒有此更改的查詢需要很長時間才能查看是否有任何結果。我不知道應該有什麼不同,但這是顯而易見的答案還是將查詢更改為不同?同樣可能的是,該查詢的原始作者無論如何都應該使用,但從未使用真實數據集測試查詢。[Value1A]``[Value1B]``&``&

任何幫助將不勝感激。

我在這裡找到了一個對我的情況有所幫助的答案,現在查詢返回得非常快。只要數據集相當小,該子句似乎HAVING是比使用該函式更好的解決方案。Filter但是,我注意到NON EMPTY從第二個軸 ( ON ROWS) 中刪除會導致它仍然很慢,即使使用該HAVING子句。我可能還需要解決這個問題。但是,至少第一個問題解決了。

嘗試這個:

SELECT
   [Measures].[Status]
ON COLUMNS,
NONEMPTY
({
               [RiskType].[RiskType].[MemberValue123],
               [RiskType].[RiskType].[MemberValue456]
           }*
           [Trade].[TradeType].[TradeType]*
           [Expiry].[Expiry].[Expiry].ALLMEMBERS*
           [Tenor].[Tenor].[Tenor].ALLMEMBERS*
           [YieldCurveCurrency].[YieldCurveCurrency].[YieldCurveCurrency]*
           [Trade].[TradeBook].[XYZ1]*
           [Index].[Index].[Index]*
           [EffectiveStrike].[Effective Strike Name].[Effective Strike Name]
,
           [Measures].[Status]
)
ON ROWS
FROM [RePro]
WHERE
(
   [RiskSet].[RiskSet].[ABC],
   [Portfolio].[Portfolio].[XYZ],
   [RunDate].[RunDate].[17 Sep 2013]
)

引用自:https://dba.stackexchange.com/questions/50149