專利名稱:數(shù)據(jù)關(guān)聯(lián)查詢方法和數(shù)據(jù)關(guān)聯(lián)查詢裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及報表分析領(lǐng)域,具體而言,涉及數(shù)據(jù)關(guān)聯(lián)查詢方法和數(shù)據(jù)關(guān)聯(lián)查詢裝置。
背景技術(shù):
在報表分析領(lǐng)域中,對事實表與維表進(jìn)行關(guān)聯(lián)后查詢出結(jié)果并展現(xiàn)到報表當(dāng)中, 是非常典型的應(yīng)用。以ERP(Enterprise Resource Planning,企業(yè)資源計劃)軟件產(chǎn)品和關(guān)系型數(shù)據(jù)庫為例,單據(jù)表可認(rèn)為是事實表,數(shù)據(jù)量通常很大;基礎(chǔ)檔案表可認(rèn)為是維度表,數(shù)據(jù)量視檔案類型的不同有大有小。單據(jù)表中存儲有基礎(chǔ)檔案表的主鍵作為外鍵,可以用比較簡單的SQL把單據(jù)表存儲的業(yè)務(wù)信息(如單據(jù)號、單據(jù)日期、數(shù)量、金額等)以及相關(guān)基礎(chǔ)檔案的主鍵查出來,但報表中要求不能把主鍵展現(xiàn)給用戶,而應(yīng)展現(xiàn)基礎(chǔ)檔案中有業(yè)務(wù)意義的信息,如編碼、名稱等。
使用單據(jù)表連接基礎(chǔ)檔案表的方式,理論上可以解決這一問題,但在大數(shù)據(jù)量環(huán)境下會出現(xiàn)效率瓶頸。例如,在關(guān)聯(lián)銷售單據(jù)表和存貨檔案表時,兩者都可能有十萬行量級以上的數(shù)據(jù),現(xiàn)要求從單據(jù)表取出符合特定條件的一萬行數(shù)據(jù),并帶出相關(guān)聯(lián)的存貨名稱, 假如通過表連接的方式,則需要對銷售單據(jù)和存貨檔案兩張大表進(jìn)行連接,再分別取出所需的字段。如圖1所示,兩個大數(shù)據(jù)的表連接通過SQL進(jìn)行查詢,得到大量的關(guān)聯(lián)數(shù)據(jù)。
而在實際情況中,需要關(guān)聯(lián)的遠(yuǎn)不止存貨一個檔案,很可能還要關(guān)聯(lián)客戶、部門、 人員等等其它檔案。對這么多大數(shù)據(jù)的表做多表聯(lián)查,勢必影響到系統(tǒng)運(yùn)行的效率。除了關(guān)聯(lián)的廣度外,還有關(guān)聯(lián)的深度帶來的影響一可能用戶需要在單據(jù)關(guān)聯(lián)存貨檔案之后,還要將存貨檔案關(guān)聯(lián)存貨分類檔案,以便獲取存貨分類的名稱來顯示在報表上,這同樣增加了多表關(guān)聯(lián)SQL的復(fù)雜度及其執(zhí)行開銷。
現(xiàn)有技術(shù)中,對事實表與維表進(jìn)行關(guān)聯(lián)的方案主要有以下三種
方案一國內(nèi)ERP軟件常用此方案——在數(shù)據(jù)模型設(shè)計部分,要求用戶通過數(shù)據(jù)字典或元數(shù)據(jù)等方式,把最終要取數(shù)的字段全部指定完成;然后在格式設(shè)計過程中,將設(shè)計好的數(shù)據(jù)模型插入到報表當(dāng)中某個區(qū)域,瀏覽報表時將數(shù)據(jù)模型轉(zhuǎn)化為多表聯(lián)查SQL,直接到數(shù)據(jù)庫執(zhí)行查詢。另有一些支持異步報表的產(chǎn)品,在查詢后會將查詢結(jié)果物化到數(shù)據(jù)庫或數(shù)據(jù)倉庫。
方案二 國內(nèi)報表廠商常用此方案——在報表格式設(shè)計過程中,指定各單元格或區(qū)域單元的取數(shù)公式,利用這些公式來取到所需的字段值。公式的執(zhí)行根據(jù)其語法解析器的定義而定,有的公式是轉(zhuǎn)化為SQL執(zhí)行,有的公式可能會到緩存中加載數(shù)據(jù)。
方案三國外BI (Business Intelligence,商業(yè)智能)廠商常用此方案一在數(shù)據(jù)模型設(shè)計部分建立語義層,語義層包括待查詢的數(shù)據(jù)表及其連接關(guān)系,但不含查詢字段;然后在格式設(shè)計過程中,在語義層中選擇字段或字段表達(dá)式,拖入報表并最終展現(xiàn)。執(zhí)行時根據(jù)字段描述,調(diào)用SQL及函數(shù)執(zhí)行器予以執(zhí)行。
上述方案一和方案三,在解決前述應(yīng)用問題時,仍需以多表聯(lián)查的SQL作為主要實現(xiàn)方案,難以解決多張維表在廣度和深度關(guān)聯(lián)字段過程中給系統(tǒng)運(yùn)行效率帶來的壓力。 方案二雖然考慮到了采用SQL+緩存公式聯(lián)合作戰(zhàn)的方式,但由于單元公式的方案難以滿足數(shù)據(jù)層的建模需求,因此給用戶在數(shù)據(jù)模型復(fù)用性和操作交互技術(shù)方面都帶來不便和困擾。此外,上述方案對于關(guān)聯(lián)字段的自由擴(kuò)展性也存在約束,也有相關(guān)方案雖然考慮到了可關(guān)聯(lián)的擴(kuò)展字段的查詢,但最終仍局限于通過SQL來查詢原始數(shù)據(jù)+擴(kuò)展數(shù)據(jù)的方案,沒有解決大數(shù)據(jù)聯(lián)查引起的性能問題。
因此,為了解決以上技術(shù)問題,需要一種數(shù)據(jù)關(guān)聯(lián)查詢技術(shù),能夠高效關(guān)聯(lián)事實表和維度表并快速查詢出所需數(shù)據(jù),在提高查詢效率的同時能不影響系統(tǒng)的運(yùn)行效率。發(fā)明內(nèi)容
基于上述背景技術(shù)的考慮,本發(fā)明所要解決的一個技術(shù)問題是提供一種數(shù)據(jù)關(guān)聯(lián)查詢裝置,本發(fā)明所要解決的又一個技術(shù)問題是提供一種數(shù)據(jù)關(guān)聯(lián)查詢方法,避免大數(shù)據(jù)量的兩個數(shù)據(jù)表在關(guān)聯(lián)查詢時給系統(tǒng)帶來的壓力,并且可保證關(guān)聯(lián)字段的可擴(kuò)展性和查詢的可復(fù)用性。
有鑒于此,根據(jù)本發(fā)明的一個方面,提供了一種數(shù)據(jù)關(guān)聯(lián)查詢裝置,包括數(shù)據(jù)獲取單元,用于獲取事實表的基礎(chǔ)字段,基于所述基礎(chǔ)字段選擇維表上的字段作為關(guān)聯(lián)所述事實表和所述維表的關(guān)聯(lián)字段,其中,所述基礎(chǔ)字段和所述關(guān)聯(lián)字段為待查詢字段,將所述基礎(chǔ)字段及其所屬數(shù)據(jù)表發(fā)送至SQL執(zhí)行單元;SQL執(zhí)行單元,基于所述基礎(chǔ)字段及其所屬數(shù)據(jù)表,采用SQL語句執(zhí)行查詢操作,得到結(jié)果集;緩存取數(shù)公式構(gòu)造單元,從所述結(jié)果集中獲取與所述關(guān)聯(lián)字段對應(yīng)的主鍵值,結(jié)合所述關(guān)聯(lián)字段所在的數(shù)據(jù)路徑構(gòu)造緩存取數(shù)公式;緩存執(zhí)行單元,根據(jù)所述緩存取數(shù)公式獲取所述關(guān)聯(lián)字段的取值,將所述關(guān)聯(lián)字段的取值和所述結(jié)果集進(jìn)行組合得到最終查詢結(jié)果。在該技術(shù)方案中,同時支持SQL查詢和緩存公式查詢,避免了大數(shù)據(jù)量事實表和維度表的關(guān)聯(lián)查詢給系統(tǒng)帶來的致命壓力,提高了查詢效率。
以上技術(shù)方案中,優(yōu)選地,所述數(shù)據(jù)關(guān)聯(lián)查詢裝置,還包括數(shù)據(jù)字典建立單元,用于建立數(shù)據(jù)字典樹,提供給所述數(shù)據(jù)獲取單元,在所述數(shù)據(jù)字典樹中選擇所述待查詢字段。 在該技術(shù)方案中,建立數(shù)據(jù)字典樹使得數(shù)據(jù)庫中數(shù)據(jù)的展現(xiàn)更加直觀,方便用戶根據(jù)自己的需求選擇所需的展現(xiàn)內(nèi)容;另外,用戶可以根據(jù)自身業(yè)務(wù)情況,自己建立數(shù)據(jù)字典樹,自主地設(shè)置基礎(chǔ)字段和關(guān)聯(lián)字段,基礎(chǔ)字段直接通過SQL查詢,關(guān)聯(lián)字段則通過緩存取數(shù)公式進(jìn)行查詢,亦即實現(xiàn)了對某種業(yè)務(wù)屬性采用何種查詢方式可以由用戶自己定制,更加方便和人性化。
以上技術(shù)方案中,優(yōu)選地,所述數(shù)據(jù)字典建立單元還用于為選中的基礎(chǔ)字段構(gòu)造子樹,所述基礎(chǔ)字段包括主鍵,所述主鍵對應(yīng)所述關(guān)聯(lián)字段,在所述子樹中選擇所述關(guān)聯(lián)字段。在該技術(shù)方案中,數(shù)據(jù)字典樹不僅支持用戶選擇基礎(chǔ)字段,而且同時支持用戶選擇子樹中的關(guān)聯(lián)字段,保證了關(guān)聯(lián)字段的可擴(kuò)展性,豐富了報表的展現(xiàn)內(nèi)容。
以上技術(shù)方案中,優(yōu)選地,所述數(shù)據(jù)關(guān)聯(lián)查詢裝置,還包括報表生成單元,將所述基礎(chǔ)字段和所述關(guān)聯(lián)字段插入報表中,作為報表的待展現(xiàn)字段,在所述報表中展現(xiàn)與所述待展現(xiàn)字段相對應(yīng)的所述最終查詢結(jié)果。在該技術(shù)方案中,對用戶而言只需選擇所需的查詢內(nèi)容,便可以將所選擇查詢內(nèi)容的結(jié)果直接通過報表展現(xiàn)出來,直觀并且方便快捷。
以上技術(shù)方案中,優(yōu)選地,所述數(shù)據(jù)關(guān)聯(lián)查詢裝置,還包括緩存單元,用于根據(jù)所述緩存取數(shù)公式中的主鍵值查找到所屬數(shù)據(jù)表的其他業(yè)務(wù)屬性;所述緩存取數(shù)公式構(gòu)造單元包括計算子單元,利用樹節(jié)點算法計算出所選取的關(guān)聯(lián)字段在所述數(shù)據(jù)字典中的路徑, 根據(jù)所述路徑上的節(jié)點形成數(shù)組或字符分隔串,得到具有所述關(guān)聯(lián)字段的主鍵值的所述緩存取數(shù)公式。在該技術(shù)方案中,通過建立緩存取數(shù)公式,保證了查詢關(guān)聯(lián)字段的可重復(fù)性, 使用戶在查詢關(guān)聯(lián)字段的內(nèi)容時,可以直接根據(jù)所構(gòu)建的緩存取數(shù)公式進(jìn)行查詢,大大地提高了查詢效率,同時降低了硬件設(shè)備的負(fù)荷。
根據(jù)本發(fā)明的另一個方面,還提供了一種數(shù)據(jù)關(guān)聯(lián)查詢方法,包括步驟202,獲取事實表的基礎(chǔ)字段,基于所述基礎(chǔ)字段選擇維表上的字段作為關(guān)聯(lián)所述事實表和所述維表的關(guān)聯(lián)字段,其中,所述基礎(chǔ)字段和所述關(guān)聯(lián)字段為待查詢字段;步驟204,基于所述基礎(chǔ)字段及其所屬數(shù)據(jù)表,采用SQL語句執(zhí)行查詢操作,得到結(jié)果集;步驟206,從所述結(jié)果集中獲取與所述關(guān)聯(lián)字段對應(yīng)的主鍵值,結(jié)合所述關(guān)聯(lián)字段所在的數(shù)據(jù)路徑構(gòu)造緩存取數(shù)公式,根據(jù)所述緩存取數(shù)公式獲取所述關(guān)聯(lián)字段的取值,將所述關(guān)聯(lián)字段的取值和所述結(jié)果集進(jìn)行組合得到最終查詢結(jié)果。在該技術(shù)方案中,同時支持SQL查詢和緩存公式查詢,避免了大數(shù)據(jù)量事實表和維度表的關(guān)聯(lián)查詢給系統(tǒng)帶來的致命壓力,提高了查詢效率。
以上技術(shù)方案中,優(yōu)選地,所述步驟202還包括建立數(shù)據(jù)字典樹,在所述數(shù)據(jù)字典樹中選擇所述待查詢字段。在該技術(shù)方案中,建立數(shù)據(jù)字典樹使得數(shù)據(jù)庫中數(shù)據(jù)的展現(xiàn)更加直觀,方便用戶根據(jù)自己的需求選擇所需的展現(xiàn)內(nèi)容;另外,用戶可以根據(jù)自身業(yè)務(wù)情況,自己建立數(shù)據(jù)字典樹,自主地設(shè)置基礎(chǔ)字段和關(guān)聯(lián)字段,基礎(chǔ)字段直接通過SQL查詢, 關(guān)聯(lián)字段則通過緩存取數(shù)公式進(jìn)行查詢,亦即實現(xiàn)了對某種業(yè)務(wù)屬性采用何種查詢方式可以由用戶自己定制,更加方便和人性化。
以上技術(shù)方案中,優(yōu)選地,所述步驟202還包括為選中的基礎(chǔ)字段構(gòu)造子樹,所述基礎(chǔ)字段包括主鍵,所述主鍵對應(yīng)所述關(guān)聯(lián)字段,在所述子樹中選擇所述關(guān)聯(lián)字段。在該技術(shù)方案中,數(shù)據(jù)字典樹不僅支持用戶選擇基礎(chǔ)字段,而且同時支持用戶選擇子樹中的關(guān)聯(lián)字段,保證了關(guān)聯(lián)字段的可擴(kuò)展性,豐富了報表的展現(xiàn)內(nèi)容。
以上技術(shù)方案中,優(yōu)選地,還包括將所述基礎(chǔ)字段和所述關(guān)聯(lián)字段插入報表中,作為報表的待展現(xiàn)字段,將在所述報表中展現(xiàn)與所述待展現(xiàn)字段相對應(yīng)的所述最終查詢結(jié)果。在該技術(shù)方案中,對用戶而言只需選擇所需的查詢內(nèi)容,便可以將所選擇查詢內(nèi)容的結(jié)果直接通過報表展現(xiàn)出來,方便快捷。
以上技術(shù)方案中,優(yōu)選地,所述緩存取數(shù)公式的形成方法包括利用樹節(jié)點算法計算出所選取的關(guān)聯(lián)字段在所述數(shù)據(jù)字典中的路徑;根據(jù)所述路徑上的節(jié)點形成數(shù)組或字符分隔串,得到具有所述關(guān)聯(lián)字段的主鍵值的所述緩存取公式。在該技術(shù)方案中,通過建立緩存取數(shù)公式,保證了查詢關(guān)聯(lián)字段的可重復(fù)性,使用戶在查詢關(guān)聯(lián)字段的內(nèi)容時,可以直接根據(jù)所構(gòu)建的緩存取數(shù)公式進(jìn)行查詢,大大地提高了查詢效率,同時降低了硬件設(shè)備的負(fù)荷。
通過以上技術(shù)方案,可以實現(xiàn)同時支持SQL查詢和緩存公式查詢,將兩者結(jié)合應(yīng)用,避免了大數(shù)據(jù)量事實表和維度表的關(guān)聯(lián)查詢給系統(tǒng)帶來的致命壓力,提高了查詢效率; 對某種業(yè)務(wù)屬性采用何種查詢方式可以由用戶自己定制,更加方便和人性化;通過建立數(shù)據(jù)字典保證了關(guān)聯(lián)字段的可擴(kuò)展性和查詢的可復(fù)用性。
圖1示出了相關(guān)技術(shù)中的事實表與維度表進(jìn)行連接查詢的示意圖2示出了根據(jù)本發(fā)明的實施例的在建立的數(shù)據(jù)字典樹中選擇待查詢字段的截圖3示出了根據(jù)本發(fā)明的實施例的保存用戶的選擇結(jié)果的截圖4示出了根據(jù)本發(fā)明的實施例的操作者所設(shè)計的報表的截圖5示出了根據(jù)本發(fā)明實施例的由基礎(chǔ)字段和所查單據(jù)的主鍵構(gòu)成的混合樹的截圖6示出了根據(jù)本發(fā)明實施例的在所查詢單據(jù)的主鍵下的子樹中選擇關(guān)聯(lián)字段的截圖7示出了根據(jù)本發(fā)明實施例的數(shù)據(jù)關(guān)聯(lián)查詢裝置的框圖8示出了根據(jù)本發(fā)明實施例的數(shù)據(jù)關(guān)聯(lián)查詢方法的流程圖9示出了根據(jù)本發(fā)明又一實施例的數(shù)據(jù)關(guān)聯(lián)查詢方法的流程圖IOA示出了根據(jù)本發(fā)明實施例的數(shù)據(jù)字典中選擇待查字段界面的截圖IOB示出了根據(jù)本發(fā)明實施例的待展現(xiàn)字段插入報表所形成的報表格式界面的截圖IOC示出了根據(jù)本發(fā)明實施例的將選擇的關(guān)聯(lián)字段插入報表所形成的報表格式界面的截圖;以及
圖IOD示出了根據(jù)本發(fā)明實施例的在報表中根據(jù)待查詢字段展現(xiàn)出查詢結(jié)果的截圖。
具體實施方式
為了能夠更清楚地理解本發(fā)明的上述目的、特征和優(yōu)點,下面結(jié)合附圖和具體實施方式
對本發(fā)明進(jìn)行進(jìn)一步的詳細(xì)描述。
在下面的描述中闡述了很多具體細(xì)節(jié)以便于充分理解本發(fā)明,但是,本發(fā)明還可以采用其他不同于在此描述的其他方式來實施,因此,本發(fā)明并不限于下面公開的具體實施例的限制。
下面首先對根據(jù)本發(fā)明的數(shù)據(jù)關(guān)聯(lián)查詢裝置所述涉及的一些硬件模塊作簡單介紹
數(shù)據(jù)字典建立單元,如圖2,負(fù)責(zé)數(shù)據(jù)字典初始化、訪問與樹形展現(xiàn)。數(shù)據(jù)字典通常指對數(shù)據(jù)庫的物理結(jié)構(gòu)或?qū)ο?如表、視圖、字段、主外鍵、字段數(shù)據(jù)類型、字段精度等)進(jìn)行封裝后生成的一個邏輯層,能夠體現(xiàn)“表、字段以及表間關(guān)聯(lián)關(guān)系”。數(shù)據(jù)字典維護(hù)了數(shù)據(jù)庫對象的顯示信息以及表間關(guān)聯(lián)關(guān)系等,使得操作者更容易訪問數(shù)據(jù)庫的結(jié)構(gòu)信息。比如, 提供一個數(shù)據(jù)字典建模工具,把數(shù)據(jù)庫設(shè)計文檔(或物理表、字段)的信息導(dǎo)入,將一張表存為數(shù)據(jù)字典主表的一行記錄(可同時為該表指定一個分類),其下屬字段存為子表中對應(yīng)的多行記錄,在樹形展現(xiàn)時,左側(cè)按照分類歸集數(shù)據(jù)表,右側(cè)將選中表及其字段構(gòu)造成一棵子樹,對于字段中的外鍵字段,通過表名檢索和加載的方式,進(jìn)一步可展開該外鍵所對應(yīng)物理表的子樹(通常是檔案表,例如圖2所示的客戶、部門,通過展開后會得到客戶檔案、部門檔案的子樹),如此可以層層展開下去。
數(shù)據(jù)模型模塊,如圖3所示,負(fù)責(zé)數(shù)據(jù)模型的設(shè)計、持久化、訪問與結(jié)果瀏覽。數(shù)據(jù)模型可以包含很多內(nèi)容,從與本發(fā)明技術(shù)方案相關(guān)的角度出發(fā),可以將數(shù)據(jù)模型做一簡化, 假定其只保存操作者選定的數(shù)據(jù)表、表間連接關(guān)系以及待查詢字段。
報表生成單元,負(fù)責(zé)報表格式設(shè)計、持久化、訪問與結(jié)果展現(xiàn)。報表格式也可以包含很多內(nèi)容,從與本發(fā)明技術(shù)方案相關(guān)的角度出發(fā),將格式也做一簡化,假定其只保存操作者選定的數(shù)據(jù)模型ID、報表基本格式以及待展現(xiàn)字段,將待展現(xiàn)字段拖進(jìn)表格中可以得到例如圖4所示的報表。
緩存單元,負(fù)責(zé)高速緩存初始化、維護(hù)與檢索。要求能通過表的主鍵快速找到表的其它常用業(yè)務(wù)屬性。比如,可以采用前臺文件來存儲對象化的哈希結(jié)構(gòu)(哈希結(jié)構(gòu)以主鍵為鍵、業(yè)務(wù)屬性為值),也可以采用前臺數(shù)據(jù)庫來緩存相關(guān)表(主鍵列上建索引)。當(dāng)系統(tǒng)查找某一主鍵對應(yīng)的屬性時,如通過哈希結(jié)構(gòu)的鍵或主鍵索引字段可以命中則高速返回結(jié)果,如不能命中則發(fā)起數(shù)據(jù)庫查詢,返回結(jié)果并更新緩存內(nèi)容及版本。
緩存取數(shù)公式構(gòu)造單元中的計算子單元,用于計算使用者所選取的關(guān)聯(lián)字段的路徑,這只需要利用最基本的樹節(jié)點算法,從給定節(jié)點層層向上找父節(jié)點,一直持續(xù)到根節(jié)點,并將此路徑上的節(jié)點形成數(shù)組或字符分隔串(如客戶.客戶基本分類.客戶分類基本名稱)即可。這一路徑將用于構(gòu)造緩存取數(shù)公式(詳見下述緩存取數(shù)公式構(gòu)造單元)。
SQL執(zhí)行單元,能夠在數(shù)據(jù)庫執(zhí)行簡單SQL并返回結(jié)果集。用于執(zhí)行僅僅來自業(yè)務(wù)單據(jù)表自身字段的查詢(也就是基礎(chǔ)字段),而不做與維度表(檔案表)關(guān)聯(lián)字段的查詢。
緩存取數(shù)公式構(gòu)造單元,所謂緩存取數(shù)公式,是指通過PK (主鍵)帶出其它業(yè)務(wù)屬性的公式,類似于name- > cvs (客戶,客戶名稱,客戶基本信息主鍵,‘0001’),可代表在客戶檔案這個緩存里,由客戶主鍵0001帶出該客戶的名稱;另外可將多個公式用分號分隔寫成一個長公式,前面公式的返回值可用作后面公式的輸入?yún)?shù)。相關(guān)的公式執(zhí)行,可直接結(jié)合上述緩存單元(其特點就是根據(jù)Hi值可快速返回相關(guān)屬性值)獲得結(jié)果。
將上述硬件模塊結(jié)合圖7對根據(jù)本發(fā)明的數(shù)據(jù)關(guān)聯(lián)查詢裝置進(jìn)行詳細(xì)說明,圖7 示出了根據(jù)本發(fā)明實施例的數(shù)據(jù)關(guān)聯(lián)查詢裝置的框圖。
根據(jù)本發(fā)明的一個方面,提供了一種數(shù)據(jù)關(guān)聯(lián)查詢裝置100,如圖4所示,包括數(shù)據(jù)獲取單元102,用于獲取事實表的基礎(chǔ)字段,基于基礎(chǔ)字段選擇維表上的字段作為關(guān)聯(lián)事實表和維表的關(guān)聯(lián)字段,其中,基礎(chǔ)字段和關(guān)聯(lián)字段為待查詢字段,將基礎(chǔ)字段及其所屬數(shù)據(jù)表發(fā)送至SQL執(zhí)行單元104 ;SQL執(zhí)行單元104,基于基礎(chǔ)字段及其所屬數(shù)據(jù)表,采用SQL 語句執(zhí)行查詢操作,得到結(jié)果集;緩存取數(shù)公式構(gòu)造單元106,從結(jié)果集中獲取與關(guān)聯(lián)字段對應(yīng)的主鍵值,結(jié)合關(guān)聯(lián)字段所在的數(shù)據(jù)路徑構(gòu)造緩存取數(shù)公式;緩存執(zhí)行單元108,根據(jù)緩存取數(shù)公式獲取關(guān)聯(lián)字段的取值,將關(guān)聯(lián)字段的取值和結(jié)果集進(jìn)行組合得到最終查詢結(jié)果。在該技術(shù)方案中,同時支持SQL查詢和緩存公式查詢,避免了大數(shù)據(jù)量事實表和維度表的關(guān)聯(lián)查詢給系統(tǒng)帶來的致命壓力,提高了查詢效率。
以上技術(shù)方案中,數(shù)據(jù)關(guān)聯(lián)查詢裝置100還包括數(shù)據(jù)字典建立單元108,用于建立數(shù)據(jù)字典樹,提供給數(shù)據(jù)獲取單元102,在數(shù)據(jù)字典樹中選擇待查詢字段。在該技術(shù)方案中,建立數(shù)據(jù)字典樹使得數(shù)據(jù)庫中數(shù)據(jù)的展現(xiàn)更加直觀,方便用戶根據(jù)自己的需求選擇所需的展現(xiàn)內(nèi)容;另外,用戶可以根據(jù)自身業(yè)務(wù)情況,自己建立數(shù)據(jù)字典樹,自主地設(shè)置基礎(chǔ)字段和關(guān)聯(lián)字段,基礎(chǔ)字段直接通過SQL查詢,關(guān)聯(lián)字段則通過緩存取數(shù)公式進(jìn)行查詢,亦即實現(xiàn)了對某種業(yè)務(wù)屬性采用何種查詢方式可以由用戶自己定制,更加方便和人性化。
使用者在數(shù)據(jù)字典樹里,選擇事實表的字段作為基礎(chǔ)字段,這些字段可以是單據(jù)自帶的業(yè)務(wù)屬性,也可以是主外鍵冊。如圖2所示,銷售訂單頭是查詢的單據(jù),單據(jù)號是業(yè)務(wù)屬性,客戶、部門就是冊。選擇結(jié)束后完成了待查詢字段的選擇。
以上技術(shù)方案中,數(shù)據(jù)字典建立單元108還用于為選中的基礎(chǔ)字段構(gòu)造子樹,基礎(chǔ)字段包括主鍵,主鍵對應(yīng)關(guān)聯(lián)字段,在子樹中選擇關(guān)聯(lián)字段。在該技術(shù)方案中,數(shù)據(jù)字典樹不僅支持用戶選擇基礎(chǔ)字段,而且同時支持用戶選擇子樹中的關(guān)聯(lián)字段,保證了關(guān)聯(lián)字段的可擴(kuò)展性,豐富了報表的展現(xiàn)內(nèi)容。繼續(xù)以圖2為例,可以為主鍵部門建立子樹。
以上技術(shù)方案中,數(shù)據(jù)關(guān)聯(lián)查詢裝置100,還包括報表生成單元110,將基礎(chǔ)字段和關(guān)聯(lián)字段插入報表中,作為報表的待展現(xiàn)字段,在報表中展現(xiàn)與待展現(xiàn)字段相對應(yīng)的最終查詢結(jié)果。在該技術(shù)方案中,對用戶而言只需選擇所需的查詢內(nèi)容,便可以將所選擇查詢內(nèi)容的結(jié)果直接通過報表展現(xiàn)出來,方便快捷。
以上技術(shù)方案中,數(shù)據(jù)關(guān)聯(lián)查詢裝置100,還包括緩存單元112,用于根據(jù)緩存取數(shù)公式中的主鍵值查找到所屬數(shù)據(jù)表的其他業(yè)務(wù)屬性;緩存取數(shù)公式構(gòu)造單元106包括計算子單元1062,利用樹節(jié)點算法計算出所選取的關(guān)聯(lián)字段在數(shù)據(jù)字典中的路徑,根據(jù)路徑上的節(jié)點形成數(shù)組或字符分隔串,得到具有關(guān)聯(lián)字段的主鍵值的緩存取數(shù)公式。在該技術(shù)方案中,通過建立緩存取數(shù)公式,保證了查詢關(guān)聯(lián)字段的可重復(fù)性,使用戶在查詢關(guān)聯(lián)字段的內(nèi)容時,可以直接根據(jù)所構(gòu)建的緩存取數(shù)公式進(jìn)行查詢,大大地提高了查詢效率,同時降低了硬件設(shè)備的負(fù)荷。
圖8示出了根據(jù)本發(fā)明實施例的數(shù)據(jù)關(guān)聯(lián)查詢方法的流程圖。
根據(jù)本發(fā)明的另一個方面,還提供了一種數(shù)據(jù)關(guān)聯(lián)查詢方法,如圖8所示,包括 步驟202,獲取事實表的基礎(chǔ)字段,基于基礎(chǔ)字段選擇維表上的字段作為關(guān)聯(lián)事實表和維表的關(guān)聯(lián)字段,其中,基礎(chǔ)字段和關(guān)聯(lián)字段為待查詢字段;步驟204,基于基礎(chǔ)字段及其所屬數(shù)據(jù)表,采用SQL語句執(zhí)行查詢操作,得到結(jié)果集;步驟206,從結(jié)果集中獲取與關(guān)聯(lián)字段對應(yīng)的主鍵值,結(jié)合關(guān)聯(lián)字段所在的數(shù)據(jù)路徑構(gòu)造緩存取數(shù)公式,根據(jù)緩存取數(shù)公式獲取關(guān)聯(lián)字段的取值,將關(guān)聯(lián)字段的取值和結(jié)果集進(jìn)行組合得到最終查詢結(jié)果。在該技術(shù)方案中, 同時支持SQL查詢和緩存公式查詢,避免了大數(shù)據(jù)量事實表和維度表的關(guān)聯(lián)查詢給系統(tǒng)帶來的致命壓力,提高了查詢效率。
以上技術(shù)方案中,步驟202還包括建立數(shù)據(jù)字典樹,在數(shù)據(jù)字典樹中選擇待查詢字段。在該技術(shù)方案中,建立數(shù)據(jù)字典樹使得數(shù)據(jù)庫中數(shù)據(jù)的展現(xiàn)更加直觀,方便用戶根據(jù)自己的需求選擇所需的展現(xiàn)內(nèi)容;另外,用戶可以根據(jù)自身業(yè)務(wù)情況,自己建立數(shù)據(jù)字典樹,自主地設(shè)置基礎(chǔ)字段和關(guān)聯(lián)字段,基礎(chǔ)字段直接通過SQL查詢,關(guān)聯(lián)字段則通過緩存取數(shù)公式進(jìn)行查詢,亦即實現(xiàn)了對某種業(yè)務(wù)屬性采用何種查詢方式可以由用戶自己定制,更加方便和人性化。
以上技術(shù)方案中,步驟202還包括為選中的基礎(chǔ)字段構(gòu)造子樹,基礎(chǔ)字段包括主鍵,主鍵對應(yīng)關(guān)聯(lián)字段,在子樹中選擇關(guān)聯(lián)字段。在該技術(shù)方案中,數(shù)據(jù)字典樹不僅支持用戶選擇基礎(chǔ)字段,而且同時支持用戶選擇子樹中的關(guān)聯(lián)字段,保證了關(guān)聯(lián)字段的可擴(kuò)展性, 豐富了報表的展現(xiàn)內(nèi)容。
以上技術(shù)方案中,數(shù)據(jù)關(guān)聯(lián)查詢方法還包括將基礎(chǔ)字段和關(guān)聯(lián)字段插入報表中, 作為報表的待展現(xiàn)字段,將在報表中展現(xiàn)與待展現(xiàn)字段相對應(yīng)的最終查詢結(jié)果。在該技術(shù)方案中,對用戶而言只需選擇所需的查詢內(nèi)容,便可以將所選擇查詢內(nèi)容的結(jié)果直接通過報表展現(xiàn)出來,方便快捷。
以上技術(shù)方案中,緩存取數(shù)公式的形成方法包括利用樹節(jié)點算法計算出所選取的關(guān)聯(lián)字段在數(shù)據(jù)字典中的路徑;根據(jù)路徑上的節(jié)點形成數(shù)組或字符分隔串,得到具有關(guān)聯(lián)字段的主鍵值的緩存取公式。在該技術(shù)方案中,通過建立緩存取數(shù)公式,保證了查詢關(guān)聯(lián)字段的可重復(fù)性,使用戶在查詢關(guān)聯(lián)字段的內(nèi)容時,可以直接根據(jù)所構(gòu)建的緩存取數(shù)公式進(jìn)行查詢,大大地提高了查詢效率,同時降低了硬件設(shè)備的負(fù)荷。
圖9示出了根據(jù)本發(fā)明實施例的數(shù)據(jù)關(guān)聯(lián)查詢方法的流程圖。
如圖9,步驟402,用戶根據(jù)自身業(yè)務(wù)需要,建立初始的數(shù)據(jù)字典樹。
步驟404,將數(shù)據(jù)字典樹的結(jié)構(gòu)展現(xiàn)開發(fā)給用戶,用戶可以在數(shù)據(jù)字典樹里,選擇事實表的字段作為基礎(chǔ)字段,這些字段可以是單據(jù)自帶的業(yè)務(wù)屬性,也可以是主外鍵。以圖 2為例,銷售訂單頭是查詢的單據(jù),單據(jù)號是業(yè)務(wù)屬性,客戶、部門就是主鍵。
步驟406,當(dāng)用戶基礎(chǔ)字段的選擇時,把相關(guān)的數(shù)據(jù)模型持久化到數(shù)據(jù)庫里。
步驟408,在用戶在混合樹(如圖5所示)里選擇基礎(chǔ)字段作為報表的待展現(xiàn)字段后,可以將選擇的待展現(xiàn)字段(即待查詢字段)拖入報表某區(qū)域,完成報表格式設(shè)計(如圖 4所示)。其中,數(shù)據(jù)字典的混合樹由基礎(chǔ)字段和所查單據(jù)的主鍵構(gòu)成,其中主外鍵字段可向下展開。根據(jù)數(shù)據(jù)字典樹形展現(xiàn)的特點,可保證其中主外鍵類型的基礎(chǔ)字段是可展開的。
步驟410,當(dāng)用戶完成上述報表格式設(shè)計時,把相關(guān)的格式模型持久化到數(shù)據(jù)庫里。
步驟412,用戶在主鍵展開的子樹中選擇關(guān)聯(lián)字段,如圖6所示,用戶在“客戶”該主鍵中選擇了 “客戶基本分類名稱”作為關(guān)聯(lián)事實表和維度表的關(guān)聯(lián)字段。由于本發(fā)明對于基礎(chǔ)字段和關(guān)聯(lián)字段將采用完全不同的技術(shù)手段來取數(shù),因此,關(guān)聯(lián)字段被拖入報表后應(yīng)予以記錄其類型。對于關(guān)聯(lián)字段,調(diào)用緩存取數(shù)公式構(gòu)造單元中的計算子單元計算出該字段的路徑,同樣予以記錄。
步驟414,用戶瀏覽報表,觸發(fā)查詢的執(zhí)行動作。
步驟416,基于基本字段及其所屬數(shù)據(jù)表,采用SQL語句執(zhí)行查詢操作,得到結(jié)果集,從結(jié)果集中獲取與關(guān)聯(lián)字段對應(yīng)的主鍵值,結(jié)合關(guān)聯(lián)字段所在的數(shù)據(jù)路徑構(gòu)造出一個根據(jù)主鍵獲取關(guān)聯(lián)字段值的緩存取數(shù)公式,例如類似于,主鍵值1- > cvs (客戶,客戶基本分類主鍵,客戶基本信息主鍵,客戶主鍵值);name- > cvs (客戶基本分類,客戶基本分類名稱,客戶基本分類主鍵,主鍵值1)。
步驟418,根據(jù)緩存取數(shù)公式獲取關(guān)聯(lián)字段的取值,通過高速緩存獲得相關(guān)關(guān)聯(lián)字段的取值,從而避免了多表的大數(shù)據(jù)聯(lián)查,提高了查詢的效率。
步驟420,將關(guān)聯(lián)字段取值拼入查詢結(jié)果集中,送報表進(jìn)行展現(xiàn),可以得到如圖 IOD所示的展現(xiàn)結(jié)果。
從上述流程中可以知道,根據(jù)本發(fā)明的技術(shù)方案在優(yōu)化關(guān)聯(lián)查詢執(zhí)行效率的前提下,獲得查詢結(jié)果用于報表輸出;并且使用者甚至可定制哪些字段走SQL取數(shù)(基本字段走 SQL取數(shù)),哪些字段走緩存取數(shù)(關(guān)聯(lián)字段走緩存取數(shù));充分支持了關(guān)聯(lián)字段的可擴(kuò)展性,并確保了數(shù)據(jù)模型(利用設(shè)計的數(shù)據(jù)字典選擇待查詢字段的數(shù)據(jù)模型,可以根據(jù)用戶的需要進(jìn)行設(shè)計)的可復(fù)用性。
下面結(jié)合實踐結(jié)果來說明本發(fā)明實施例中的數(shù)據(jù)關(guān)聯(lián)查詢方法的實際效果
操作者可以在如圖IOA所示的數(shù)據(jù)字典中選擇基礎(chǔ)字段,在圖IOA中用戶選擇了單據(jù)號、客戶、單據(jù)日期和部門。然后將選擇的基礎(chǔ)字段插入報表中,可以得到如圖IOB所示的報表格式。操作者繼續(xù)選擇關(guān)聯(lián)字段,如圖IOC所示,用戶在客戶對應(yīng)的子樹中選擇了客戶基本分類名稱作為關(guān)聯(lián)字段,并將該關(guān)聯(lián)字段也拖入報表中,得到如圖IOC中所示的報表格式。執(zhí)行查詢動作,展現(xiàn)待查詢字段的結(jié)果,得到如圖IOD所示的結(jié)果集。
以上結(jié)合附圖詳細(xì)說明了根據(jù)本發(fā)明的技術(shù)方案,根據(jù)本發(fā)明的技術(shù)方案,可以實現(xiàn)同時支持SQL查詢和緩存公式查詢,將兩者結(jié)合應(yīng)用,避免了大數(shù)據(jù)量事實表和維度表的關(guān)聯(lián)查詢給系統(tǒng)帶來的致命壓力,提高了查詢效率;對某種業(yè)務(wù)屬性采用何種查詢方式可以由用戶自己定制,更加方便和人性化,提高了實踐應(yīng)用中的靈活性;通過建立數(shù)據(jù)字典保證了關(guān)聯(lián)字段的可擴(kuò)展性和查詢的可復(fù)用性。
以上所述僅為本發(fā)明的優(yōu)選實施例而已,并不用于限制本發(fā)明,對于本領(lǐng)域的技術(shù)人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種數(shù)據(jù)關(guān)聯(lián)查詢裝置,其特征在于,包括數(shù)據(jù)獲取單元,用于獲取事實表的基礎(chǔ)字段,基于所述基礎(chǔ)字段選擇維表上的字段作為關(guān)聯(lián)所述事實表和所述維表的關(guān)聯(lián)字段,其中,所述基礎(chǔ)字段和所述關(guān)聯(lián)字段為待查詢字段,將所述基礎(chǔ)字段及其所屬數(shù)據(jù)表發(fā)送至SQL執(zhí)行單元;SQL執(zhí)行單元,基于所述基礎(chǔ)字段及其所屬數(shù)據(jù)表,采用SQL語句執(zhí)行查詢操作,得到結(jié)果集;緩存取數(shù)公式構(gòu)造單元,從所述結(jié)果集中獲取與所述關(guān)聯(lián)字段對應(yīng)的主鍵值,結(jié)合所述關(guān)聯(lián)字段所在的數(shù)據(jù)路徑構(gòu)造緩存取數(shù)公式;緩存執(zhí)行單元,根據(jù)所述緩存取數(shù)公式獲取所述關(guān)聯(lián)字段的取值,將所述關(guān)聯(lián)字段的取值和所述結(jié)果集進(jìn)行組合得到最終查詢結(jié)果。
2.根據(jù)權(quán)利要求1所述的數(shù)據(jù)關(guān)聯(lián)查詢裝置,其特征在于,還包括數(shù)據(jù)字典建立單元,用于建立數(shù)據(jù)字典樹,提供給所述數(shù)據(jù)獲取單元,在所述數(shù)據(jù)字典樹中選擇所述待查詢字段。
3.根據(jù)權(quán)利要求2所述的數(shù)據(jù)關(guān)聯(lián)查詢裝置,其特征在于,所述數(shù)據(jù)字典建立單元還用于為選中的基礎(chǔ)字段構(gòu)造子樹,所述基礎(chǔ)字段包括主鍵,所述主鍵對應(yīng)所述關(guān)聯(lián)字段,在所述子樹中選擇所述關(guān)聯(lián)字段。
4.根據(jù)權(quán)利要求3所述的數(shù)據(jù)關(guān)聯(lián)查詢裝置,其特征在于,還包括報表生成單元,將所述基礎(chǔ)字段和所述關(guān)聯(lián)字段插入報表中,作為報表的待展現(xiàn)字段, 將在所述報表中展現(xiàn)與所述待展現(xiàn)字段相對應(yīng)的所述最終查詢結(jié)果。
5.根據(jù)權(quán)利要求2至4中任一項所述的數(shù)據(jù)關(guān)聯(lián)查詢裝置,其特征在于,還包括緩存單元,用于根據(jù)所述緩存取數(shù)公式中的主鍵值查找到所屬數(shù)據(jù)表的其他業(yè)務(wù)屬性;所述緩存取數(shù)公式構(gòu)造單元包括計算子單元,利用樹節(jié)點算法計算出所選取的關(guān)聯(lián)字段在所述數(shù)據(jù)字典中的路徑,根據(jù)所述路徑上的節(jié)點形成數(shù)組或字符分隔串,得到具有所述關(guān)聯(lián)字段的主鍵值的所述緩存取公式。
6.一種數(shù)據(jù)關(guān)聯(lián)查詢方法,其特征在于,包括步驟202,獲取事實表的基礎(chǔ)字段,基于所述基礎(chǔ)字段選擇維表上的字段作為關(guān)聯(lián)所述事實表和所述維表的關(guān)聯(lián)字段,其中,所述基礎(chǔ)字段和所述關(guān)聯(lián)字段為待查詢字段;步驟204,基于所述基礎(chǔ)字段及其所屬數(shù)據(jù)表,采用SQL語句執(zhí)行查詢操作,得到結(jié)果集;步驟206,從所述結(jié)果集中獲取與所述關(guān)聯(lián)字段對應(yīng)的主鍵值,結(jié)合所述關(guān)聯(lián)字段所在的數(shù)據(jù)路徑構(gòu)造緩存取數(shù)公式,根據(jù)所述緩存取數(shù)公式獲取所述關(guān)聯(lián)字段的取值,將所述關(guān)聯(lián)字段的取值和所述結(jié)果集進(jìn)行組合得到最終查詢結(jié)果。
7.根據(jù)權(quán)利要求6所述的數(shù)據(jù)關(guān)聯(lián)查詢方法,其特征在于,所述步驟202還包括 建立數(shù)據(jù)字典樹,在所述數(shù)據(jù)字典樹中選擇所述待查詢字段。
8.根據(jù)權(quán)利要求7所述的數(shù)據(jù)關(guān)聯(lián)查詢方法,其特征在于,所述步驟202還包括 為選中的基礎(chǔ)字段構(gòu)造子樹,所述基礎(chǔ)字段包括主鍵,所述主鍵對應(yīng)所述關(guān)聯(lián)字段,在所述子樹中選擇所述關(guān)聯(lián)字段。
9.根據(jù)權(quán)利要求8所述的數(shù)據(jù)關(guān)聯(lián)查詢方法,其特征在于,將所述基礎(chǔ)字段和所述關(guān)聯(lián)字段插入報表中,作為報表的待展現(xiàn)字段,將在所述報表中展現(xiàn)與所述待展現(xiàn)字段相對應(yīng)的所述最終查詢結(jié)果。
10.根據(jù)權(quán)利要求7至9中任一項所述的數(shù)據(jù)關(guān)聯(lián)查詢方法,其特征在于,所述緩存取數(shù)公式的形成方法包括利用樹節(jié)點算法計算出所選取的關(guān)聯(lián)字段在所述數(shù)據(jù)字典中的路徑; 根據(jù)所述路徑上的節(jié)點形成數(shù)組或字符分隔串,得到具有所述關(guān)聯(lián)字段的主鍵值的所述緩存取公式。
全文摘要
本發(fā)明提供了一種數(shù)據(jù)關(guān)聯(lián)查詢裝置和數(shù)據(jù)關(guān)聯(lián)查詢方法,其中數(shù)據(jù)關(guān)聯(lián)查詢裝置包括數(shù)據(jù)獲取單元,用于獲取事實表的基礎(chǔ)字段,基于基礎(chǔ)字段選擇維表上的字段作為關(guān)聯(lián)事實表和維表的關(guān)聯(lián)字段;SQL執(zhí)行單元,基于基礎(chǔ)字段及其所屬數(shù)據(jù)表,采用SQL語句執(zhí)行查詢操作,得到結(jié)果集;緩存取數(shù)公式構(gòu)造單元,從結(jié)果集中獲取與關(guān)聯(lián)字段對應(yīng)的主鍵值,結(jié)合關(guān)聯(lián)字段所在的數(shù)據(jù)路徑構(gòu)造緩存取數(shù)公式;緩存執(zhí)行單元,根據(jù)緩存取數(shù)公式獲取關(guān)聯(lián)字段的取值,將關(guān)聯(lián)字段的取值和結(jié)果集進(jìn)行組合得到最終查詢結(jié)果。能夠高效關(guān)聯(lián)事實表和維度表并執(zhí)行出結(jié)果,避免了大數(shù)據(jù)量事實表和維度表的關(guān)聯(lián)查詢給系統(tǒng)帶來的致命壓力,提高了效率。
文檔編號G06F17/30GK102521416SQ20111044889
公開日2012年6月27日 申請日期2011年12月28日 優(yōu)先權(quán)日2011年12月28日
發(fā)明者劉麗, 朱俊彬 申請人:用友軟件股份有限公司