溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何通過(guò)一條數(shù)據(jù)庫(kù)語(yǔ)句做數(shù)據(jù)分析

發(fā)布時(shí)間:2021-12-02 10:45:54 來(lái)源:億速云 閱讀:129 作者:柒染 欄目:互聯(lián)網(wǎng)科技

如何通過(guò)一條數(shù)據(jù)庫(kù)語(yǔ)句做數(shù)據(jù)分析,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。

定義物理數(shù)據(jù)源

添加 SQL 數(shù)據(jù)集時(shí)首要任務(wù)就是先在 [web 應(yīng)用根目錄](méi)/WEB-INF/raqsoftConfig.xml 中定義好要使用的物理數(shù)據(jù)源。

<DBList>
<DB name="dqldemo">
<property name="url" value="jdbc:hsqldb:hsql://127.0.0.1/demo" ></property>
<property name="driver" value="org.hsqldb.jdbcDriver" ></property>
<property name="type" value="13" ></property>
<property name="user" value="sa" ></property>
<property name="password" ></property>
… …
</DB>
… …
</DBList>

界面添加 SQL 數(shù)據(jù)集

物理數(shù)據(jù)源創(chuàng)建好后,接下來(lái)最重要的一步就是添加 SQL 數(shù)據(jù)集了。只需選擇物理數(shù)據(jù)源,寫上 SQL 語(yǔ)句,點(diǎn)擊查詢數(shù)據(jù),緩存入文件保存就 ok 了!沒(méi)錯(cuò),就是這么方便!

如何通過(guò)一條數(shù)據(jù)庫(kù)語(yǔ)句做數(shù)據(jù)分析

數(shù)據(jù)集創(chuàng)建完成后萬(wàn)事俱備只欠東風(fēng),接下來(lái)就可以開始多維分析的體驗(yàn)之旅了。

點(diǎn)擊【添加報(bào)表】,選擇數(shù)據(jù)集,填寫報(bào)表名稱【確定】,齊活!

如何通過(guò)一條數(shù)據(jù)庫(kù)語(yǔ)句做數(shù)據(jù)分析

如何通過(guò)一條數(shù)據(jù)庫(kù)語(yǔ)句做數(shù)據(jù)分析

如何通過(guò)一條數(shù)據(jù)庫(kù)語(yǔ)句做數(shù)據(jù)分析

數(shù)據(jù)集有了,分析指標(biāo)有了,現(xiàn)在就可以任性拖拽你想要查詢的指標(biāo)了,對(duì) SQL 數(shù)據(jù)集的分析也能像文件分析從單機(jī)一步躍升 WEB 環(huán)境了,是不是又找到了倍兒爽的感覺(jué)?哈哈

先拖拽幾個(gè)指標(biāo)找找手感:

如何通過(guò)一條數(shù)據(jù)庫(kù)語(yǔ)句做數(shù)據(jù)分析

如何通過(guò)一條數(shù)據(jù)庫(kù)語(yǔ)句做數(shù)據(jù)分析

咦?咋列名都是代碼,不是中文?這樣感覺(jué)不友好!同學(xué),這個(gè)問(wèn)題提的好,其實(shí)答案很簡(jiǎn)單,分析出來(lái)的報(bào)表列名就是用的 SQL 數(shù)據(jù)集的字段名,所以只要使 SQL 數(shù)據(jù)集返回的字段名是中文就行!

利用 AS 返回中文字段名

如何通過(guò)一條數(shù)據(jù)庫(kù)語(yǔ)句做數(shù)據(jù)分析

修改數(shù)據(jù)集 SQL 后,點(diǎn)擊重新查詢數(shù)據(jù),緩存入文件,再次添加報(bào)表,發(fā)現(xiàn)字段名變成中文了吧!

如何通過(guò)一條數(shù)據(jù)庫(kù)語(yǔ)句做數(shù)據(jù)分析

如何通過(guò)一條數(shù)據(jù)庫(kù)語(yǔ)句做數(shù)據(jù)分析

