MDX 查詢的基本語法_第1頁
MDX 查詢的基本語法_第2頁
MDX 查詢的基本語法_第3頁
MDX 查詢的基本語法_第4頁
MDX 查詢的基本語法_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、MDX 查詢的基本語法收藏此頁 打印【IT168知識庫】 基本語法針對 DB2® Alphablox 立方體執(zhí)行的 MDX 查詢的基本語法如下所示:SELECT axisSpecification ON COLUMNS,axisSpecification ON ROWSFROM cubeNameWHERE (slicerItems)其中:axisSpecification是一個或多個元組的集合??梢砸粤斜硇问捷斎朐M,也可以通過 CrossJoin 函數(shù)來“生成”元組。cubeName是已定義的 Alphablox 立方體的名稱。slicerItems是一個元組(

2、通常是用逗號分隔的成員列表),將對這個元組過濾查詢結(jié)果集。如果有多個切片成員,則每個成員必須來自不同的維,并且不能在查詢中指定的任何軸中引用該維。 以下幾點包括有關(guān) DB2 Alphablox 的上下文中 MDX 用法的重要信息。· 維只能在查詢中的一個軸上出現(xiàn)。將維放在多個軸上的查詢將由于出錯而失敗。· 雖然查詢通常指定兩個軸,但它可以指定零個或多個軸。還可以將 COLUMNS 軸指定為 AXIS(0) 以及將 ROWS 軸指定為 AXIS(1)。后續(xù)的每個軸將被指定為 AXIS(n),其中 n 是下一個連續(xù)整數(shù)。注意,顯示查詢結(jié)果數(shù)據(jù)的 D

3、B2 Alphablox 應(yīng)用程序(GridBlox、ChartBlox 或 PresentBlox)只能接受最多指定了兩個軸的查詢。作為 XML 數(shù)據(jù)集顯示的查詢可以接受任意個軸。· 在 DB2 Alphablox 中,MDX 中的關(guān)鍵字是不區(qū)分大小寫的,但是 MDX 查詢中的成員名在被方括號 括住時是區(qū)分大小寫的。當(dāng)成員名未被方括號 括住時,它們在被發(fā)送到服務(wù)器之前將被轉(zhuǎn)換為大寫。除非數(shù)據(jù)庫中的所有成員名都是大寫的,否則應(yīng)該使用方括號語法。· 如果在需要成員的 MDX 函數(shù)中只包含維名稱,則 DB2 Alphablox Cube Server 將返回一些使用 dimen

4、sionName.currentMember 作為值的結(jié)果。-  考慮這樣一個場景,有一個大Cube存儲著網(wǎng)站的訪問歷史數(shù)據(jù),其中有一個維就是網(wǎng)站中各個網(wǎng)頁的URL。用戶這個貌似很合理的要求是這樣地。用戶指定一個URL,將這個URL做為Slicer進行切片,然后察看和該網(wǎng)頁相關(guān)的多維數(shù)據(jù)。反映到MDX語句中呢,就是在MDX屁股后面再添上一個”Where (URL.User Defined URL)”,其中” User Defined URL”是用戶要輸入的頁面地址。Ok,需求很明確,也很合理,指定頁面察看嘛,用個Where就打發(fā)了。別高興太早,問題在后面。用戶輸入正確的網(wǎng)頁

5、地址,ok,運轉(zhuǎn)正常;用戶輸入一個錯誤網(wǎng)頁地址,一個異常從UI上跳出來,說找不到這個Member。輸入錯誤了當(dāng)然找不到,問題是在ASP系統(tǒng)中俺們使用OWC來和后臺service交互, 這錯誤沒法捕獲。換句話說,要么您就保證提交給server的MDX語句完全正確,要么就給用戶蹦出一個誰也不明白的異常。如果您有把握說服用戶喜歡上這個異常,您就不必往下看這篇文章,否則俺們就一起來看看如何避免不存在的Slicer提交給server。首先要作的工作是判斷用戶輸入的這個Slicer(也可以理解為member,因為目前用戶只是要求基于單個維度來切片,不保證用戶看了我這篇文章后胃口大開要求同時輸入多維進行切片

6、)是否是一個存在的Member。Filter函數(shù)配合InStr函數(shù)可以搞定這個。Filter( Time.Members,InStr(URL., "ProductView.asp")上面這段MDX干的活就是,遍歷URL維中的所有member,如果這個member的名字包含“ProductView.asp”(這個就是用戶輸入的頁面地址),ok,扔到一個新set里,最后把這個set做為輸出。如果用戶輸入的頁面地址不存在,也就是沒有任何member的名字能夠和這個頁面地址匹配,這個新set就為空。俺們要做的事情,就是避免這個set為空。那么怎么

7、避免Filter函數(shù)得到的set為空呢?耍點小花招。看看下面的代碼:TopCount( Union(Filter( URL.Members,InStr(URL., " ProductView.asp "), URL.DefaultMember), 1)必須承認(rèn)這是一個討巧的招,不過好使就行,是不是名門正派的套路,就管不了這么多了。首先讓Filter函數(shù)得到的set與URL.DefaultMember做一個Union操作,這樣如果Filter函數(shù)的結(jié)果set為空,則會返回set會至少包含一個URL.DefaultMember,保證

8、了返回set肯定不為空。然后再在外面套一個TopCount函數(shù),將排列在第一個member提取出來,這樣,如果Filter函數(shù)不為空,整個結(jié)果就是Filter函數(shù)的輸出,如果Filter結(jié)果為空集,則返回的是一個包含 URL.DefaultMember的集合。需要說明的是DefaultMember是事先預(yù)定義的一個計算成員,其各個measure的值永遠(yuǎn)都是-1。至于為啥要定-1,think。Ok,到這,俺們已經(jīng)得到了一個包含且僅包含一個(真繞口,Rap?)Member的set,這個Member就是用來做 Slicer的原料。但是Slicer只可以是Tuple,不可以是Set,還得費點事將Set

9、轉(zhuǎn)換為Tuple。查遍MDX函數(shù),找不到SetToTuple或者TupleToSet??磥碇挥衷俪銎辛恕W⒁獾絊et的字符串形式是什么?” ProductView.asp”,Tuple的字符串形式是”(ProductView.asp)”,get it。 將Set轉(zhuǎn)換為字符串,然后脫去前后兩個大括號,再添上兩個圓括號,ok,這不就是Tuple了嗎 J 說的輕飄,寫起來苦:Where (StrToMember( mid(SetToStr(TopCount( Union(Filter( URL.Members, InStr(URL., "ProductView.asp"), URL.DefaultMember), 1),2, Len(SetToStr(TopCount( Union(Filter( URL.Members,InStr(URL., " ProductView.asp"), URL.DefaultMember), 1)這就是最后這個Slice

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論