2013-08-23 50 views
2

可能的條件腳本SQL以下結構是可能是使用MDX

IF <condition> 
BEGIN 
    <do something> 
END; 

能否使用條件中MDX類似的方式?


編輯
具體來說,我想以某種方式測試,如果一組存在和使用,作爲IF語句中的條件。

IF TheFollowingReturnsRow(
      select * 
      from $SYSTEM.MDSCHEMA_SETS 
      where SET_NAME = 'Set_Custom' and 
       CUBE_NAME = 'MyCube') THEN 
     <do something> 
END IF 

回答

2

取決於你想要達到的目標,這絕對是可以用IF在MDX語句:

http://technet.microsoft.com/en-us/library/ms145517.aspx

SCOPE ([Customer].[Customer Geography].[Country].MEMBERS); 
IF Measures.CurrentMember IS [Measures].[Internet Sales Amount] THEN this = 10 END IF; 
END SCOPE; 

其他替代方案包括IIF(邏輯表達式,表達式1,表達式2)和CASE WHEN ... THEN ... ELSE ... END結構。

+0

+1感謝信息 - 也許可能,但仍然不確定 - 我已經用更具體的細節修改了OP。 – whytheq

2

我認爲MDX主要是爲了查詢語言,因此SELECT聲明是最發展的聲明。還有一些其他DMLUPDATE CUBEDRILLTHROUGHCALL陳述,但除了UPDATE,他們都只是讀取數據,並且使用較少。

然後,有一些DDL命令,但它們僅限於對現有多維數據集或當前查詢會話的輕微調整,您無法使用MDX創建新的多維數據集或維度。用於創建多維數據集或更改維度的SSAS的「真正的DDL命令」等是XMLA命令,而不是MDX語句。

DCL類似於GRANTREVOKE的陳述在MDX中不可用。

和for語句的第四類,你在SQL發現,該過程語句if語句(而不是if表達式)或循環結構,以及服務器端遊標,MDX不提供任何支持,好。這些語句是SQL的一部分,在不同的DBMS如Oracle,SQL Server,DB2,mySQL等之間不是很標準化,僅舉幾例,而基本的DML和DDL或多或少是標準化的 - 在某種程度上所有主要的關係數據庫支持ANSI SQL。即使對於關係數據庫來說,這通常也是一個後來的插件,主要用於存儲過程,觸發器(作爲過程的特例)和批處理。 MySQL被廣泛使用了很多年,沒有支持這些僅在第5版中引入的語句。

對於存儲過程,Analysis Services依賴於COM(不建議使用)和.net,並且在那裏有完整的過程特徵,並且只是使其對象模型可用於.NET或COM。無論如何,存儲過程支持僅限於函數返回一個對象(可能與包含大量數據的MDX集合一樣複雜),或返回結果集的過程。後者不能與其他MDX語句交互,但只需撥打CALL procname(parameters)即可。對於批處理,MDX只依賴於調用批處理來執行所有條件分支和循環的宿主環境。

事實上,MDX的使用比SQL更受限制,所以在某種程度上,它只是一個"domain specific language",這對於某些目的來說非常有用,但它在非預期的領域存在很多缺陷。

+0

+1感謝這些額外的信息。 – whytheq

1

如果可能,我會建議將所有這些條件邏輯移動到立方體計算腳本。 在那裏可以使用效率更高的範圍說明。

多維數據集計算腳本存儲在服務器端SSAS。你可以有計算和其他一些邏輯定義。這些將可用於MDX查詢。例如,您可以創建新成員和新集。如果需要,也可以覆蓋加載/計算的值。這裏是關於它如何工作的簡單解釋http://www.sqlservergeeks.com/blogs/AmitK/sql-server-bi/65/implementing-calculations-in-ssas-using-mdx-part1

如果我使用丹給出的例子。您甚至可以執行如下操作:

SCOPE([Customer]。[Customer Geography]。[Country] .MEMBERS); SCOPE([Measures]。[Internet Sales Amount]); this = 10; END SCOPE; END SCOPE;

如果條件非常緩慢,但經過這樣的轉換後,它們應該以合理的速度工作。

+0

+1,因爲我對你的答案很感興趣 - 儘管這個答案的一些擴展會非常好。 「立方體計算腳本」是什麼意思? – whytheq

+0

多維數據集計算腳本存儲在服務器端。 – ebayindir

+0

......它是負責處理立方體的腳本嗎? – whytheq