【BIEE】15_時間維度建立
時間維度的建立
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_monthNUMBER, 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 ); --創建存儲過程腳本: CREATEOR 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_quartervarchar2(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_時間維度建立