Oracle BIEE 中的時間維與時間軸函數 |
||||||||||||||||||||||||||||||||||
累計、同比、環比是 BI 項目中常用的分析方法。本文講述如何利用 Oracle BIEE 的時間維(Time Dimension)及時間軸函數(Time Series Conversion Function)實現累計、同比、環比計算。本文使用的示例數據可以通過此鏈接下載:http://www.zw1840.com/。 如果你不瞭解如何創建 Oracle BIEE 資料庫,請參考之前的文章 Hello BIEE。 | ||||||||||||||||||||||||||||||||||
目錄 |
||||||||||||||||||||||||||||||||||
時間軸函數概述 |
||||||||||||||||||||||||||||||||||
累計、同比、環比是 BI 項目中常用的分析方法。如果採用關係型數據庫,直接通過 SQL 語句進行這樣的計算是比較麻煩的。Oracle BIEE 提供的解決方法是時間軸函數。時間軸函數是位於邏輯模型層內的函數,使用時間軸函數能夠定義出“去年同期值”或“本年累計值”之類的與時間相關的計算字段。Oracle BIEE 現在支持兩個時間軸函數:
|
||||||||||||||||||||||||||||||||||
使用時間軸函數的前提條件是在邏輯模型內定義了時間維。上面兩個函數說明中的“時間段”實際上指的是時間維的層級(Level)。例如使用 Ago 函數定義“去年同期值”,指定的時間段爲“年”這一層級,指定的回溯週期爲 1,表示得到去年的值。再比如使用 ToDate 函數定義“本年累計值”,指定的時間段也是“年”這一層級,表示從年的起點(年初)開始到當前時間爲止,求度量值的累計值。 | ||||||||||||||||||||||||||||||||||
創建時間維的準備工作 |
||||||||||||||||||||||||||||||||||
時間維的創建過程與創建普通維度基本相同,只是維度對象的某些設置不同。因此創建物理模型、邏輯模型、及展現模型的過程在此不細說了,如果你不瞭解請參考之前的文章 Hello BIEE。 | ||||||||||||||||||||||||||||||||||
在物理模型層,導入時間維表 V_COMMON_DATE;將 V_COMMON_DATE.DAY_ID 定義爲 V_COMMON_DATE 的主鍵;將 V_COMMON_DATE.DAY_ID 定義爲 V_FINANCE_EXPENSE.CONSUME_DATE 的外鍵。 | ||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||
在邏輯模型層,將物理表“V_COMMON_DATE”拖放到邏輯模型“Finance”內;使用“Rename Wizard”重命名;將邏輯字段“Day Id”定義爲邏輯表“Date Dim”的邏輯主鍵;在邏輯表“Date Dim”和“Expense Fact”之間創建邏輯連接。 | ||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||
在展現模型層,將邏輯表“Date Dim”拖放到展現模型“消費分析”內;只保留年、月、日的名稱字段,並重命名。 | ||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||
需要注意的是,Oracle BIEE 對與時間維相關的物理表及邏輯表有以下要求[6]:
|
||||||||||||||||||||||||||||||||||
創建時間維 |
||||||||||||||||||||||||||||||||||
與創建普通維度對象一樣,以邏輯表“Date Dim”爲基礎創建維度對象“Date”;依次定義層級:“Total Level”、“Year Level”、“Month Level”、“Day Level”,並設定層級的元素數;將邏輯表“Date Dim”的各列拖放當相應的層級;定義各層級的層鍵,並設定主層鍵,以及用於下鑽的層鍵。 | ||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||
時間維與普通維度有兩處不同。首先,雙擊維度“Date”節點,在“Dimension”對話框中需要選中“Time Dimension”選項,以表明此維度對象爲時間維度。 | ||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||
其次,時間維度中需要定義時間序列鍵(Chronological Key)。時間序列鍵的作用是表明時間維中具有一組單調增加的時間序列值[1]。定義時間序列 時存在以下原則: | ||||||||||||||||||||||||||||||||||
在這個簡單的例子中,我只把層級“Day Level”的邏輯層鍵“Day Id”定義爲時間序列鍵。 | ||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||
使用時間軸函數定義度量值 |
||||||||||||||||||||||||||||||||||
定義好時間維後,就可以在邏輯事實表中定義使用時間軸函數的邏輯列了。在邏輯表“Expense Fact”上單擊右鍵,選擇“New Object\Logical Column”創建邏輯列。在“Logical Column”對話框中選擇“Use existing logical columns as source”再按右側的按鈕,可以打開“Expression Builder”編輯邏輯列的公式。最後不要忘記將邏輯列添加到展現模型中。 | ||||||||||||||||||||||||||||||||||
例如,使用 Ago 函數定義“去年同期值”。
第一個參數是邏輯字段 Finance."Expense Fact".Amount,是用於時間軸運算的度量值;第二個參數是邏輯模型時間維的層級 Finance."Date"."Year Level",表明回溯的時間單位爲年;第三個參數表示回溯的時間週期,1 則爲回溯一年,即去年。 |
||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||
再例如,使用 ToDate 函數定義“本年累計值”。
第一個參數是邏輯字段 Finance."Expense Fact".Amount,是用於時間軸運算的度量值;第二個參數是邏輯模型時間維的層級 Finance."Date"."Year Level",表明累計計算開始自年時間的起點,終止到當前時間。 |
||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||
在進行時間查詢時應注意幾個重要的粒度[7],以查詢 select "Date Dim"."Month Name", "Expense Fact"."Amount Year Ago" 爲例:
|
||||||||||||||||||||||||||||||||||
Ago 與 ToDate 函數可以嵌套調用,但需要遵守一定規則[8]。 | ||||||||||||||||||||||||||||||||||
在使用時間序列函數時也有一定限制,具體請參考 BIEE 文檔[9]。 | ||||||||||||||||||||||||||||||||||
查詢 |
||||||||||||||||||||||||||||||||||
定義如下查詢,其中“消費金額(同期)”與“消費金額(年累計)”分別爲使用 Ago 和 ToDate 函數創建的邏輯列: | ||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||
結果如下圖所示: | ||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||
zw1840 at hotmail dot com 轉載請註明出處,謝謝! |