在BI系統中,報表的交互式排序往往是不可缺少的一項功能。如現在在系統中有一張用戶購買力情況的報表。這張報表主要是根據過去五年的歷史記錄分析出各個人群的購買力。企業決策層可能希望在不重新生成報表的情況下,直接對報表的內容進行排序。如這種報表默認情況是根據購買力從高到低排序,而現在用戶希望從低到高進行排序。在這種情況下,就需要使用報表的交互式排序功能。在這篇文章中,筆者就給大家介紹一下這個交互式排序功能如何在BI中使用,以及需要注意的事項與技巧等等。
一、交互式排序可以實現的功能。
交互式排序顧名思義,就是可以在報表的級別上,同用戶在排序內容上進行交互。簡單的說,就是可以對已經生成的報表直接根據特定的內容進行排序。而不需要更改默認的排序規則或者重新生成報表。在BI系統中,這是一項必備的功能之一。
具體的來說,R2中的報表交互式排序功能可以實現如下兩個需求。
一是可以在列標題中添加交互式排序按鈕。如上面這個案例,可以在購買力這個標題中加入一個按鈕。如果用戶有需要根據這個列來進行重新排序,則只需要點擊一下這個列標題即可。如此用戶就可以在升序與降序之間進行切換,選擇自己所需要的排序格式。如果在多個標題中都添加這個按鈕,那麼就可以根據用戶的需要,選擇需要排序的列。
二是可以在文本框中添加按鈕來實現排列。這是交互式排序中比較高級的一項應用。如數據庫管理員可以根據用戶的需要,在行組外部的行中的文本框中添加排序按鈕。如此的話,就可以為父組行或者列、為子組行或者列或者為詳細信息行或者列來指定排序的規則。同時還可以將多個字段組合成單個表達式,然後按多個字段來進行排序。這就好像在數據庫中,直接在Order By語句後面掛上多個排序字段。在數據庫中,必須要有數據庫管理員來操作。如果用戶需要更改排序規則的話,數據庫管理員每次都要在數據庫中更改,顯然比較麻煩。而在報表層面,則用戶可以根據自己的需要來設置。這就可以提高BI系統的界面的友好性與靈活性。在不改變SQL語句的情況下,方便用戶的操作。
二、交互式排序中的五要素分析。
那麼該如何實現這個報表的交互式排序呢?筆者將其總結為五要素。只要能夠搞清楚這五個要素的含義以及他們之間的關系,那麼交互式排序功能的實現,就是水到渠成的事情。
第一個要素:排序對象。在這個要素中,主要確定兩個方面的內容。一是確定需要堆行還是對列進行排序,二是需要確定是對對個對象進行排序還是對多個對象進行組合排序。一般來說,對列排序占了大多數情況。另外如果需要對多列進行組合排序的時候,需要注意排序的效率問題。如果報表中記錄比較多,則可能組合排序的過程會比較耗時。不過在BI中,一般的報表都是總結性的內容,所以記錄數量應該不會太多。為此這個性能的問題不需要太在意。管理員只需要知道有這麼一回事即可。
第二個要素:排序的依據。在數據庫設計的時候,可以根據顯示的字段來排序,也可以根據未顯示的字段來排序。如果是視圖的話,只要是基礎表中有這個字段即可,而不一定要在視圖中顯示出來。對於交互式排序來說,也有這方面的問題。在這個要素中,管理員需要確定是根據列中顯示的字段進行排序,還是依據沒有顯示的字段進行排序?因為不同的需求對後續的操作要求有所不同。所以在這裡要定義清楚。
第三個要素:排序上下文。這是一個比較難以理解的。筆者在剛開始接觸到這個內容的時候,想了好久也沒有弄明白這是什麼意思。根據說明自己操作了一遍,看了最終的效果才明白什麼意思。這大概就是只可意會、不可言傳的含義吧。在這裡筆者只把其含義說明一下,希望各位讀者自己去操作一遍,會有更加深刻的體會。管理員可以在與行組關聯的行、與列組關聯的列、詳細信息行、父組內的子組中進行排序,或者同時在父組和子組中進行排序。簡單的說,這是一種比較高級的、在局部范圍之內的排序。在BI中,會經常用到。所以這是必須要掌握的一個內容。雖然比較難以用語言表達,但是只要用戶多操作幾次,就可以掌握其中的訣竅。
第四個要素:按鈕的位置。在上面功能分析中,筆者已經談到過,可以將排序的按鈕添加到列標題中,也可以將其添加到某個文本框中。在這一個要素中,管理員就需要根據用戶的需求來確定,到底是將排序按鈕添加到哪個地方。在文本框上操作還是在列標題上操作,對於排序來說,沒有實質性的影響。主要就是看用戶的操作習慣與需求而定。一般來說,不建議在同一張報表上同時在列標題和文本框上添加排序按鈕。因為一不小心,就可能會有相互沖突的事件產生。而且在實際工作中,只需要一種就可以滿足用戶的需求。兩個都要,就有點畫蛇添足的感覺了。
第五個要素:排序是否會影響到多個區域。有時候在一個報表中,可能會有多個數據區域。如在BI系統中,可以設計兩個相對獨立又有相互聯系的數據區域。這兩個數據區域中都有日期這個字段。現在的問題是,在報表中對其中一個區域的數據根據日期字段進行了排序,那麼另外一個數據區域是否自動根據這個日期字段進行排序呢?如果需要的話,那麼就必須要要對這兩個數據區域設置一定的關聯,如父子關系等等。
三、在多個組中實現交互式排序。
在BI中,如果僅僅對單個組進行交互式排序,可能還不能夠滿足用戶的全部需求。由於BI中,報表要呈現的內容比較復雜,為此往往會在同一個報表中,設置多個組。此時如果用戶需要對多個組進行交互式排序,可以實現嗎?
在R2中,為了滿足BI系統中的這個需求,特意設置了一個功能,可以實現對多個組進行交互式排序。簡單的說,如果一個報表中含有嵌套的行組、,而且每個行組都是基於單個數據集字段,則可以在這個報表中添加對父組值、子組值或者詳細信息行進行排序的交互式排序按鈕。
如果用戶有這方面需求的話,數據庫管理員就需要重新設計這張報表。需要按組合了多個字段的表達式進行分組。如還是以上面這個購買力的報表為例。在數據庫中設計的時候,是按照年齡層次、購買力兩個字段(注意有先後順序)來排列的。而用戶提出來,在使用報表的時候他們可能還希望根據性別與購買能力兩個字段來進行排序。此時在這個對象設計的時候,需要將這兩個字段捆綁為一個組(利用組表達式來指定)。如此的話,在報表設計的時候,就可以讓用戶根據這個組(其實是兩個字段)來進行排序。不過需要注意的是,如果一個組中有多個字段,其排序的時候,字段的先後順序非常重要。這個跟OrderBy語句中的規則是一樣的。