本節書摘來自華章出版社《sap hana平台應用開發》一書中的第3章,第3.3節分析視圖,作者劉剛,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。
3.3 分析視圖
前面介紹的屬性視圖提供了從客戶主資料、供應商主資料、部件主資料角度進行業務分析的次元。那麼如何将這些可用的分析次元和實際需要的分析名額關聯起來呢?答案是:通過分析視圖(analytic view)。下面介紹分析視圖的主要作用和操作步驟。
1)加入事實表,提供分析名額的資料基礎:與前面的兩個屬性視圖相關的事實表(fact table)需要加到分析視圖的“data foundation”中。對應到本書所用的tpc-h模型,orders、lineitem這兩個資料庫表中儲存着銷售訂單的具體資訊(金額、折扣、銷售數量、總價等),這些資訊都是業務人員關心的分析名額,是以,這兩個資料庫表都需要加進來,并且兩個表之間要進行關聯,然後設定哪些字段為“data foundation”的輸出字段。
2)将分析名額(事實表)和分析次元(屬性視圖)關聯起來:将事實表加到“data foundation”之後,需要在“logical join”(隻有分析視圖才有)中加入所需的兩個屬性視圖。然後,将屬性視圖和事實表關聯起來。如果有需要,也可以建立新的計算列(calculated columns)。
3)設定分析名額和分析次元:在“semantics”中可以定義哪些字段為分析屬性,哪些字段為分析名額。
步驟1:建立分析視圖
建立一個新的視圖,選擇“analytic view”作為類型,輸入“customer_order”作為該分析視圖的名稱,其他的基本資訊如圖3-32所示。

