亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

聯(lián)機(jī)分析處理服務(wù)器中多維查詢語句的解析方法和裝置的制作方法

文檔序號:6576648閱讀:132來源:國知局
專利名稱:聯(lián)機(jī)分析處理服務(wù)器中多維查詢語句的解析方法和裝置的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及數(shù)據(jù)處理技術(shù)領(lǐng)域,特別是涉及聯(lián)機(jī)分析處理系統(tǒng)中多維查詢語句的
解析方法和裝置
背景技術(shù)
通常,在企業(yè)資源計劃(ERP, Enterprise Recourse Planning)系統(tǒng)為企業(yè)帶來 了新的數(shù)據(jù)管理方式。通過ERP系統(tǒng),企業(yè)能更加高效的運用、管理企業(yè)的各類資源。ERP 數(shù)據(jù)庫中存儲大量的數(shù)據(jù),數(shù)據(jù)的處理一般需要多表操作和較長的運行時間,因此需要結(jié) 合聯(lián)機(jī)分析處理(OLAP, Online AnalyticProcessing)系統(tǒng)。OLAP系統(tǒng)主要包括多維聯(lián) 機(jī)分析處理系統(tǒng)(MOLAP, Multi Dimensional OLAP)和關(guān)系聯(lián)機(jī)分析處理系統(tǒng)(ROLAP, RelationalOLAP) 。OLAP系統(tǒng)利用基于多維查詢語言(MDX,Multi DimensionalExpression) 構(gòu)成的多維查詢語句對多維數(shù)據(jù)庫中的多維數(shù)據(jù)進(jìn)行查詢。MDX是業(yè)界標(biāo)準(zhǔn)的OLAP查詢工 具,除了提供有基本語法外,還提供有100多個標(biāo)準(zhǔn)函數(shù)。 在OLAP系統(tǒng)中,已經(jīng)發(fā)展了各種OLAP服務(wù)器,例如,SQLServer2000、 SQLServer2005和Hyperion Essbase。其中,SQLServer2000/2005不支持在MDX中自定義 函數(shù),需要借助于其他編程工具和平臺,如使用微軟平臺編程語言VBA、VB、VC、. NET,并將定 義庫注冊在Windows系統(tǒng)中。微軟平臺的編程語言都需要進(jìn)行編譯,這給開發(fā)人員的應(yīng)用 帶來了很大的麻煩,致使整個OLAP系統(tǒng)的開發(fā)過程工作效率低。Hyperion Essbase是世界 上最著名的OLAP服務(wù)器,可以支持MDX語言,但是并不支持在MDX中使用自定義函數(shù),自定 義函數(shù)還需要進(jìn)一步由MaxL腳本語言來實現(xiàn),這同樣給開發(fā)人員的應(yīng)用帶來了很大的麻 煩,致使整個OLAP系統(tǒng)的開發(fā)過程工作效率低。 綜上,現(xiàn)有技術(shù)中迫切需要解決的技術(shù)問題是使OLAP服務(wù)器支持在多維查詢語 句中擴(kuò)充自定義函數(shù),也就是說,實現(xiàn)在OLAP服務(wù)器中,對擴(kuò)充有自定義函數(shù)的多維查詢 語句進(jìn)行解析。

