Oracle BIEE (Business Intelligence) 11g 11.1.1.6.0 學習(4)建立多維切入分析

來源:互聯網
上載者:User

  在上一節時,我們建立了一個基於部門號的工資分類匯總。 這裡就引出了一個概念:維度

  專業的解釋大家自行百度,這裡就不班門弄斧了。從資料的使用角度看,維度可以簡單的理解成“資料分類匯總的一種依據”。

  按“部門號(DEPTNO)”對“工資(SAL)”進行分類匯總,“DEPTNO"就是一種維度;按“工作崗位(JOB)”對“工資”進行分類匯總,“JOB”就是另一種維度;

  維度之間也可以有層次關係,比如:我們先按“工作崗位” 匯總,然後每個相同工作崗位的員工,再按“部門”匯總。這種情境下:DeptNo就認為是Job的子級維度。

  先按Job摘要資料,相同Job的,再按DeptNo做更詳細的資料匯總,這種逐層深入的資料分析過程,在BI層裡有一個專業術語:切入(Drill).

  下面就剛才的情境(即:按JOB -> DEPTNO來層層對SAL進行分類匯總),來看看維度如何建立:

一、db表結構的建立

  通過上回的學習,大家應該有一個大概印象,每種資料分類的依據,我們應該建立一張小表來與之對應(比如按部門號匯總時,DEPT部門表就認為是一張維度資料表)

  現在我們要通過JOB、DEPTNO 這二個有層級的維度對資料進行分析,所以:得有二張表。

  動手之前,插點題外話:通常對資料進行分析比較消耗db效能(特別是複雜的分析),所以一般真正的BI分析,都會事先把資料抽取到另一張表(甚至另一個專用於BI分析的庫),這樣分析時,不至於影響正常的生產系統使用。
這裡我不想對資料幫浦展開討論(事實上,這一塊我還沒學會~_~),但是為了體現這個思想,我們建立幾張以“BI_”為首碼的新表來作為BI分析的資料來源。

create table BI_DIM_JOB as  select  distinct(job) from emp;create table BI_DIM_DEPT as select deptno,dname from dept;

  這樣就建立了二張小表BI_DIM_JOB、BI_DIM_DEPT以對應JOB、DEPT二個維度,但通常表還得有主鍵:

alter table BI_DIM_JOB  add constraint PK_BI_DIM_JOB primary key (JOB);alter table BI_DIM_DEPT  add constraint PK_BI_DIM_DEPT_DEPTNO primary key (DEPTNO);

  加上主鍵後,我們再來看下主表EMP,既然JOB、DEPTNO都準備用單獨的小表記錄,主體表中就不再需要這些欄位了,我們只是想對SAL進行分析,所以我們把EMP主表也做下處理:

create table BI_FACT_EMP as select empno,sal from emp;alter table BI_FACT_EMP  add constraint PK_BI_FACT_EMP primary key (EMPNO);

  這樣就得到了一張新的(事實)主表,做為BI的事實表資料來源。

  哦,仔細看了一下:這張表裡沒有ENAME(員工姓名),乾脆,把EMPNO也當成一個維度,獨立出來吧:

create table BI_DIM_EMP as select empno,ename from emp;alter table BI_DIM_EMP  add constraint PK_BI_DIM_EMP_EMPNO primary key (EMPNO);

  看到這裡,可能已經有人發現了一個重大的問題:主表BI_FACT_EMP與這些小表之間好象沒有任何資料上的關聯關係?

  看來,還少一張用於描述EMPNO與JOB、DEPTNO之間關係的表:

create table BI_DIM_DRILL_EMP as select job,deptno,empno from emp group by job,deptno,empno order by job,deptno,empno;alter table BI_DIM_DRILL_EMP  add constraint PK_DIM_DRILL_EMP_EMPNO primary key (EMPNO);alter table BI_DIM_DRILL_EMP  add constraint FK_DIM_DRILL_EMP_REF_JOB foreign key (JOB)  references bi_dim_job (JOB);alter table BI_DIM_DRILL_EMP  add constraint FK_DIM_DRILL_EMP_REF_DEPTNO foreign key (DEPTNO)  references bi_dim_dept (DEPTNO);alter table BI_DIM_DRILL_EMP  add constraint FK_DIM_DRILL_EMP_REF_EMPNO foreign key (EMPNO)  references bi_dim_emp (EMPNO);alter table BI_FACT_EMP  add constraint FK_BI_FACT_EMP_REF_EMPNO foreign key (EMPNO)  references bi_dim_drill_emp (EMPNO);

  好了,天下太平,主表BI_FACT_EMP 與 從表 BI_DIM_DRILL_EMP 通過EMPNO關聯,而 BI_DIM_DRILL_EMP 再進一步通過EMPNO、JOB、DEPTNO分別與BI_DIM_EMP、BI_DIM_JOB、BI_DIM_DEPT關聯,完全符合資料庫範式。

  光看上面的sql指令碼,比較容易暈,為了更直觀的說明各表的關係,這裡給一張關係圖:

