如何通過一條數(shù)據(jù)庫語句做數(shù)據(jù)分析,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。
創(chuàng)新互聯(lián)是一家專注于網(wǎng)站設(shè)計(jì)制作、網(wǎng)站建設(shè)與策劃設(shè)計(jì),克拉瑪依區(qū)網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十多年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:克拉瑪依區(qū)等地區(qū)。克拉瑪依區(qū)做網(wǎng)站價(jià)格咨詢:13518219792
添加 SQL 數(shù)據(jù)集時(shí)首要任務(wù)就是先在 [web 應(yīng)用根目錄]/WEB-INF/raqsoftConfig.xml 中定義好要使用的物理數(shù)據(jù)源。
… … … …
物理數(shù)據(jù)源創(chuàng)建好后,接下來最重要的一步就是添加 SQL 數(shù)據(jù)集了。只需選擇物理數(shù)據(jù)源,寫上 SQL 語句,點(diǎn)擊查詢數(shù)據(jù),緩存入文件保存就 ok 了!沒錯(cuò),就是這么方便!
數(shù)據(jù)集創(chuàng)建完成后萬事俱備只欠東風(fēng),接下來就可以開始多維分析的體驗(yàn)之旅了。
點(diǎn)擊【添加報(bào)表】,選擇數(shù)據(jù)集,填寫報(bào)表名稱【確定】,齊活!
數(shù)據(jù)集有了,分析指標(biāo)有了,現(xiàn)在就可以任性拖拽你想要查詢的指標(biāo)了,對(duì) SQL 數(shù)據(jù)集的分析也能像文件分析從單機(jī)一步躍升 WEB 環(huán)境了,是不是又找到了倍兒爽的感覺?哈哈
先拖拽幾個(gè)指標(biāo)找找手感:
咦?咋列名都是代碼,不是中文?這樣感覺不友好!同學(xué),這個(gè)問題提的好,其實(shí)答案很簡單,分析出來的報(bào)表列名就是用的 SQL 數(shù)據(jù)集的字段名,所以只要使 SQL 數(shù)據(jù)集返回的字段名是中文就行!
修改數(shù)據(jù)集 SQL 后,點(diǎn)擊重新查詢數(shù)據(jù),緩存入文件,再次添加報(bào)表,發(fā)現(xiàn)字段名變成中文了吧!
怎么樣,看著舒服了吧,一不小心又 get 到新技能!不過看了上面的結(jié)果愛提問的同學(xué)可能又有想法了:部門怎么顯示的是編號(hào),這 0123 代表啥俺又不知道,那咋做分析?哈哈,小編猜到你的想法,早有準(zhǔn)備,嘖嘖。。。
把部門編號(hào)顯示成部門名稱,百變不離其中,還是取決于 SQL 數(shù)據(jù)集的 SQL 語句。通過 LEFT JOIN 做多表關(guān)聯(lián)就可以輕松搞定!
好了,通過上面的學(xué)習(xí)有沒有發(fā)現(xiàn)其實(shí)數(shù)據(jù)集全是由 SQL 語句決定的,這里的 SQL 語句只要符合 SQL 標(biāo)準(zhǔn)語法就行,比如可以通過 AS 對(duì)字段重命名,LEFT JOIN 多表關(guān)聯(lián)實(shí)現(xiàn)名稱的顯示等等,總之一句話:一切向 SQL 看齊!
除了上述這種在界面上添加 SQL 數(shù)據(jù)集的方式外,其實(shí)還可以通過 Tag 標(biāo)簽添加。
SQL 數(shù)據(jù)集和文件數(shù)據(jù)集在 Tag 標(biāo)簽的使用大同小異,只是屬性略有不同。
Tag 標(biāo)簽添加 SQL 數(shù)據(jù)集:
在 Tag 標(biāo)簽中添加 SQL 數(shù)據(jù)集,訪問多維分析頁面時(shí)會(huì)將該數(shù)據(jù)集默認(rèn)作為初始數(shù)據(jù)集,并直接將結(jié)果集以明細(xì)的形式展現(xiàn)在頁面中。
注重細(xì)節(jié)的同學(xué)是不是又發(fā)現(xiàn)了端倪?怎么使用 Tag 標(biāo)簽添加數(shù)據(jù)集時(shí)沒有點(diǎn)擊【查詢數(shù)據(jù),緩存入文件】結(jié)果也能正常展現(xiàn)呢?難道這兩種添加數(shù)據(jù)集的方式還有什么不同嗎?
其實(shí)這兩種方式的底層對(duì)數(shù)據(jù)的處理機(jī)制是一樣的,唯一的不同點(diǎn)就是 Tag 標(biāo)簽添加數(shù)據(jù)集可以理解為是直接為分析頁面設(shè)置了初始數(shù)據(jù)集,這個(gè)時(shí)候程序會(huì)自動(dòng)生成臨時(shí)文件,然后將計(jì)算結(jié)果存入,這樣一來就不用勞您大駕再動(dòng)手緩存了。不過如果您還需要繼續(xù)在頁面上對(duì)初始數(shù)據(jù)集修改或者添加新的數(shù)據(jù)集,那就還得按最開始講的那樣兒,每次修改 SQL 語句后,都需要點(diǎn)擊 【查詢數(shù)據(jù),緩存入文件】重新生成了臨時(shí)文件了。默認(rèn)臨時(shí)文件命名規(guī)則是以時(shí)間毫秒數(shù)組合而成。
怎么樣,SQL 數(shù)據(jù)集在俺自己的應(yīng)用程序里用起來是不是也超便捷?不論是在頁面數(shù)據(jù)集菜單中添加還是在 Tag 標(biāo)簽里添加,其實(shí)都是先讓集算器通過 SQL 取數(shù),然后將返回的結(jié)果集緩存入臨時(shí)文件,之后在頁面上的多維分析就都是基于這個(gè)臨時(shí)數(shù)據(jù)文件取數(shù)了。這樣一來,借用集算器的計(jì)算能力,在界面上就能做拖拽分組、聚合、過濾等等數(shù)據(jù)分析動(dòng)作了。
關(guān)于緩存文件的生命周期小編還是要多嘮叨幾句,簡單分為如下三點(diǎn):
1、當(dāng)緩存文件的父目錄路徑中包含”temp”字樣時(shí),如:/Raqsofttemp/.txt 或 /temp/.txt,程序會(huì)在 Session 超時(shí)時(shí)自動(dòng)清理該緩存文件
2、生成緩存文件時(shí),如果發(fā)現(xiàn)緩存文件不存在,則會(huì)自動(dòng)根據(jù)數(shù)據(jù)集的配置重新生成緩存文件
3、如果緩存文件路徑中沒有 temp 字樣,則不會(huì)對(duì)緩存文件做任何刪除處理,由客戶的系統(tǒng)自己管理這些緩存文件的生命周期
緩存文件的后綴是.txt,聰明的你肯定就能猜潤乾報(bào)表是用 TXT 文件作為中介的,但 TXT 文件的性能有點(diǎn)差,而且數(shù)據(jù)類型也不那么精確,個(gè)別情況會(huì)出點(diǎn)小錯(cuò)。其實(shí)從 SQL 中讀出來的數(shù)據(jù)已經(jīng)是二進(jìn)制格式,再轉(zhuǎn)成文本保存有點(diǎn)費(fèi)時(shí)費(fèi)力不討好。
那么,還能怎么弄?
潤乾報(bào)表提供了二進(jìn)制格式的緩存文件,不過,這時(shí)候我得說一句不過了,這個(gè)功能需要收費(fèi)的集成集算器才能支持了。如果已經(jīng)有了這個(gè)功能組件,那么就簡單了。
打開 [WEB 應(yīng)用根目錄]/raqsoft/guide/jsp/olap.jsp 添加如下 JS API 腳本:
好了,設(shè)置完了,再緩存時(shí)就是以二進(jìn)制文件的類型保存臨時(shí)文件了。
咋樣,是不是超簡單?超便利?超喜歡?
不過話又說回來,上面這種緩存入文件的方式對(duì)于數(shù)據(jù)量不大的情況沒問題,但有時(shí)候我們希望利用數(shù)據(jù)庫的計(jì)算能力(畢竟數(shù)據(jù)庫還可以集群分布等),那又該怎么辦呢?
不要慌,潤乾報(bào)表幫你忙!
在 JSP 腳本中添加不需要緩存數(shù)據(jù)的 SQL 數(shù)據(jù)集。操作起來也不難,只先敲上一個(gè)做原始查詢的 SQL 語句就行。
將 SQL 語句傳遞給數(shù)據(jù)庫做查詢,查詢后分析界面會(huì)直接將結(jié)果集中的字段列出,進(jìn)行拖拽就可以了。
下面以一個(gè)多表查詢做舉例,在 [demo 應(yīng)用根目錄]/raqsoft/guide/jsp/olap.jsp 添加 JS API 進(jìn)行設(shè)置。
腳本添加完成后,訪問分析頁面時(shí)只需要在 URL 里為 sqlId 參數(shù)傳入數(shù)據(jù)集名稱,如下圖所示,使用名稱為 sqlId1 的數(shù)據(jù)集:
將 SQL 數(shù)據(jù)集作為數(shù)據(jù)來源設(shè)置后,就能針對(duì)這個(gè)數(shù)據(jù)集分析了,但分析過程不會(huì)像緩存入文件類型的數(shù)據(jù)集那樣預(yù)先加載這個(gè)數(shù)據(jù)集的數(shù)據(jù),而是通過在這個(gè) SQL 上追加更多的查詢條件、分組、聚合子句方式實(shí)時(shí)在數(shù)據(jù)庫中查詢的,如:select f1 , sum(f2) from (${ 原始 sql}) t where … group by …. having ….
基于上面這種做法,對(duì)性能有高要求的同學(xué)估計(jì)會(huì)有情緒了,很多 DB 不會(huì)優(yōu)化,這樣做就會(huì)搞的很慢,體驗(yàn)并不好。
哈哈,莫捉急,為了提高性能我們針對(duì)簡單 SQL 還有更智能的自動(dòng)改善性能的手段,所謂簡單 SQL 就是單表無分組的 SQL 語句。SQL 會(huì)在被解析后再重組 SQL,而不是用比較慢的子查詢語句。不過當(dāng) SQL 中包含 JOIN、分組、子查詢、UNION 等復(fù)雜查詢功能時(shí),由于無法進(jìn)行拆解,因此程序還是會(huì)自動(dòng)選用子查詢方式進(jìn)行處理。
設(shè)置單表無分組的簡單 SQL:
訪問分析頁面,拖拽指標(biāo),如下圖所示:
像上面例子這樣最終拖拽后基于原始 SQL"select * from 客戶" 生成的 SQL 語句為:SELECT 地區(qū) 地區(qū), 城市 城市,count(客戶 ID) 客戶 ID 計(jì)數(shù) FROM 客戶 t GROUP BY 地區(qū), 城市。
好了,對(duì) SQL 數(shù)據(jù)集多維分析的介紹就告于段落了,現(xiàn)在我們來回顧一下心路歷程:
可以看到我們從可以緩存的少量數(shù)據(jù),到利用數(shù)據(jù)庫計(jì)算能力的大量數(shù)據(jù)都有很好的解決方案,同時(shí)還提供了相應(yīng)的性能提升手段。
看完上述內(nèi)容,你們掌握如何通過一條數(shù)據(jù)庫語句做數(shù)據(jù)分析的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!