然後,單擊“finish”按鈕完成分析視圖的建立,此時sap hana工作台的模組化視圖如圖3-33所示。
分析視圖的工作界面和屬性視圖類似,隻是多了一個“logical join”操作面闆。
步驟2:添加事實(fact table)表
接下來,單擊“data foundation”,在hana_tpch中找到所需要的orders表和lineitem表,然後将其拖拽到右邊的面闆中,如圖3-34所示。
然後,對order表和lineitem表進行關聯,使用的是o_orderkey字段,具體的join type、左表和右表可以參考圖3-35。
在完成上述兩個事實表的連接配接之後,需要設定輸出哪些字段。圖3-36所示,将兩個事實表中的很多字段都添加為輸出列(add to output)。
注意事項:
1)在圖3-36所示的data foundation中,筆者使用了兩個事實表,并且将兩個表中的很多字段添加為輸出列,這些字段有數值、金額、字元等類型。但是,隻有數值類型資料庫字段可以被設定為分析名額(measure)。
2)在同一個分析視圖中,所有的“原始”分析名額字段隻能來自同一個事實表,否則,在激活這個分析視圖時,sap hana會報錯。
例如,order表提供了總金額字段o_totalprice,lineitem表提供了l_quantity字段,如果在senmantics中直接将這兩個字段設定為measure,然後激活,系統會報錯。
如果一定要輸出兩個事實表的字段作為measure,可以在logical join中定義一個新的calculated columns字段(類型必須相同),然後将o_totalprice直接賦予這個新字段列,最後再将這個新建立的calculated columns字段設為measure,再次激活這個分析視圖,這樣就能達到在同一個分析視圖中同時輸出兩個事實表的字段作為分析名額的目的。
步驟3:添加屬性視圖作為分析次元的來源
事實表已經添加完,并且輸出了很多所需的字段列。現在需要将事實表和屬性視圖關聯起來。單擊“logical join”,此時顯示的模組化視圖如圖3-37所示。
在logical join的details視窗中可以看到其中也有一個“data foundation”,這裡看到的其實是前面“data foundation”所定義的輸出字段,它将兩個事實表關聯成一個平面的結構,然後進行輸出。
在圖3-37所示視窗的空白處右擊,在彈出的快捷菜單中選擇“add”指令,或者直接将前面建立的兩個屬性視圖“supplier_part”和“customer”拖拽到這個界面中,完成之後的效果如圖3-38所示,還沒有在這3個對象之間建立任何關聯關系。
接下來,将供應商屬性視圖和data foundation關聯起來。在data foundation中将l_partkey字段拖拽到供應商屬性視圖的ps_partkey字段上,并且将l_suppkey字段拖拽到ps_suppke字段上,進而建立起兩者之間的關聯關系。
這4個字段之間的join type可以選擇“left outer”,這樣可以確定即使在供應商主資料缺失的情況下,依然可以通過事實表中的供應商資料進行統計分析,結果如圖3-39所示。
接下來,需要将客戶主資料視圖和data foundation進行關聯,将屬性視圖中的c_custkey字段拖拽到data foundation的o_custkey上,進而建立起一個連接配接。同樣,這裡也使用“left outer”作為join type,結果如圖3-40所示。
最後,分析視圖的“logical join”的details視窗将顯示圖3-41所示的結果,這表示兩個屬性視圖和事實表已經關聯起來了。
到這裡為止,tpc-h模型已經通過分析視圖實作了。
步驟4:為視圖添加新列
在logical join部分添加屬性視圖,視圖中所有字段預設就會成為分析視圖的字段。在3.2節的步驟4中,可以在data foundation部分為屬性視圖添加計算列字段。對于分析視圖來說也是一樣,但是需要在logical join部分才能進行這類操作。
在分析視圖的data foundation中有訂單日期字段(o_orderdate),接下來會從該字段中解析出年和月,相應地在分析視圖中添加計算列字段o_year和o_month,如圖3-42所示。
圖3-42所示為計算列字段o_year的定義,此對話框和屬性視圖中相應對話框一樣,是以,這裡就不再贅述該對話框中每個字段的作用。但是還需要注意o_year的表達式,這次沒有判斷語句,而是使用了兩個系統函數。
component(date, int):其中int參數在1~6之間取值,這6個數字分别對應年、月、日、小時、分、秒,此函數會根據int參數截取日期的一部分作為傳回結果。
string(arg):其中arg是任意類型的參數,此函數會在資料類型轉換之後,把字元串類型的結果傳回。
是以,年的計算公式如圖3-43所示。
因為年和月(o_month)兩個計算列字段的定義大緻相同,後者資料類型占位兩個字元。為了保證月計算列字段中的值沒有空白位(當為1至9月時),月的計算表達式中還會使用rightstr(string)函數,必要時在數字前補零,如圖3-44所示。
o_year和o_month都是視圖中的分析次元,是以,需要在上述對話框的“column type”下拉清單框中選擇“attribute”選項。在實際應用中,也可以建立作為分析名額的計算列字段。接下來會對視圖中的分析次元和名額進行更多讨論。
步驟5:指定分析名額
sap hana分析視圖是cube結構,是以存在兩種字段類型:attribute即是前面談到的分析次元,measure等同于分析名額。分析視圖中的所有字段初始都會作為attribute存在,是以,需要手工指定哪些是measure。
在分析視圖的semantics部分可以把需要作為分析名額存在的字段設定為measure,圖3-45所示為customer_order的模組化視圖,在其中選擇semantics。
在semantics部分,column視窗中存在兩個頁籤,其中,“local”頁籤中列出了data foundation中的所有字段,預設所有字段都是attribute。我們會選擇lineitem表中的4個字段—l_quantity、l_extendedprice、l_discount、l_tax作為分析名額,如圖3-46所示。單擊字段前的圖示(在“type”列),在下拉清單框中将l_quantity字段的類型從“attribute”更改為“measure”,即分析名額。
在“local”頁籤中隻能找到data fooundation中的字段,要檢視那些添加到屬性視圖中的字段,需要切換到“shared”頁籤,如圖3-47所示。
到這裡為止,在激活該分析視圖之後,就在sap hana中實作了圍繞銷售訂單的分析模型。
最後,讀者可以使用3.2節中步驟6所介紹的資料預覽功能來選擇cube中的分析次元和名額,使用不同的組合進行資料分析。