二、建立RPD 模型及維度

2.1、 先用“BI管理”工具,聯機開啟當前RPD,並把原來的對象全清空掉,再按前幾次學到的知識,把剛剛新建立的"BI_"打頭的表,全添加進來,弄好後,大概是下面這個樣子

注意圖中二個黃色的欄位:SAL_SUM、EMPNO_COUNT,這是我手動新添加的二個彙總欄位,SAL_SUM是對SAL的SUM彙總,而EMPNO_COUNT是對EMPNO的COUNT彙總,參見:

 2.2、 在scott上右擊->建立對象-》邏輯維-》具有基於層級的層次的維

在彈出的介面中,輸入名稱:BI_EMP_DIMs

然後在BI_EMP_DIMs上右擊-》建立對象->邏輯層級

輸入EMPNO(即建立最底層的維度)

 然後把BI_DIM_DRILL_EMP下的EMPNO拖動到剛建立的維度EMPNO下,如:

完成後,類似:

在EMPNO維度上右擊-》建立對象-》父層級

 命名為DEPTNO 

完成後,可以看到DEPTNO與EMPNO已經呈現出父子層次關係

同樣,把BI_DIM_DRILL_EMP中的DEPTNO拖動剛建立的維度DEPTNO上,如:

在DEPTNO維度上,再繼續建立父級維度JOB

同樣把BI_DIM_DRILL_EMP上的JOB拖動到新建立的維度JOB上,最終的維度層次如:

2.3、建立維度關鍵字:在JOB上右擊->建立邏輯層級關鍵字(如)

儲存預設,不作任何修改,直接點擊“確定”

類似的,在DEPTNO,EMPNO二個子級維度上,也建立關鍵字,然後點擊儲存,最終的樣子如:

註:儲存成功後,每個維度下的欄位前,會有一個類似“手*槍”的小表徵圖

2.4、把整個維度BI_EMP_DIMs拖動到【表示】層中的BI_FACT_EMP上,如:

如果這時點擊儲存,會彈出如下錯誤:

解決方案:在EMPNO上右擊-》屬性(如)

點擊+號

在彈出的介面中,展開SCOTT下的BI_DIM_DRILL_EMP表,雙擊EMPNO(即設定BI_DIM_DRILL_EMP的EMPNO欄位為維度EMPNO的顯示列)

類似的,把BI_DIM_DRILL_EMP的DEPTNO設定成維度DEPTNO的顯示列,把BI_DIM_DRILL_EMP的JOB設定成維度JOB的顯示列,再次點擊儲存,應該就能成功了。

模型和維度終於弄好了,已經成功80%,革命勝利在望!

三、建立切入分析

登入,切換到管理菜單,點擊“重新負載檔案和中繼資料”,以便讓剛才修改過的RPD生效

建立一個分析,從左側的主題地區裡,可以看到剛才建立的各種模型,我們選JOB和SAL_SUM、EMPNO_COUNT這三列,如:

切換到結果標籤,如,注意JOB欄位標題及該列資料,都以A連結的形式呈現,為了方便以後修改,這裡我們先儲存一下,檔案命名為SCOTT_EMP_DRILL,同時點擊工具列的小表徵圖(如),預覽下在儀錶盤中的效果

這是儀錶盤中的呈現效果,可以在JOB標題上點擊一下

這裡,BIEE會根據維度層次關係,自動“下鑽”到下一個維度(即DEPTNO),如:

DEPTNO維度下,還有最底層維度EMPNO,還可以繼續下鑽,如(注意一下每次切入後,SAL_SUM、EMPNO_COUNT這二列的值會自動更新)

當然,維度不止這一種玩法,還可以直接把整個維度放到分析結果中,如,如果雙擊BI_EMP_DIMs把整個維度加入所選列

為了美觀,我們把列名“漢化”一下

把欄位標題改成“工資”,其它幾列也類似處理

現在看起來舒服多了

可以點擊分組資料前的+號展開,這樣就以另一種類似樹狀的方式進行切入了

最後,為了讓分析結果看起來更fashion一點,給它加個動態圖表。不過做這個之前,有一個細節得先處理一下,“人數(EMPNO_COUNT)”是“個位元”層級的(<10),而“工資匯總(SAL_SUM)”是“千位元”層級的,如果二個條形柱顯示在同一張圖中,"人數"的柱狀圖高度幾乎接近於0,根本看不出來,所以有必要把“人數”的數值放大一些,以保持跟SAL_SUM接近(至少同一個數量級)

把人數放大1000位以後,結果看上去還比較滿意

下面是切入過程中,圖表動態變化的幾張:

下鑽到DEPTNO維度時的

下鑽到最底層EMPNO時的

截了近一天的圖,總算寫完了,希望對於正在學習oracle BIEE的朋友們有所協助

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.