怎么樣,看著舒服了吧,一不小心又 get 到新技能!不過(guò)看了上面的結(jié)果愛(ài)提問(wèn)的同學(xué)可能又有想法了:部門怎么顯示的是編號(hào),這 0123 代表啥俺又不知道,那咋做分析?哈哈,小編猜到你的想法,早有準(zhǔn)備,嘖嘖。。。

LEFT JOIN 搞定編號(hào)代碼顯示

把部門編號(hào)顯示成部門名稱,百變不離其中,還是取決于 SQL 數(shù)據(jù)集的 SQL 語(yǔ)句。通過(guò) LEFT JOIN 做多表關(guān)聯(lián)就可以輕松搞定!

如何通過(guò)一條數(shù)據(jù)庫(kù)語(yǔ)句做數(shù)據(jù)分析

如何通過(guò)一條數(shù)據(jù)庫(kù)語(yǔ)句做數(shù)據(jù)分析

如何通過(guò)一條數(shù)據(jù)庫(kù)語(yǔ)句做數(shù)據(jù)分析

好了,通過(guò)上面的學(xué)習(xí)有沒(méi)有發(fā)現(xiàn)其實(shí)數(shù)據(jù)集全是由 SQL 語(yǔ)句決定的,這里的 SQL 語(yǔ)句只要符合 SQL 標(biāo)準(zhǔn)語(yǔ)法就行,比如可以通過(guò) AS 對(duì)字段重命名,LEFT JOIN 多表關(guān)聯(lián)實(shí)現(xiàn)名稱的顯示等等,總之一句話:一切向 SQL 看齊!

利用 Tag 標(biāo)簽添加 SQL 數(shù)據(jù)集

除了上述這種在界面上添加 SQL 數(shù)據(jù)集的方式外,其實(shí)還可以通過(guò) Tag 標(biāo)簽添加。

SQL 數(shù)據(jù)集和文件數(shù)據(jù)集在 Tag 標(biāo)簽的使用大同小異,只是屬性略有不同。

Tag 標(biāo)簽添加 SQL 數(shù)據(jù)集:

<raqsoft:analysev2
dataSource="dqldemo"  //指定SQL需要使用的物理數(shù)據(jù)源
sql="select * from EMPLOYEE" //SQL語(yǔ)句
… …
>

在 Tag 標(biāo)簽中添加 SQL 數(shù)據(jù)集,訪問(wèn)多維分析頁(yè)面時(shí)會(huì)將該數(shù)據(jù)集默認(rèn)作為初始數(shù)據(jù)集,并直接將結(jié)果集以明細(xì)的形式展現(xiàn)在頁(yè)面中。

如何通過(guò)一條數(shù)據(jù)庫(kù)語(yǔ)句做數(shù)據(jù)分析

注重細(xì)節(jié)的同學(xué)是不是又發(fā)現(xiàn)了端倪?怎么使用 Tag 標(biāo)簽添加數(shù)據(jù)集時(shí)沒(méi)有點(diǎn)擊【查詢數(shù)據(jù),緩存入文件】結(jié)果也能正常展現(xiàn)呢?難道這兩種添加數(shù)據(jù)集的方式還有什么不同嗎?

其實(shí)這兩種方式的底層對(duì)數(shù)據(jù)的處理機(jī)制是一樣的,唯一的不同點(diǎn)就是 Tag 標(biāo)簽添加數(shù)據(jù)集可以理解為是直接為分析頁(yè)面設(shè)置了初始數(shù)據(jù)集,這個(gè)時(shí)候程序會(huì)自動(dòng)生成臨時(shí)文件,然后將計(jì)算結(jié)果存入,這樣一來(lái)就不用勞您大駕再動(dòng)手緩存了。不過(guò)如果您還需要繼續(xù)在頁(yè)面上對(duì)初始數(shù)據(jù)集修改或者添加新的數(shù)據(jù)集,那就還得按最開始講的那樣兒,每次修改 SQL 語(yǔ)句后,都需要點(diǎn)擊 【查詢數(shù)據(jù),緩存入文件】 重新生成了臨時(shí)文件了。默認(rèn)臨時(shí)文件命名規(guī)則是以時(shí)間毫秒數(shù)組合而成。

