Sql-Server
MDX Crossjoin 過濾來自同一維度的不同層次結構非常慢
我有一個 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] )