發(fā)明內(nèi)容
為了解決上述技術(shù)問題,本發(fā)明實施例提供了一種聯(lián)機(jī)分析系統(tǒng)中多維查詢語句 的解析方法和裝置,以提高開發(fā)人員在整個OLAP系統(tǒng)的開發(fā)過程的工作效率。
本發(fā)明實施例公開公開了如下技術(shù)方案 —種聯(lián)機(jī)分析處理服務(wù)器中多維查詢語句的解析方法,包括解析多維查詢語句, 根據(jù)解析結(jié)果生成語法樹,其中,所述語法樹的節(jié)點包括橫軸對象、縱軸對象、切片軸對象、 計算成員對象、計算單元對象和自定義函數(shù)CDF對象;當(dāng)執(zhí)行所述語法樹上各種對象的多 維查詢表達(dá)式時,如果需要調(diào)用函數(shù),先根據(jù)自定義函數(shù)的函數(shù)定義判斷是否為自定義函 數(shù),如果是,進(jìn)入自定義函數(shù)執(zhí)行過程,如果否,根據(jù)標(biāo)準(zhǔn)函數(shù)的函數(shù)定義判斷是否為標(biāo)準(zhǔn) 函數(shù),如果是標(biāo)準(zhǔn)函數(shù)則進(jìn)入標(biāo)注函數(shù)執(zhí)行過程。 優(yōu)選的,所述自定義函數(shù)的函數(shù)聲明可以根據(jù)MDX中的with關(guān)鍵字按照如下任意方式實現(xiàn)利用With [script-type]Function [ReturnType]F皿Name (ArgType argl, ArgType arg2)as '[Script]'的多維查詢表達(dá)式聲明自定義函數(shù),其中,[script-type] 表示腳本類型,ReturnType表示自定義函數(shù)的返回參數(shù)類型,argl和arg2表示自定義函 數(shù)的參數(shù),ArgType表示自定義函數(shù)的參數(shù)類型,[Script]表示自定義函數(shù)的函數(shù)體;或 者,利用With [script-type] Function [ReturnType] F皿Name (Context ctx, ArgType argl, ArgType arg2)as '[Script]'的多維表達(dá)式聲明自定義函數(shù),其中,Contex參數(shù)表示自定 義函數(shù)的執(zhí)行上下文。 優(yōu)選的,所述返回參數(shù)類型包括整數(shù)、浮點數(shù)、字符串、布爾、日期、成員、集合或
者維度。 優(yōu)選的,所述自定義函數(shù)執(zhí)行過程包括編譯自定義函數(shù)的多維查詢表達(dá)式,生成 動態(tài)Java類;調(diào)用所述動態(tài)Java類的生成方法,傳入自定義函數(shù)的參數(shù),并返回執(zhí)行結(jié)果。
優(yōu)選的,所述方法還包括當(dāng)所述自定義函數(shù)的參數(shù)和執(zhí)行結(jié)果的類型與聲明自 定義函數(shù)中的類型不同時,如果滿足隱式類型轉(zhuǎn)換規(guī)則,對所述自定義函數(shù)的參數(shù)和執(zhí)行 結(jié)果的類型進(jìn)行隱式類型轉(zhuǎn)換。 —種聯(lián)機(jī)分析處理服務(wù)器中多維查詢語句的解析裝置,包括解析單元,用于解析 多維查詢語句,根據(jù)解析結(jié)果生成語法樹,其中,所述語法樹的節(jié)點包括橫軸對象、縱軸對 象、切片軸對象、計算成員對象、計算單元對象和自定義函數(shù)CDF對象;執(zhí)行單元,用于當(dāng)執(zhí) 行所述語法樹上各種對象的多維查詢表達(dá)式時,如果需要調(diào)用函數(shù),先根據(jù)自定義函數(shù)的 函數(shù)定義判斷是否為自定義函數(shù),如果是,進(jìn)入自定義函數(shù)執(zhí)行過程,如果否,根據(jù)標(biāo)準(zhǔn)函 數(shù)的函數(shù)定義判斷是否為標(biāo)準(zhǔn)函數(shù),如果是標(biāo)準(zhǔn)函數(shù)則進(jìn)入標(biāo)注函數(shù)執(zhí)行過程。
優(yōu)選的,所述執(zhí)行單元包括自定義函數(shù)執(zhí)行單元,用于當(dāng)執(zhí)行所述語法樹上各種 對象的多維查詢表達(dá)式時,如果需要調(diào)用函數(shù),先根據(jù)自定義函數(shù)的函數(shù)定義判斷是否為 自定義函數(shù),如果是,進(jìn)入自定義函數(shù)執(zhí)行過程;標(biāo)準(zhǔn)函數(shù)執(zhí)行單元,用于當(dāng)判斷不是自定 義函數(shù)時,根據(jù)標(biāo)準(zhǔn)函數(shù)的函數(shù)定義判斷是否為標(biāo)準(zhǔn)函數(shù),如果是標(biāo)準(zhǔn)函數(shù)則進(jìn)入標(biāo)注函 數(shù)執(zhí)行過程。 優(yōu)選的,所述自定義函數(shù)執(zhí)行單元包括第一 自定義單元,用于利用 With[script-type]Function[ReturnType]FunName (ArgType argl, ArgType arg2) as '[Script]'的多維查詢表達(dá)式聲明自定義函數(shù),其中,[script-type]表示腳本類 型,ReturnType表示自定義函數(shù)的返回參數(shù)類型,argl和arg2表示自定義函數(shù)的參數(shù), ArgType表示自定義函數(shù)的參數(shù)類型,[Script]表示自定義函數(shù)的函數(shù)體;編譯單元,用于 編譯自定義函數(shù)的多維查詢表達(dá)式,生成動態(tài)Java類;調(diào)用單元,用于調(diào)用所述動態(tài)Java 類的生成方法,傳入自定義函數(shù)的參數(shù),并返回執(zhí)行結(jié)果;或者,第二自定義單元,用于利用 With [script-type] Function [ReturnType] F皿Name (Context ctx, ArgType argl, ArgType arg2)as '[Script]'的多維表達(dá)式聲明自定義函數(shù),其中,Contex參數(shù)表示自定義函數(shù)的 執(zhí)行上下文;編譯單元,用于編譯自定義函數(shù)的多維查詢表達(dá)式,生成動態(tài)Java類;調(diào)用單 元,用于調(diào)用所述動態(tài)Java類的生成方法,傳入自定義函數(shù)的參數(shù),并返回執(zhí)行結(jié)果。
優(yōu)選的,所述返回參數(shù)類型包括整數(shù)、浮點數(shù)、字符串、布爾、日期、成員、集合或 者維度。 優(yōu)選的,所述裝置還包括類型轉(zhuǎn)換單元,用于當(dāng)所述自定義函數(shù)的參數(shù)和執(zhí)行結(jié)果的類型與聲明自定義函數(shù)中的類型不同時,如果滿足隱式類型轉(zhuǎn)換規(guī)則,對所述自定義 函數(shù)的參數(shù)和執(zhí)行結(jié)果的類型進(jìn)行隱式類型轉(zhuǎn)換。 由上述實施例可以看出,在MDX查詢中直接定義自定義函數(shù),免去了類似于 SqlServer的編譯部署等復(fù)雜過程,簡單靈活。提高了開發(fā)人員在整個0LAP系統(tǒng)的開發(fā)過 程的工作效率。


為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn) 有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本 發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可 以根據(jù)這些附圖獲得其他的附圖。 圖1為本發(fā)明一種聯(lián)機(jī)分析處理服務(wù)器中多維查詢語句的解析方法的一個實施 例的流程圖; 圖2為本發(fā)明一種聯(lián)機(jī)分析處理服務(wù)器中多維查詢語句的解析方法的另一個實 施例的流程圖; 圖3為本發(fā)明一種聯(lián)機(jī)分析處理器服務(wù)器中多維查詢語句的解析裝置的一個實 施例的結(jié)構(gòu)圖。
具體實施例方式
為使本發(fā)明的上述目的、特征和優(yōu)點能夠更加明顯易懂,下面結(jié)合附圖對本發(fā)明 實施例進(jìn)行詳細(xì)描述。 本發(fā)明可用于眾多通用或?qū)S玫挠嬎阊b置環(huán)境或配置中。例如個人計算機(jī)、服務(wù) 器計算機(jī)、手持設(shè)備或便攜式設(shè)備、平板型設(shè)備、多處理器裝置、包括以上任何裝置或設(shè)備 的分布式計算環(huán)境等等。 本發(fā)明可以在由計算機(jī)執(zhí)行的計算機(jī)可執(zhí)行指令的一般上下文中描述,例如程序 模塊。 一般地,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、對象、組 件、數(shù)據(jù)結(jié)構(gòu)等等。也可以在分布式計算環(huán)境中實踐本發(fā)明,在這些分布式計算環(huán)境中,由 通過通信網(wǎng)絡(luò)而被連接的遠(yuǎn)程處理設(shè)備來執(zhí)行任務(wù)。在分布式計算環(huán)境中,程序模塊可以 位于包括存儲設(shè)備在內(nèi)的本地和遠(yuǎn)程計算機(jī)存儲介質(zhì)中。 請參閱圖l,其為本發(fā)明聯(lián)機(jī)分析處理服務(wù)器中多維查詢表達(dá)式的解析方法,包括 以下步驟 步驟101 :解析多維查詢語句,根據(jù)解析結(jié)果生成語法樹,其中,所述語法樹的節(jié) 點包括橫軸對象、縱軸對象、切片軸對象、計算成員對象、計算單元對象和自定義函數(shù)CDF 對象; 步驟102 :當(dāng)執(zhí)行所述語法樹上各種對象的多維查詢表達(dá)式時,如果需要調(diào)用函 數(shù),先根據(jù)自定義函數(shù)的函數(shù)定義判斷是否為自定義函數(shù),如果是,進(jìn)入自定義函數(shù)執(zhí)行過 程,如果否,根據(jù)標(biāo)準(zhǔn)函數(shù)的函數(shù)定義判斷是否為標(biāo)準(zhǔn)函數(shù),如果是標(biāo)準(zhǔn)函數(shù)則進(jìn)入標(biāo)注函 數(shù)執(zhí)行過程。 其中,自定義函數(shù)的函數(shù)聲明可以根據(jù)MDX中的with關(guān)鍵字按照如下任意方式實
6現(xiàn) 禾U用With [script-type] Function [ReturnType] F皿Name (ArgTypeargl, ArgType arg2)as ' [Script]'的多維查詢表達(dá)式聲明自定義函數(shù),其中,[script-type]表示腳本 類型,ReturnType表示自定義函數(shù)的返回參數(shù)類型,argl和arg2表示自定義函數(shù)的參 數(shù),ArgType表示自定義函數(shù)的參數(shù)類型,[Script]表示自定義函數(shù)的函數(shù)體;或者,利用 With [script-type] Function [ReturnType] F皿Name (Context ctx, ArgType argl, ArgType arg2)as '[Script]'的多維表達(dá)式聲明自定義函數(shù),其中,Contex參數(shù)表示自定義函數(shù)的 執(zhí)行上下文。 上述返回參數(shù)類型包括整數(shù)、浮點數(shù)、字符串、布爾、日期、成員、集合或者維度。
其中,自定義函數(shù)的執(zhí)行過程包括編譯自定義函數(shù)的多維查詢表達(dá)式,生成動態(tài) Java類;調(diào)用所述動態(tài)Java類的生成方法,傳入自定義函數(shù)的參數(shù),并返回執(zhí)行結(jié)果。
需要說明的是,當(dāng)所述自定義函數(shù)的參數(shù)和執(zhí)行結(jié)果的類型與聲明自定義函數(shù)中 的類型不同時,如果滿足隱式類型轉(zhuǎn)換規(guī)則,對所述自定義函數(shù)的參數(shù)和執(zhí)行結(jié)果的類型 進(jìn)行隱式類型轉(zhuǎn)換。 由上述實施例可以看出,在MDX查詢中直接定義自定義函數(shù),免去了類似于 SqlServer的編譯部署等復(fù)雜過程,簡單靈活。提高了開發(fā)人員在整個0LAP系統(tǒng)的開發(fā)過 程的工作效率。 此外,本實施例支持多種語法,如Java、 JavaScript,而且容易擴(kuò)展。Java平臺上
有很多開源免費的腳本可以直接使用,而在Jdk6內(nèi)預(yù)置了多種腳本語言。 另外,由于可以傳入上下文Context,可以突破傳統(tǒng)只能處理基本類型數(shù)據(jù)的限
制,可以訪問運算上下文,維度結(jié)構(gòu),以及其他資源。最大限度的開放接口,用戶可以處理任
意復(fù)雜的業(yè)務(wù)。 請參閱圖2,其為一種聯(lián)機(jī)分析處理服務(wù)器中多維查詢語句的解析方法的另一個 實施例的流程圖。本實施例以自定義函數(shù)在執(zhí)行計算成員對象的多維表達(dá)式時被調(diào)用為場 景,詳細(xì)說明對多維查詢語句的解析方法,該方法包括以下步驟 步驟201 :定義計算成員中的自定義函數(shù); 例如,本實施例根據(jù)MDX中的with關(guān)鍵字聲明各種功能的自定義函數(shù),具體可以 為 With Java Function Int Power(int value, int n)as ' int result = 1 ; for (int i = 0 ;i < n ;i++) result* = value ; ' Member Measures. [Power5]as 'Power(Measures. [Amount],5)' Select{Measures. Amount,Measures. Power5)on columns,Item, members on rows From cubel 從上述的多維查詢語句可以看出,利用了 With [script-type]
Function [ReturnType] F皿Name (ArgType argl , ArgType arg2)as '[Script]'的多維查詢
7表達(dá)式聲明自定義函數(shù)。其中,[script-type]表示腳本類型,在上述多維查詢語句中規(guī)定 了腳本類型為Java ;ReturnType表示自定義函數(shù)的返回參數(shù)類型,在上述多維查詢語句中 規(guī)定了返回參數(shù)類型為整數(shù)Int ;argl和arg2表示自定義函數(shù)的參數(shù),在上述多維查詢語 句中規(guī)定了兩個參數(shù)分別為value和n ;ArgType表示自定義函數(shù)的參數(shù)類型,在上述多維 查詢語句中分別規(guī)定了參數(shù)value和n的類型為整數(shù);[Script]表示自定義函數(shù)的函數(shù) 體,在上述多維查詢語句中規(guī)定了函數(shù)體主要是由for循環(huán)語句所完成的冪運算過程,結(jié) 果result為value的n次冪。 需要說明的是,還可以禾U用With [script-type] Function [ReturnType] F皿Name (Context ctx, ArgType argl, ArgType arg2)as ' [Script]'的多維表達(dá)式聲明 自定義函數(shù),其中,Contex參數(shù)表示自定義函數(shù)的執(zhí)行上下文。以使得在自定義函數(shù)中,系 統(tǒng)可以傳入上下文Context,通過Context提供的接口 ,使用戶既可以訪問到當(dāng)前運算單元 格,也可以訪問到維度元數(shù)據(jù),還可以訪問到其他任何可訪問到資源,如JDBC,進(jìn)行進(jìn)一步 的邏輯處理。通過這些邏輯處理,可以實現(xiàn)OLAP本身無法處理的業(yè)務(wù)邏輯,如權(quán)限控制等。
步驟202 :解析多維查詢語句,根據(jù)解析結(jié)果生成語法樹; 其中,數(shù)據(jù)處理終端在進(jìn)行語句的處理過程中,按照MDX的語法規(guī)則解析多維查 詢語句,MDX語法解析過程是根據(jù)左、右LR遞歸語法分析算法實現(xiàn)的。 所述語法樹即為一個MDXQurey對象,語法樹的節(jié)點除了包括橫軸對象、縱軸對 象、切片軸對象、計算成員對象和計算單元對象外,還包括自定義函數(shù)CDF對象。
例如,MDXQurey對象的結(jié)構(gòu)具體可以為
Class MdxQuery { CalculatedMember [] calculatedMembers ;//計算成員 CDF[]cdfs ;〃自定義函數(shù) Expression slicerExp ;//切片車由 Expression[]axisExps ;〃橫軸禾口縱軸 }其中,CalculatedMember和CellCalculation都含有用于計算的多維查詢表達(dá) 式,用于計算。SlicerE鄧在執(zhí)行后變成元組,AxisE鄧在執(zhí)行后變成集合。
例如,上述的CDF對象結(jié)構(gòu)具體可以為
Class CDF { String f皿Name ;〃函數(shù)名 int scriptType ;〃腳本類型 int ret證Type ;〃返回類型 int [] argTypes ;〃參數(shù)類型 Object argNames ;〃參數(shù)名 String script ;〃腳本文本 }
8
步驟203 :執(zhí)行橫軸對象、縱軸對象、切片軸對象的多維查詢表達(dá)式; 其中,橫軸為集合{Iteml, Item2, Item3,____},縱軸為集合{Measures. Amount,
Measures. Power5)。
步驟204 :遍歷數(shù)據(jù)區(qū)域,執(zhí)行數(shù)據(jù)區(qū)域中單元格的值; 其中,數(shù)據(jù)區(qū)域的單元格即為橫軸和縱軸交叉單元格,例如,當(dāng)執(zhí)行到當(dāng)執(zhí)行 到{Measures. Amount, Iteml}時,直接從底層數(shù)據(jù)訪問層獲取數(shù)據(jù),得到2 ;當(dāng)執(zhí)行到 {Measures. Power5, Iteml}時,由于Power5是計算成員,則需要調(diào)用計算成員的多維查詢 表達(dá)式Power (Measures. [Amount] , 5)來執(zhí)行,轉(zhuǎn)入多維查詢表達(dá)式執(zhí)行流程。
例如,執(zhí)行多維查詢表達(dá)式時,首先調(diào)用語法解析,獲得多維查詢表達(dá)式的函數(shù) 名、參數(shù)類型和參數(shù)值;然后再根據(jù)獲得多維查詢表達(dá)式的函數(shù)名、參數(shù)類型和參數(shù)值是否 與自定義函數(shù)的函數(shù)定義是否匹配的方式來判斷是否為自定義函數(shù),如果是自定義函數(shù), 則進(jìn)入自定義函數(shù)的執(zhí)行流程,如果不是自定義函數(shù),再從0LAP系統(tǒng)參數(shù)表中查詢是否為 標(biāo)準(zhǔn)函數(shù),如果是標(biāo)準(zhǔn)函數(shù)則進(jìn)入標(biāo)準(zhǔn)函數(shù)執(zhí)行流程。
具體的,自定義函數(shù)的執(zhí)行流程可以包括 1、如果第一次執(zhí)行自定義函數(shù)的多維查詢表達(dá)式,編譯自定義函數(shù)的多維查詢表 達(dá)式,生成動態(tài)Java類。 其中,如果是Java類型,使用編譯工具JavaC編譯生成一個類, 一個方法;如果是 JavaScript類型,生成一個代理類,該代理類通過開源JavaScript腳本引擎調(diào)用Script 。
2、調(diào)用動態(tài)Java類的生成方法,傳入自定義函數(shù)的參數(shù),并返回執(zhí)行結(jié)果。
3、自定義函數(shù)的參數(shù)和執(zhí)行結(jié)果的類型與聲明自定義函數(shù)中的類型不同時,對所 述自定義函數(shù)的參數(shù)和執(zhí)行結(jié)果的類型進(jìn)行隱式類型轉(zhuǎn)換。如int和double之間可以轉(zhuǎn) 換,int、 double可轉(zhuǎn)換為String等。
步驟205 :組裝執(zhí)行結(jié)果集。 其中,經(jīng)過上述解析處理后,執(zhí)行結(jié)果的表格形式即為
ItemAmountPower5
Iteml232
Item241024
Item310100000 由上述實施例可以看出,在MDX查詢中直接定義自定義函數(shù),免去了類似于 SqlServer的編譯部署等復(fù)雜過程,簡單靈活。提高了開發(fā)人員在整個0LAP系統(tǒng)的開發(fā)過 程的工作效率。 此外,支持多種語法,如Java、 JavaScript,而且容易擴(kuò)展。Java平臺上有很多開 源免費的腳本可以直接使用,而在Jdk6內(nèi)預(yù)置了多種腳本語言。 另外,由于可以傳入上下文Context,可以突破傳統(tǒng)只能處理基本類型數(shù)據(jù)的限
9制,可以訪問運算上下文,維度結(jié)構(gòu),以及其他資源。最大限度的開放接口,用戶可以處理任 意復(fù)雜的業(yè)務(wù)。 與上述一種聯(lián)機(jī)分析處理服務(wù)器中多維查詢語句的解析方法相對應(yīng),本發(fā)明實施 例還提供了一種聯(lián)機(jī)分析處理器器中多維查詢語句的解析裝置。請參閱圖3,其為本發(fā)明一 種聯(lián)機(jī)分析處理服務(wù)器中多維查詢語句的解析裝置的一個實施例的結(jié)構(gòu)圖,該裝置包括 解析單元301和執(zhí)行單元302。下面結(jié)合該裝置的工作原理進(jìn)一步介紹其內(nèi)部結(jié)構(gòu)以及連 接關(guān)系。 解析單元301,用于解析多維查詢語句,根據(jù)解析結(jié)果生成語法樹,其中,所述語法 樹的節(jié)點包括橫軸對象、縱軸對象、切片軸對象、計算成員對象、計算單元對象和自定義函 數(shù)CDF對象; 執(zhí)行單元302,用于當(dāng)執(zhí)行所述語法樹上各種對象的多維查詢表達(dá)式時,如果需要 調(diào)用函數(shù),先根據(jù)自定義函數(shù)的函數(shù)定義判斷是否為自定義函數(shù),如果是,進(jìn)入自定義函數(shù) 執(zhí)行過程,如果否,根據(jù)標(biāo)準(zhǔn)函數(shù)的函數(shù)定義判斷是否為標(biāo)準(zhǔn)函數(shù),如果是標(biāo)準(zhǔn)函數(shù)則進(jìn)入 標(biāo)注函數(shù)執(zhí)行過程。 其中,執(zhí)行單元302包括自定義函數(shù)執(zhí)行單元3021和標(biāo)準(zhǔn)函數(shù)執(zhí)行單元3022,
自定義函數(shù)執(zhí)行單元3021,用于當(dāng)執(zhí)行所述語法樹上各種對象的多維查詢表達(dá)式 時,如果需要調(diào)用函數(shù),先根據(jù)自定義函數(shù)的函數(shù)定義判斷是否為自定義函數(shù),如果是,進(jìn) 入自定義函數(shù)執(zhí)行過程; 標(biāo)準(zhǔn)函數(shù)執(zhí)行單元3022,用于當(dāng)判斷不是自定義函數(shù)時,根據(jù)標(biāo)準(zhǔn)函數(shù)的函數(shù)定 義判斷是否為標(biāo)準(zhǔn)函數(shù),如果是標(biāo)準(zhǔn)函數(shù)則進(jìn)入標(biāo)注函數(shù)執(zhí)行過程。
其中,自定義函數(shù)執(zhí)行單元3021包括第一自定義單元、編譯單元和調(diào)用單元,
第 一 自定義單元,用于利用With [script-type] Function [ReturnType] F皿Name (ArgType argl,ArgType arg2)as ' [Script],的多維查詢表達(dá)式聲明自定義函數(shù), 其中,[script-type]表示腳本類型,ReturnType表示自定義函數(shù)的返回參數(shù)類型,argl和 arg2表示自定義函數(shù)的參數(shù),ArgType表示自定義函數(shù)的參數(shù)類型,[Script]表示自定義 函數(shù)的函數(shù)體; 編譯單元,用于編譯自定義函數(shù)的多維查詢表達(dá)式,生成動態(tài)Java類; 調(diào)用單元,用于調(diào)用所述動態(tài)Java類的生成方法,傳入自定義函數(shù)的參數(shù),并返
回執(zhí)行結(jié)果。 或者,上述第一自定義單元也可以替換為第二自定義單元,則自定義函數(shù)執(zhí)行單 元3021包括第二自定義單元、編譯單元和調(diào)用單元,第二自定義單元,用于禾U用With [script-type] Function [ReturnType]
F皿Name (Context ctx,ArgType argl,ArgType arg2)as '[Script]'的多維表達(dá)式聲明自
定義函數(shù),其中,Contex參數(shù)表示自定義函數(shù)的執(zhí)行上下文。 編譯單元,用于編譯自定義函數(shù)的多維查詢表達(dá)式,生成動態(tài)Java類; 調(diào)用單元,用于調(diào)用所述動態(tài)Java類的生成方法,傳入自定義函數(shù)的參數(shù),并返
回執(zhí)行結(jié)果。 上述的返回參數(shù)類型包括整數(shù)、浮點數(shù)、字符串、布爾、日期、成員、集合或者維度。
需要說明的是,所述裝置還包括類型轉(zhuǎn)換單元,用于當(dāng)所述自定義函數(shù)的參數(shù)和 執(zhí)行結(jié)果的類型與聲明自定義函數(shù)中的類型不同時,如果滿足隱式類型轉(zhuǎn)換規(guī)則,對所述 自定義函數(shù)的參數(shù)和執(zhí)行結(jié)果的類型進(jìn)行隱式類型轉(zhuǎn)換。 由上述實施例可以看出,在MDX查詢中直接定義自定義函數(shù),免去了類似于 SqlServer的編譯部署等復(fù)雜過程,簡單靈活。提高了開發(fā)人員在整個MOLAP系統(tǒng)的開發(fā)過 程的工作效率。 此外,支持多種語法,如Java、 JavaScript,而且容易擴(kuò)展。Java平臺上有很多開 源免費的腳本可以直接使用,而在Jdk6內(nèi)預(yù)置了多種腳本語言。 另外,由于可以傳入上下文Context,可以突破傳統(tǒng)只能處理基本類型數(shù)據(jù)的限 制,可以訪問運算上下文,維度結(jié)構(gòu),以及其他資源。最大限度的開放接口,用戶可以處理任 意復(fù)雜的業(yè)務(wù)。 需要說明的是,本領(lǐng)域普通技術(shù)人員可以理解實現(xiàn)上述實施例方法中的全部或部 分流程,是可以通過計算機(jī)程序來指令相關(guān)的硬件來完成,所述的程序可存儲于一計算機(jī) 可讀取存儲介質(zhì)中,該程序在執(zhí)行時,可包括如上述各方法的實施例的流程。其中,所述的 存儲介質(zhì)可為磁碟、光盤、只讀存儲記憶體(Read-Only Memory, ROM)或隨機(jī)存儲記憶體 (Random AccessMemory, RAM)等。 以上對本發(fā)明所提供的一種聯(lián)機(jī)分析系統(tǒng)中多維查詢語句的解析方法和裝置進(jìn) 行了詳細(xì)介紹,本文中應(yīng)用了具體實施例對本發(fā)明的原理及實施方式進(jìn)行了闡述,以上實 施例的說明只是用于幫助理解本發(fā)明的方法及其核心思想;同時,對于本領(lǐng)域的一般技術(shù) 人員,依據(jù)本發(fā)明的思想,在具體實施方式
及應(yīng)用范圍上均會有改變之處,綜上所述,本說 明書內(nèi)容不應(yīng)理解為對本發(fā)明的限制。
權(quán)利要求
一種聯(lián)機(jī)分析處理服務(wù)器中多維查詢語句的解析方法,其特征在于,包括解析多維查詢語句,根據(jù)解析結(jié)果生成語法樹,其中,所述語法樹的節(jié)點包括橫軸對象、縱軸對象、切片軸對象、計算成員對象、計算單元對象和自定義函數(shù)CDF對象;當(dāng)執(zhí)行所述語法樹上各種對象的多維查詢表達(dá)式時,如果需要調(diào)用函數(shù),先根據(jù)自定義函數(shù)的函數(shù)定義判斷是否為自定義函數(shù),如果是,進(jìn)入自定義函數(shù)執(zhí)行過程,如果否,根據(jù)標(biāo)準(zhǔn)函數(shù)的函數(shù)定義判斷是否為標(biāo)準(zhǔn)函數(shù),如果是標(biāo)準(zhǔn)函數(shù)則進(jìn)入標(biāo)注函數(shù)執(zhí)行過程。
2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述自定義函數(shù)的函數(shù)聲明可以根據(jù)MDX 中的with關(guān)鍵字按照如下方式實現(xiàn)利 用With [script-type] Function [ReturnType] F皿Name (ArgTypeargl , ArgType arg2)as ' [Script]'的多維查詢表達(dá)式聲明自定義函數(shù),其中,[script-type]表示腳本 類型,ReturnType表示自定義函數(shù)的返回參數(shù)類型,argl和arg2表示自定義函數(shù)的參數(shù), ArgType表示自定義函數(shù)的參數(shù)類型,[Script]表示自定義函數(shù)的函數(shù)體;或者,利用With [script-type] Function [ReturnType] F皿Name (Contextctx, ArgType argl , ArgType arg2)as '[Script]'的多維表達(dá)式聲明自定義函數(shù),其中,Contex參數(shù)表示自定 義函數(shù)的執(zhí)行上下文。
3. 根據(jù)權(quán)利要求2所述的方法,其特征在于,所述返回參數(shù)類型包括整數(shù)、浮點數(shù)、字 符串、布爾、日期、成員、集合或者維度。
4. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述自定義函數(shù)執(zhí)行過程包括 編譯自定義函數(shù)的多維查詢表達(dá)式,生成動態(tài)Java類;調(diào)用所述動態(tài)Java類的生成方法,傳入自定義函數(shù)的參數(shù),并返回執(zhí)行結(jié)果。
5. 根據(jù)權(quán)利要求4所述的方法,其特征在于,所述方法還包括當(dāng)所述自定義函數(shù)的參數(shù)和執(zhí)行結(jié)果的類型與聲明自定義函數(shù)中的類型不同時,如果 所述自定義函數(shù)的參數(shù)和執(zhí)行結(jié)果的類型滿足隱式類型轉(zhuǎn)換規(guī)則,對所述自定義函數(shù)的參 數(shù)和執(zhí)行結(jié)果的類型進(jìn)行隱式類型轉(zhuǎn)換。
6. —種聯(lián)機(jī)分析處理服務(wù)器中多維查詢語句的解析裝置,其特征在于,包括 解析單元,用于解析多維查詢語句,根據(jù)解析結(jié)果生成語法樹,其中,所述語法樹的節(jié)點包括橫軸對象、縱軸對象、切片軸對象、計算成員對象、計算單元對象和自定義函數(shù)CDF對象;執(zhí)行單元,用于當(dāng)執(zhí)行所述語法樹上各種對象的多維查詢表達(dá)式時,如果需要調(diào)用函 數(shù),先根據(jù)自定義函數(shù)的函數(shù)定義判斷是否為自定義函數(shù),如果是,進(jìn)入自定義函數(shù)執(zhí)行過 程,如果否,根據(jù)標(biāo)準(zhǔn)函數(shù)的函數(shù)定義判斷是否為標(biāo)準(zhǔn)函數(shù),如果是標(biāo)準(zhǔn)函數(shù)則進(jìn)入標(biāo)注函 數(shù)執(zhí)行過程。
7. 根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述執(zhí)行單元包括 自定義函數(shù)執(zhí)行單元,用于當(dāng)執(zhí)行所述語法樹上各種對象的多維查詢表達(dá)式時,如果需要調(diào)用函數(shù),先根據(jù)自定義函數(shù)的函數(shù)定義判斷是否為自定義函數(shù),如果是,進(jìn)入自定義 函數(shù)執(zhí)行過程;標(biāo)準(zhǔn)函數(shù)執(zhí)行單元,用于當(dāng)判斷不是自定義函數(shù)時,根據(jù)標(biāo)準(zhǔn)函數(shù)的函數(shù)定義判斷是 否為標(biāo)準(zhǔn)函數(shù),如果是標(biāo)準(zhǔn)函數(shù)則進(jìn)入標(biāo)注函數(shù)執(zhí)行過程。
8. 根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述自定義函數(shù)執(zhí)行單元包括第 一 自定義單元,用于禾U 用With [script-type] Function [ReturnType] F皿Name (ArgType argl,ArgType arg2)as ' [Script],的多維查詢表達(dá)式聲明自定義函數(shù), 其中,[script-type]表示腳本類型,ReturnType表示自定義函數(shù)的返回參數(shù)類型,argl和 arg2表示自定義函數(shù)的參數(shù),ArgType表示自定義函數(shù)的參數(shù)類型,[Script]表示自定義 函數(shù)的函數(shù)體;編譯單元,用于編譯自定義函數(shù)的多維查詢表達(dá)式,生成動態(tài)Java類; 調(diào)用單元,用于調(diào)用所述動態(tài)Java類的生成方法,傳入自定義函數(shù)的參數(shù),并返回執(zhí) 行結(jié)果; 或者,第 二 自定義單元,用于禾U 用With [script-type] Function [ReturnType] F皿Name (Context ctx,ArgType argl,ArgType arg2)as '[Script]'的多維表達(dá)式聲明自 定義函數(shù),其中,Contex參數(shù)表示自定義函數(shù)的執(zhí)行上下文;編譯單元,用于編譯自定義函數(shù)的多維查詢表達(dá)式,生成動態(tài)Java類; 調(diào)用單元,用于調(diào)用所述動態(tài)Java類的生成方法,傳入自定義函數(shù)的參數(shù),并返回執(zhí) 行結(jié)果。
9. 根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述返回參數(shù)類型包括整數(shù)、浮點數(shù)、字 符串、布爾、日期、成員、集合或者維度。
10. 根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述裝置還包括類型轉(zhuǎn)換單元,用于當(dāng)所述自定義函數(shù)的參數(shù)和執(zhí)行結(jié)果的類型與聲明自定義函數(shù)中 的類型不同時,如果滿足隱式類型轉(zhuǎn)換規(guī)則,對所述自定義函數(shù)的參數(shù)和執(zhí)行結(jié)果的類型 進(jìn)行隱式類型轉(zhuǎn)換。
全文摘要
本發(fā)明實施例公開了一種聯(lián)機(jī)分析處理服務(wù)器中多維查詢語句的解析方法和裝置。其中的方法包括解析多維查詢語句,根據(jù)解析結(jié)果生成語法樹,其中,所述語法樹的節(jié)點包括橫軸對象、縱軸對象、切片軸對象、計算成員對象、計算單元對象和自定義函數(shù)CDF對象;當(dāng)執(zhí)行所述語法樹上各種對象的多維查詢表達(dá)式時,如果需要調(diào)用函數(shù),先根據(jù)自定義函數(shù)的函數(shù)定義判斷是否為自定義函數(shù),如果是,進(jìn)入自定義函數(shù)執(zhí)行過程,如果否,根據(jù)標(biāo)準(zhǔn)函數(shù)的函數(shù)定義判斷是否為標(biāo)準(zhǔn)函數(shù),如果是標(biāo)準(zhǔn)函數(shù)則進(jìn)入標(biāo)注函數(shù)執(zhí)行過程。根據(jù)本發(fā)明實施例,可以提高開發(fā)人員在整個OLAP系統(tǒng)的開發(fā)過程的工作效率。
文檔編號G06F9/45GK101710273SQ200910110280
公開日2010年5月19日 申請日期2009年10月28日 優(yōu)先權(quán)日2009年10月28日
發(fā)明者林志賢 申請人:金蝶軟件(中國)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1