怎么樣,SQL 數(shù)據(jù)集在俺自己的應(yīng)用程序里用起來(lái)是不是也超便捷?不論是在頁(yè)面數(shù)據(jù)集菜單中添加還是在 Tag 標(biāo)簽里添加,其實(shí)都是先讓集算器通過(guò) SQL 取數(shù),然后將返回的結(jié)果集緩存入臨時(shí)文件,之后在頁(yè)面上的多維分析就都是基于這個(gè)臨時(shí)數(shù)據(jù)文件取數(shù)了。這樣一來(lái),借用集算器的計(jì)算能力,在界面上就能做拖拽分組、聚合、過(guò)濾等等數(shù)據(jù)分析動(dòng)作了。

關(guān)于緩存文件的生命周期小編還是要多嘮叨幾句,簡(jiǎ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、如果緩存文件路徑中沒(méi)有 temp 字樣,則不會(huì)對(duì)緩存文件做任何刪除處理,由客戶的系統(tǒng)自己管理這些緩存文件的生命周期

緩存文件的后綴是.txt,聰明的你肯定就能猜潤(rùn)乾報(bào)表是用 TXT 文件作為中介的,但 TXT 文件的性能有點(diǎn)差,而且數(shù)據(jù)類型也不那么精確,個(gè)別情況會(huì)出點(diǎn)小錯(cuò)。其實(shí)從 SQL 中讀出來(lái)的數(shù)據(jù)已經(jīng)是二進(jìn)制格式,再轉(zhuǎn)成文本保存有點(diǎn)費(fèi)時(shí)費(fèi)力不討好。

那么,還能怎么弄?

潤(rùn)乾報(bào)表提供了二進(jìn)制格式的緩存文件,不過(guò),這時(shí)候我得說(shuō)一句不過(guò)了,這個(gè)功能需要收費(fèi)的集成集算器才能支持了。如果已經(jīng)有了這個(gè)功能組件,那么就簡(jiǎn)單了。

二進(jìn)制緩存文件提升性能

打開 [WEB 應(yīng)用根目錄](méi)/raqsoft/guide/jsp/olap.jsp 添加如下 JS API 腳本:

<script>
guideConf.dataFileType = 'binary'; //binary是二進(jìn)制文件,會(huì)以游標(biāo)方式讀取,能支持超出內(nèi)存的數(shù)據(jù)集;該屬性的默認(rèn)為text文本文件類型。
</script>

好了,設(shè)置完了,再緩存時(shí)就是以二進(jìn)制文件的類型保存臨時(shí)文件了。

咋樣,是不是超簡(jiǎn)單?超便利?超喜歡?

不過(guò)話又說(shuō)回來(lái),上面這種緩存入文件的方式對(duì)于數(shù)據(jù)量不大的情況沒(méi)問(wèn)題,但有時(shí)候我們希望利用數(shù)據(jù)庫(kù)的計(jì)算能力(畢竟數(shù)據(jù)庫(kù)還可以集群分布等),那又該怎么辦呢?

不要慌,潤(rùn)乾報(bào)表幫你忙!

非緩存 SQL 數(shù)據(jù)集

在 JSP 腳本中添加不需要緩存數(shù)據(jù)的 SQL 數(shù)據(jù)集。操作起來(lái)也不難,只先敲上一個(gè)做原始查詢的 SQL 語(yǔ)句就行。

將 SQL 語(yǔ)句傳遞給數(shù)據(jù)庫(kù)做查詢,查詢后分析界面會(huì)直接將結(jié)果集中的字段列出,進(jìn)行拖拽就可以了。

下面以一個(gè)多表查詢做舉例,在 [demo 應(yīng)用根目錄](méi)/raqsoft/guide/jsp/olap.jsp 添加 JS API 進(jìn)行設(shè)置。

<script>
guideConf.sqlId="<%=sqlId%>";//指定sqlid
var sqlDatasets = [
{
sqlId:"sqlId1" //指定數(shù)據(jù)集名稱,不可重復(fù)
,dataSource:"dqldemo" //指定SQL語(yǔ)句所使用的數(shù)據(jù)源
,sql:"SELECT EMPLOYEE.Name as 雇員姓名,DEPARTMENT.NAME as 部門,EMPLOYEE.COUNTRY as 國(guó)家 FROM EMPLOYEE LEFT JOIN DEPARTMENT ON EMPLOYEE.DEPTID=DEPARTMENT.ID" //指定數(shù)據(jù)集SQL語(yǔ)句
,fields:null
},
… …
]
… …
</script>

腳本添加完成后,訪問(wèn)分析頁(yè)面時(shí)只需要在 URL 里為 sqlId 參數(shù)傳入數(shù)據(jù)集名稱,如下圖所示,使用名稱為 sqlId1 的數(shù)據(jù)集:

如何通過(guò)一條數(shù)據(jù)庫(kù)語(yǔ)句做數(shù)據(jù)分析

如何通過(guò)一條數(shù)據(jù)庫(kù)語(yǔ)句做數(shù)據(jù)分析

將 SQL 數(shù)據(jù)集作為數(shù)據(jù)來(lái)源設(shè)置后,就能針對(duì)這個(gè)數(shù)據(jù)集分析了,但分析過(guò)程不會(huì)像緩存入文件類型的數(shù)據(jù)集那樣預(yù)先加載這個(gè)數(shù)據(jù)集的數(shù)據(jù),而是通過(guò)在這個(gè) SQL 上追加更多的查詢條件、分組、聚合子句方式實(shí)時(shí)在數(shù)據(jù)庫(kù)中查詢的,如:
select f1 , sum(f2) from (${ 原始 sql}) t where … group by …. having ….

簡(jiǎn)單 SQL 提升性能

基于上面這種做法,對(duì)性能有高要求的同學(xué)估計(jì)會(huì)有情緒了,很多 DB 不會(huì)優(yōu)化,這樣做就會(huì)搞的很慢,體驗(yàn)并不好。

哈哈,莫捉急,為了提高性能我們針對(duì)簡(jiǎn)單 SQL 還有更智能的自動(dòng)改善性能的手段,所謂簡(jiǎn)單 SQL 就是單表無(wú)分組的 SQL 語(yǔ)句。SQL 會(huì)在被解析后再重組 SQL,而不是用比較慢的子查詢語(yǔ)句。不過(guò)當(dāng) SQL 中包含 JOIN、分組、子查詢、UNION 等復(fù)雜查詢功能時(shí),由于無(wú)法進(jìn)行拆解,因此程序還是會(huì)自動(dòng)選用子查詢方式進(jìn)行處理。

設(shè)置單表無(wú)分組的簡(jiǎn)單 SQL:

<script>
guideConf.sqlId="<%=sqlId%>";//指定sqlid
var sqlDatasets = [
{
sqlId:"sqlId1" //指定數(shù)據(jù)集名稱,不可重復(fù)
,dataSource:"dqldemo" //指定SQL語(yǔ)句所使用的數(shù)據(jù)源
,sql:"SELECT * from 客戶" //指定數(shù)據(jù)集SQL語(yǔ)句
,fields:null
},
… …
]
… …
</script>

訪問(wèn)分析頁(yè)面,拖拽指標(biāo),如下圖所示:

如何通過(guò)一條數(shù)據(jù)庫(kù)語(yǔ)句做數(shù)據(jù)分析

像上面例子這樣最終拖拽后基于原始 SQL"select * from 客戶" 生成的 SQL 語(yǔ)句為:SELECT 地區(qū) 地區(qū), 城市 城市,count(客戶 ID) 客戶 ID 計(jì)數(shù) FROM 客戶 t GROUP BY 地區(qū), 城市。

好了,對(duì) SQL 數(shù)據(jù)集多維分析的介紹就告于段落了,現(xiàn)在我們來(lái)回顧一下心路歷程:

如何通過(guò)一條數(shù)據(jù)庫(kù)語(yǔ)句做數(shù)據(jù)分析

可以看到我們從可以緩存的少量數(shù)據(jù),到利用數(shù)據(jù)庫(kù)計(jì)算能力的大量數(shù)據(jù)都有很好的解決方案,同時(shí)還提供了相應(yīng)的性能提升手段。

看完上述內(nèi)容,你們掌握如何通過(guò)一條數(shù)據(jù)庫(kù)語(yǔ)句做數(shù)據(jù)分析的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI