1. 程式人生 > >【BIEE】15_時間維度建立

【BIEE】15_時間維度建立

inline roc 10g date 圖標 pre loop 建表 to_date

時間維度的建立

1.環境準備

①新建時間維度表:TIME_DIMENSION

建立時間維度表並插入數據

---------------創建時間維度表
create table TIME_DIMENSION
(
  the_date     NUMBER not null,
  date_name    NVARCHAR2(15),
  the_year     NUMBER,
  year_name    NVARCHAR2(10),
  the_quarter  VARCHAR2(10),
  quarter_name NVARCHAR2(10),
  the_month    
NUMBER, month_name NVARCHAR2(10), the_week NUMBER, week_name NVARCHAR2(10), week_day NVARCHAR2(10) ) tablespace users pctfree 10 initrans 1 maxtrans 255 storage ( initial 64 next 1 minextents 1 maxextents unlimited ); --創建存儲過程腳本: CREATE
OR REPLACE PROCEDURE SP_CREATE_TIME_DIMENSION(begin_date in varchar2, end_date in varchar2) is /*SP_CREATE_TIME_DIMENSION: 生成時間維數據 begin_date: 起始時間 end_date:結束時間 */ dDate date; v_the_date number; v_the_year varchar2(4); v_the_quarter
varchar2(2); v_the_month varchar2(10); v_the_month2 varchar2(2); v_the_week varchar2(2); v_the_day varchar2(10); v_the_day2 varchar2(2); v_week_day nvarchar2(10); adddays int; BEGIN adddays := 1 ; dDate := to_date(begin_date,yyyymmdd); WHILE (dDate <= to_date(end_date,yyyymmdd)) loop v_the_date := to_number(to_char(dDate,yyyymmdd));--key值 v_the_year:= to_char(dDate, yyyy);-- v_the_quarter := to_char(dDate, q);--季度 v_the_month:=to_char(dDate, mm);--月份(字符型) v_the_month2:=to_number(to_char(dDate, mm));--月份(數字型) v_the_day:=to_char(dDate, dd);--日(字符型) v_the_day2:=to_char(dDate, dd); v_the_week:= to_char(dDate,fmww);--年的第幾周 v_week_day := to_char(dDate, day); --星期幾 insert into time_dimension(the_date,date_name,the_year,year_name, the_quarter,quarter_name,the_month, month_name,the_week,week_name,week_day) values(v_the_date,v_the_year||||v_the_month2||||v_the_day2||,v_the_year,v_the_year||, v_the_year||Q||v_the_quarter,v_the_year||||v_the_quarter||季度,to_number(v_the_year||v_the_month), v_the_year||||v_the_month2||,v_the_week,||v_the_week||, v_week_day); dDate := dDate + adddays; END loop; end SP_CREATE_TIME_DIMENSION; --執行存儲過程 call SP_CREATE_TIME_DIMENSION(19800101,19900101); commit;

② 事實表直接使用EMP表即可,在該表的基礎上新增一列,為後邊與時間維度表關聯做準備

ALTER TABLE EMP ADD  S_HIREDATE NUMBER;
update emp set S_HIREDATE=to_number(to_char(hiredate,yyyymmdd),99999999)

2.數據導入資料庫

【打開PRD】—【導入元數據】--【此處數據庫為Oracle:選擇OCI 10g/11g】

技術分享圖片

技術分享圖片

技術分享圖片

接著【下一步】

技術分享圖片

表導入完成後

技術分享圖片

3.建立物理層

此時,為了【①保留原先導入表的信息與結構;②給表排序(次要)】,我們為每個表建立別名

右鍵表名---然後【新建對象】---【別名】

技術分享圖片

同理,為維度表【TIME_DIMENSION】也建立別名,建立完成以後如下圖

技術分享圖片

接著進行表關聯

【選中所建立的別名:Dim_01_time與Fat_01_emp】--【右鍵】---【物理圖表】---【僅限所選對象】

技術分享圖片

技術分享圖片

定義好的維度關系如下:

技術分享圖片

連接建立完畢後如下圖:

技術分享圖片

4.模型層設計

我們可以將物理層直接拖拽到模型層,此時,我使用新建

點擊【業務模型和映射】空白處-----右鍵---【新建業務模型】

此處,我們就保持跟物理層一致,用【SCOTT】命名

技術分享圖片

建立完成後

技術分享圖片

此時,我們將需要的拖拽到【業務模型和映射層】

技術分享圖片

通過上圖,我們就可以看到帶#號的便是事實表,不帶的是維度表

接著,開始建立【時間層次結構】

【右鍵時間維度表】--【創建邏輯維】--【具有基於級別的層次維度】,創建完成後會出現一個三維坐標圖標

技術分享圖片

【展開這個三維坐標圖標】--【選中Detail層,右鍵】—【新建對象】--【父級】--【新建:月

技術分享圖片

建立完成後如下:

技術分享圖片

我們的【Detail層相當於日,直接修改為日即可】

技術分享圖片

技術分享圖片

然後右鍵【月】--新建【季】,接著建立【年】

技術分享圖片

層級建立好之後,我們把每個層級對應的字段拖到對應層級下,例如:將Detail下的THE_MONTH拖到【月】下邊

技術分享圖片

其他維度也一樣,拖拽完畢後,刪除多余的字段

技術分享圖片

從上圖我們看到,【日】下的對應字段是一個黃色的小鑰匙標誌,這個叫做【邏輯關鍵字】,年、季、月也需要這種關鍵字

右鍵【月】下的【THE_MONTH】--【新建邏輯級別關鍵字】

技術分享圖片

點擊【確定】後,我們可以看到,在【月】下邊可以看到小鑰匙也出現了,依次設置【季、年】

技術分享圖片

設置完畢後

技術分享圖片

此時,我們修改一下維度的中文顯示(雙擊即可修改)

技術分享圖片

上述維度建立完成後,那麽接下來就是設置事實表的聚合規則

展開【維度表】,雙擊【EMPNO】,此處統計客戶數,選擇【Count Distinct】

技術分享圖片

設置完成後,我們發現字段EMPNO變成黃色的了

技術分享圖片

同時,也可以【新建邏輯列】,例如:我們要計算每個員工的總收入(工資+獎金)

點擊【Fat_01_emp】--【右鍵】--【新建對象】--【邏輯列】

技術分享圖片

設置列源來自【現有列派生】

技術分享圖片

點擊【確定】後

技術分享圖片

同時將SAL、COMM字段的聚合規則設置為SUM

接著,模型層優化與美化:①把不需要的字段刪除 ②把英文改為中文

技術分享圖片

上述時間表的【年、季、月、日】顯示順序,可以雙【Dim_01_時間】進去修改

技術分享圖片

5.展現層設計

直接將模型層拖拽到表示層即可。

如果表太多,可以在表示層對事實表與維度表分類

我們在主題區域上新建表示表。【單擊SCOTT】--【右鍵】--【新建表示表】(例如:維度)

技術分享圖片

雙擊【維度】

技術分享圖片

點擊【綠色加號】

技術分享圖片

選擇【Dim_01_時間】後

技術分享圖片

此時,再次保存資料庫,登錄BIEE主頁

技術分享圖片

從上圖,我們可以看出,時間維表已經被放在文件夾【維度】下邊了

簡單測試:

我們拖動字段制作分析如下

技術分享圖片

保存後,打開分析

技術分享圖片

點擊合計後可以一一展開【鉆取】

技術分享圖片

【BIEE】15_時間維度建立