彭成
關(guān)鍵詞:多維度;數(shù)據(jù)挖掘;報(bào)表生成;邏輯關(guān)系限定;父子關(guān)系挖掘
1 引言
報(bào)表可以幫助企業(yè)訪問(wèn)、格式化數(shù)據(jù),并把數(shù)據(jù)信息以安全可靠的方式呈現(xiàn)給使用者[1-3]。利用計(jì)算機(jī)處理數(shù)據(jù)和界面設(shè)計(jì)的功能來(lái)生成、展示報(bào)表,其主要特點(diǎn)是數(shù)據(jù)動(dòng)態(tài)化,格式多樣化,并且實(shí)現(xiàn)報(bào)表數(shù)據(jù)和報(bào)表格式的完全分離[4-6]。
然而對(duì)于現(xiàn)有的報(bào)表生成工具,在生成報(bào)表時(shí),受限于數(shù)據(jù)庫(kù)的庫(kù)表結(jié)構(gòu),無(wú)法靈活設(shè)置填充到報(bào)表單元的數(shù)據(jù)內(nèi)容,一般只能簡(jiǎn)單羅列一張或多張?jiān)幢淼臄?shù)據(jù)內(nèi)容,不能靈活展示多表數(shù)據(jù)[7-8]。
大多報(bào)表生成工具在對(duì)數(shù)據(jù)內(nèi)容進(jìn)行篩選、排序、聚集設(shè)置時(shí),只提供了讓用戶自己輸入數(shù)據(jù)庫(kù)查詢語(yǔ)句的方法[9],而實(shí)現(xiàn)這些功能所對(duì)應(yīng)的數(shù)據(jù)庫(kù)查詢語(yǔ)句比一般查詢語(yǔ)句更為復(fù)雜,使軟件的易用性降低[10]。
同時(shí),對(duì)于數(shù)據(jù)內(nèi)容存在層級(jí)關(guān)系的字段,需要按照層級(jí)依次填充報(bào)表單元,即對(duì)單一字段進(jìn)行數(shù)據(jù)挖掘,然后分級(jí)展示到多個(gè)報(bào)表單元?,F(xiàn)有報(bào)表工具并未支持對(duì)單一字段中的層級(jí)關(guān)系的挖掘和展示。
因此,針對(duì)上述問(wèn)題,需要一種新的報(bào)表生成方法以更靈活地挖掘并展示數(shù)據(jù)內(nèi)容。
2 多維報(bào)表設(shè)置與生成
2.1 表頭及字段綁定
如圖1所示,首先設(shè)置待生成的多維度報(bào)表的結(jié)構(gòu)。此步驟包括單元格的合并與拆分,構(gòu)建所需的表頭等。然后將報(bào)表中各單元與數(shù)據(jù)庫(kù)字段進(jìn)行綁定。綁定到報(bào)表單元的數(shù)據(jù)庫(kù)字段所對(duì)應(yīng)的數(shù)據(jù)內(nèi)容可以來(lái)自多個(gè)源表。
2.2 邏輯關(guān)系限定
在綁定多表數(shù)據(jù)庫(kù)字段后,可以對(duì)數(shù)據(jù)庫(kù)字段添加邏輯關(guān)系限定,用來(lái)關(guān)聯(lián)包含相應(yīng)邏輯連接的數(shù)據(jù)庫(kù)字段從而增加該單元的數(shù)據(jù)維度,通過(guò)關(guān)聯(lián)包含相應(yīng)邏輯連接的數(shù)據(jù)庫(kù)字段可以達(dá)到將多個(gè)源表的數(shù)據(jù)在同一單元內(nèi)關(guān)聯(lián)展現(xiàn)的目的。
邏輯關(guān)系限定的添加通過(guò)條件限定語(yǔ)句來(lái)實(shí)現(xiàn),用以確定各數(shù)據(jù)庫(kù)字段對(duì)應(yīng)的數(shù)據(jù)內(nèi)容之間的邏輯關(guān)系。使展現(xiàn)在報(bào)表內(nèi)的不同的源表可以相互關(guān)聯(lián),從而更加靈活地展示數(shù)據(jù)內(nèi)容。
在此情況下,報(bào)表單元內(nèi)不止有本體數(shù)據(jù)內(nèi)容,還包含與本體數(shù)據(jù)內(nèi)容有一定邏輯聯(lián)系的關(guān)聯(lián)數(shù)據(jù)內(nèi)容,從而達(dá)到在同一單元內(nèi)展現(xiàn)多源表數(shù)據(jù)內(nèi)容的目的,并且由于關(guān)聯(lián)數(shù)據(jù)內(nèi)容是本體數(shù)據(jù)內(nèi)容基于一定邏輯關(guān)系的衍生,基于此,報(bào)表的數(shù)據(jù)挖掘能力得到體現(xiàn)。
2.3 父子挖掘字段綁定
父子關(guān)系挖掘字段包括標(biāo)識(shí)字段、內(nèi)容字段、父標(biāo)識(shí)字段和子標(biāo)識(shí)字段。其中,內(nèi)容字段為與本體數(shù)據(jù)內(nèi)容對(duì)應(yīng)的數(shù)據(jù)庫(kù)字段,父標(biāo)識(shí)字段、子標(biāo)識(shí)字段為反映父子關(guān)系的字段,標(biāo)識(shí)字段為父子關(guān)系挖掘字段的標(biāo)識(shí)字段。
對(duì)于對(duì)應(yīng)數(shù)據(jù)內(nèi)容存在父子關(guān)系的數(shù)據(jù)庫(kù)字段,通過(guò)指定內(nèi)容字段獲取本體數(shù)據(jù)內(nèi)容,通過(guò)指定反映父子關(guān)系的兩個(gè)字段,以及標(biāo)識(shí)字段,來(lái)獲取此字段中不同數(shù)據(jù)間的父子關(guān)系。通過(guò)父子關(guān)系字段來(lái)得到綁定字段所對(duì)應(yīng)的數(shù)據(jù)內(nèi)容間的層次關(guān)系,再通過(guò)標(biāo)識(shí)字段將父子關(guān)系與綁定字段每行數(shù)據(jù)一一對(duì)應(yīng)。通過(guò)限定父子關(guān)系挖掘字段的挖掘深度來(lái)確定基于父系或子系邏輯關(guān)系的附加數(shù)據(jù)庫(kù)字段的維度。挖掘深度,即獲取綁定字段的幾級(jí)父/子對(duì)象。
2.4 篩選及展現(xiàn)設(shè)置
接下來(lái)對(duì)報(bào)表單元進(jìn)行數(shù)據(jù)篩選條件設(shè)置。數(shù)據(jù)篩選條件的設(shè)置如邏輯關(guān)系限定的添加一樣,都是通過(guò)條件語(yǔ)句來(lái)實(shí)現(xiàn)。
對(duì)報(bào)表單元添加數(shù)據(jù)展現(xiàn)設(shè)置,包括升/降序排列設(shè)置、單元格聚集設(shè)置??梢詫?duì)特定數(shù)據(jù)內(nèi)容進(jìn)行值的限定以過(guò)濾數(shù)據(jù);可以自行設(shè)置表頭行列大小及內(nèi)容,并可以進(jìn)行單元格的合并與拆分。從而無(wú)須通過(guò)輸入數(shù)據(jù)庫(kù)查詢語(yǔ)句來(lái)實(shí)現(xiàn)多表字段的綁定以及數(shù)據(jù)內(nèi)容的篩選、排序、聚集的設(shè)置。
數(shù)據(jù)展現(xiàn)設(shè)置還包括數(shù)據(jù)挖掘設(shè)置,用于確定單元對(duì)本體數(shù)據(jù)內(nèi)容或附加數(shù)據(jù)內(nèi)容的數(shù)據(jù)展現(xiàn)方式。針對(duì)綁定了父子關(guān)系挖掘字段的單元,數(shù)據(jù)挖掘設(shè)置用于確定報(bào)表單元對(duì)父子關(guān)系挖掘字段對(duì)應(yīng)的本體數(shù)據(jù)內(nèi)容或附加數(shù)據(jù)內(nèi)容的數(shù)據(jù)展現(xiàn)方式。單元以多個(gè)列來(lái)層次化顯示父子關(guān)系挖掘字段對(duì)應(yīng)的數(shù)據(jù)內(nèi)容,反映數(shù)據(jù)內(nèi)容之間的父子關(guān)系。
2.5 查詢及結(jié)果展現(xiàn)
基于數(shù)據(jù)篩選條件設(shè)置在數(shù)據(jù)庫(kù)中查詢每個(gè)數(shù)據(jù)庫(kù)字段對(duì)應(yīng)的本體數(shù)據(jù)內(nèi)容和關(guān)聯(lián)的數(shù)據(jù)庫(kù)字段對(duì)應(yīng)的關(guān)聯(lián)數(shù)據(jù)內(nèi)容。返回的查詢結(jié)果,基于表頭結(jié)構(gòu)、表頭內(nèi)容將查詢到的本體數(shù)據(jù)內(nèi)容和關(guān)聯(lián)數(shù)據(jù)內(nèi)容填充到對(duì)應(yīng)的單元中,從而生成多維度報(bào)表。
針對(duì)綁定了父子關(guān)系挖掘字段的單元,首先在數(shù)據(jù)庫(kù)中查詢每個(gè)父子關(guān)系挖掘字段所對(duì)應(yīng)的本體數(shù)據(jù)內(nèi)容并基于挖掘深度查詢每個(gè)父子關(guān)系挖掘字段所對(duì)應(yīng)的相應(yīng)維度的附加數(shù)據(jù)內(nèi)容;然后將所述本體數(shù)據(jù)內(nèi)容和所述附加數(shù)據(jù)內(nèi)容填充到對(duì)應(yīng)的所述單元中。
對(duì)于已填充數(shù)據(jù)內(nèi)容的單元進(jìn)一步根據(jù)數(shù)據(jù)展現(xiàn)設(shè)置對(duì)單元內(nèi)數(shù)據(jù)進(jìn)行數(shù)據(jù)展現(xiàn),如升/降序排列、單元格聚集等。
2.6 模板存儲(chǔ)及利用
生成的報(bào)表可以打印輸出,也可以基于報(bào)表的生成過(guò)程中的操作流程信息建立自定義的報(bào)表操作流程模板并存儲(chǔ)所述報(bào)表操作流程模板。
報(bào)表操作流程信息包含表頭內(nèi)容、報(bào)表的結(jié)構(gòu)、數(shù)據(jù)篩選條件設(shè)置、數(shù)據(jù)展現(xiàn)設(shè)置、綁定在不同單元上的數(shù)據(jù)庫(kù)字段或父子關(guān)系挖掘字段、添加在數(shù)據(jù)庫(kù)字段上的邏輯關(guān)系限定。系統(tǒng)將這些信息重新組合以生成對(duì)應(yīng)的報(bào)表操作流程模板并存儲(chǔ)到相應(yīng)的數(shù)據(jù)庫(kù)中,實(shí)現(xiàn)持久化,以便多次使用。
3 報(bào)表設(shè)置及生成實(shí)例
3.1 表頭及字段綁定
以生成不同級(jí)別地質(zhì)類型的含油氣性信息報(bào)表為例,首先如圖2所示編輯報(bào)表的表頭內(nèi)容并如圖3 所示設(shè)置報(bào)表結(jié)構(gòu)。結(jié)構(gòu)設(shè)置是單元格的合并與拆分,選中多個(gè)單元格后可以進(jìn)行合并,選中占多行或多列的單元格后可以進(jìn)行拆分。
然后對(duì)不同的單元綁定不同的數(shù)據(jù)庫(kù)字段。綁定字段的數(shù)據(jù)結(jié)構(gòu)包括下面幾個(gè)部分:字段綁定于報(bào)表的第幾列,字段信息,是否對(duì)查詢結(jié)果進(jìn)行排序,是否對(duì)查詢結(jié)果進(jìn)行聚集,排序的優(yōu)先級(jí)別。
綁定數(shù)據(jù)庫(kù)字段的過(guò)程是先選定報(bào)表的某一列,然后選取需要綁定的數(shù)據(jù)庫(kù)源表,最后選擇數(shù)據(jù)庫(kù)字段,完成列和數(shù)據(jù)庫(kù)字段的對(duì)應(yīng)綁定,此操作會(huì)將已綁定的數(shù)據(jù)庫(kù)字段信息存儲(chǔ)到對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)中。
3.2 父子挖掘字段綁定
接下來(lái)綁定父子關(guān)系挖掘字段。綁定父子關(guān)系挖掘字段需要指定4個(gè)字段,前2個(gè)字段(父標(biāo)識(shí)字段、子標(biāo)識(shí)字段)為反映父子關(guān)系的字段,后兩個(gè)字段(標(biāo)識(shí)字段、內(nèi)容字段)為綁定字段的標(biāo)識(shí)字段及綁定字段本身。通過(guò)父子關(guān)系字段來(lái)得到綁定字段所含內(nèi)容間的層次關(guān)系,再通過(guò)標(biāo)識(shí)字段將父子關(guān)系與綁定字段每行數(shù)據(jù)一一對(duì)應(yīng)。
例如,設(shè)定父子關(guān)系的兩個(gè)字段為父ID、ID,設(shè)定標(biāo)識(shí)字段及內(nèi)容字段為ID、Name。這樣根據(jù)父ID、ID 就可以得到不同ID之間的父子層次關(guān)系,然后根據(jù)ID、Name兩個(gè)字段將ID與Name對(duì)應(yīng)上,就可以得到不同Name間的父子層次關(guān)系。
指定4個(gè)字段后,再給出挖掘深度,即獲取已綁定數(shù)據(jù)庫(kù)字段的幾級(jí)父親。默認(rèn)0為綁定字段字段本身,1為綁定字段的一級(jí)父對(duì)象,以此類推。
3.3 數(shù)據(jù)展示及篩選
接下來(lái)如圖4所示對(duì)已綁定的數(shù)據(jù)庫(kù)字段和父子關(guān)系挖掘字段進(jìn)行數(shù)據(jù)展示設(shè)置。其包含升/降序設(shè)置和聚集設(shè)置。
如圖5所示通過(guò)條件限定語(yǔ)句進(jìn)行數(shù)據(jù)篩選條件設(shè)置和/或?qū)?shù)據(jù)庫(kù)字段添加邏輯關(guān)系限定。在例子中,條件語(yǔ)句采用“where”語(yǔ)句。
“where”限定條件數(shù)據(jù)結(jié)構(gòu)包含以下幾個(gè)部分:左側(cè)字段信息,右側(cè)字段信息,判斷符,判斷值。對(duì)于第一種操作,會(huì)將所選的兩個(gè)字段填充到左側(cè)字段信息,右側(cè)字段信息中;對(duì)于第二種操作,會(huì)將所選的字段填充到左側(cè)字段信息中,將判斷符(=,>,<,>=,<=) 及判斷值填充進(jìn)去。
3.4 查詢語(yǔ)句創(chuàng)建
系統(tǒng)會(huì)構(gòu)建生成報(bào)表的SQL語(yǔ)句,語(yǔ)句的“select”部分包括每個(gè)綁定字段的字段名稱及所屬表名稱及每個(gè)父子關(guān)系挖掘字段的標(biāo)識(shí)字段名稱及所屬表名稱,格式為“表名.字段名”;“from”部分為它們所對(duì)應(yīng)的數(shù)據(jù)庫(kù)表;“where”部分為“where”限定條件數(shù)據(jù)結(jié)構(gòu)中所含的語(yǔ)句,多條限定語(yǔ)句通過(guò)“and”來(lái)連接。
3.5 查詢結(jié)果挖掘及展現(xiàn)
執(zhí)行生成的查詢語(yǔ)句并返回結(jié)果集,填充到綁定字段所對(duì)應(yīng)的列中。
對(duì)于父子關(guān)系挖掘字段,得到標(biāo)識(shí)字段的結(jié)果記錄的值(把這個(gè)記錄值賦值給變量value) 后,根據(jù)挖掘深度(假設(shè)值為n) ,在父標(biāo)識(shí)字段、子標(biāo)識(shí)字段中,需要進(jìn)行n次遍歷來(lái)查找到此值的n級(jí)父對(duì)象的標(biāo)識(shí)值。
其具體的實(shí)現(xiàn)方法為:在子標(biāo)識(shí)字段中尋找值為value的行,得到其行號(hào)(假設(shè)行號(hào)為a) ,然后獲取父標(biāo)識(shí)字段中行號(hào)為a的行的記錄值,并將此記錄值賦值給value,此時(shí)value的值便是一級(jí)父對(duì)象的標(biāo)識(shí)值。接下來(lái)以這個(gè)新value重復(fù)執(zhí)行上述操作,進(jìn)行n次操作后便得到了n級(jí)父對(duì)象的標(biāo)識(shí)值。然后在標(biāo)識(shí)字段、內(nèi)容字段中,根據(jù)n級(jí)父對(duì)象標(biāo)識(shí)值,得到標(biāo)識(shí)值所對(duì)應(yīng)的內(nèi)容字段的值,將這個(gè)值填充到報(bào)表中綁定父子關(guān)系挖掘字段所對(duì)應(yīng)的列里。
接下來(lái),系統(tǒng)按照綁定字段和父子關(guān)系挖掘字段中所含的升/降序信息及排序優(yōu)先級(jí),對(duì)報(bào)表數(shù)據(jù)部分進(jìn)行排序。聚集的實(shí)現(xiàn)方法為對(duì)指定過(guò)聚集的列,遍歷它的行,并將相鄰的同值單元格合并。至此,如圖6所示,最終的報(bào)表已經(jīng)生成完畢并顯示出來(lái)。報(bào)表的設(shè)置可以存為模板供重復(fù)使用。
4 結(jié)論
本文基于數(shù)據(jù)挖掘?qū)崿F(xiàn)報(bào)表的多維度層級(jí)化建立,將多個(gè)源表的數(shù)據(jù)在同一單元內(nèi)關(guān)聯(lián)展現(xiàn),可以靈活地展示多表數(shù)據(jù)。以多列來(lái)層次化顯示父子關(guān)系挖掘字段對(duì)應(yīng)的數(shù)據(jù)內(nèi)容,并可以獲取綁定字段的多級(jí)父對(duì)象,具有較強(qiáng)的數(shù)據(jù)展現(xiàn)能力。同時(shí)實(shí)現(xiàn)了報(bào)表模板和單元數(shù)據(jù)篩選、排序、聚集等展現(xiàn)方式,以及模板化以多次利用,減少用戶操作步驟,提高了自定義報(bào)表的易用性、實(shí)用性。