天天看點

《SAP HANA平台應用開發》—第3章3.2節屬性視圖

本節書摘來自華章出版社《sap hana平台應用開發》一書中的第3章,第3.2節屬性視圖,作者劉剛,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

3.2 屬性視圖

步驟1:建立視圖

如圖3-1所示,選擇“demo”并右擊,在彈出的快捷菜單中選擇“new→attribute view”指令,會在sap hana工作台中彈出圖3-3所示的“new information view”對話框。

圖3-3所示的對話框中提供了多個字段,使用者可輸入或選擇所建視圖的基本屬性。

name:視圖名稱,比如目前示例的名稱為customer。

description:視圖描述,通常輸入有意義的文本,用于說明視圖的功用。

package:視圖所在的package,預設綁定為建立視圖時選擇的package。

view type:視圖類型,在下拉清單框中有兩個選項—attribute view及analytic view。目前示例自動設定該字段為attribute view。

subtype:子類型,在其下拉清單框中有三個選項。

standard類型是預設值,項目中建立的大多數屬性視圖都是這種類型,比如本章示例的“customer”和“supplier_part”都屬于這種類型。

time類型可用于生成olap中常見的時間維,幫助使用者友善地實作時間或日期的轉換,比如計算某日是該年度的第幾周。

derived類型比較特殊。以銷售訂單為例,訂單上有付款方和收貨方,這兩者實際上都是系統中的客戶主資料,是以,通常會“重用”已有的客戶主資料視圖,以此為基礎衍生出付款方視圖和收貨方視圖。

《SAP HANA平台應用開發》—第3章3.2節屬性視圖

在目前示例中,隻需要在“new information view”對話框中輸入name和description即可,單擊“finish”按鈕關閉對話框,與此同時在sap hana工作台中會出現新的視窗,即圖3-4中所示的建立屬性視圖的工作區域。

圖3-4中所示的工作區域可分為以下4個部分。

1)scenario視窗中的“模組化視圖”主要由兩部分組成。

選擇data foundation,使用者可在右側的視窗中實作視圖的“内在”,即指定構成視圖的資料庫表、表間的連接配接關系等,也就是圖3-4中所示的視窗布局。

選擇semantics,會在右側展現不一樣的視窗布局,此時使用者可以裝飾視圖的“外表”,即設定哪些字段需要顯示或隐藏起來、必要時變更字段的描述等。

2)details視窗是操作視圖的主要地方。示例的大部分工作都是在這個視窗中完成的,比如為屬性視圖選擇基礎表、定義這個視圖的輸出(結構)等。

3)output視窗中顯示了構成視圖的所有字段。對于屬性視圖而言,這些字段包括基礎資料庫表的字段及新添加的計算列(calculated column)。

4)properties視窗可用來檢視和編輯視圖中不同對象的屬性,比如構成視圖的基礎資料庫表的字段,或者兩表之間的連接配接關系等。

《SAP HANA平台應用開發》—第3章3.2節屬性視圖

到目前為止,所建立的屬性視圖還隻是一個“空殼”,接下來,會在圖3-4所示的工作區域中定義視圖的實體部分。

步驟2:添加資料庫表

前面介紹了定義屬性視圖的工作界面,現在開始定義視圖的實體部分。實際上,在sap hana中定義屬性視圖并不神秘,也不複雜,這與過去在其他資料庫産品中建立普通資料庫視圖的過程非常相似,其中最基礎也是最重要的步驟就是選擇構成視圖的資料庫表(有時也稱為基礎表),并且使用連接配接(join)定義表間的關系。

在details視窗中右擊,在彈出的快捷菜單中選擇“add”指令,彈出“find”視窗,如圖3-5所示,該視窗可用來查找sap hana系統中現有的、目前使用者賬号擁有通路權限的任意表。

sap hana工作台在打開“find”視窗時預設以清單的形式顯示所有資料庫表。我們可以用浏覽清單的方式查找需要的資料庫表。當資料庫表數量較多時,還可以通過輸入關鍵字的方式進行精确定位。

以圖3-5為例,在“type object name to search for”下方的字段中輸入客戶主資料表名稱的前兩個字母,會顯示數個名稱中包含關鍵字的表(不區分大小寫),選擇customer表再單擊“ok”按鈕,即可在視圖定義中添加該表。

《SAP HANA平台應用開發》—第3章3.2節屬性視圖

在圖3-1所示的tpc-h模型中,可以看到客戶屬性視圖由三張資料庫表組成:customer(客戶主資料)、nation(國家)、region(地區)。

是以,還需要像添加客戶主資料表一樣,把其他兩張表加進來,最終會在details視窗中顯示三張資料庫表的結構,如圖3-6所示。

《SAP HANA平台應用開發》—第3章3.2節屬性視圖

在屬性視圖中有多個表,這就要求我們聲明表與表之間的連接配接關系。以客戶和國家兩個表為例,可以在客戶主資料的“國家編碼”(c_nationkey)上或者details視窗中的任意空白位置右擊并在彈出的快捷菜單中選擇“create join”指令,将會出現用于定義資料庫表連接配接的同名對話框,如圖3-7所示。

以下是create join對話框中的字段,基于這些字段資訊的組合可以實作多種連接配接。

left table:又稱左表。兩表何為左表,何為右表,對外連、參考連接配接等特别重要,會對最終生成的結果集産生影響。

left column:用于連接配接左表中的字段。

right table:與left table相對應的、需要進行關聯的資料庫表,是以稱為右表。

right column:與上述left column對應的字段,建立連接配接時通常都會選擇關鍵字段進行表和表之間的關聯。

join type:連接配接類型,既包括大家熟知的内連(inner join)、左外連(left outer join)、右外連(right outer join),還包括一些獨有的參考連接配接(referential join)和文本連接配接(text join)。

join cardinality:描述了兩表中記錄之間的對應關系,有1..1(1對1)、n..1(多對1)、1..n(1對多)、n..n(多對多)等。

《SAP HANA平台應用開發》—第3章3.2節屬性視圖

在對話框中完成必要的輸入後,單擊下方的“create join”按鈕即可建立連接配接。

在details視窗中,會在所連接配接的兩張資料庫表之間顯示箭頭,方向為從右表指向左表。圖3-8所示為客戶主資料表與國家表之間的連接配接,單擊該線條可以在properties視窗中檢視相關屬性,也能在此進行修改。

在建立了客戶與國家表之間的參考連接配接後,同樣還需要建立國家與地區表之間的參考連接配接,所有的操作步驟可以參照之前的介紹,在此就不再贅述了。圖3-9所示為在details視窗中完成上述操作後最終的顯示效果。

到目前為止,我們已經為這個屬性視圖添加了多個資料庫表,并且聲明了其中必需的連接配接關系,可以說視圖的資料來源已經定義好了。接下來,需要從這些資料庫表的字段中挑選一些需要的,作為視圖的字段暴露出來。

《SAP HANA平台應用開發》—第3章3.2節屬性視圖

**提示資訊:

在details中可以一鍵實作圖形元素的自動排列,單擊右下角的“auto arrange”按鈕,即可美化視窗中的顯示效果。

在建立表和表之間的連接配接時,除了使用上面介紹的右鍵“create join”功能之外,還可以直接用滑鼠選中資料庫中的表某個字段,然後将其拖拽到目标表的某個字段上,進而建立連接配接,其功能和“create join”相同。單擊建立完成的連接配接,使用者還可對這個連接配接的屬性進行修改。**

步驟3:定義視圖結構

在rolap多元資料模型中,如星形、雪花形等,會把次元表的主鍵連接配接到事實表的外鍵上。在sap hana模型中,屬性視圖等同于次元表。是以,這裡挑選資料庫表中的部分或全部字段作為視圖的字段,并為視圖定義主鍵。

在details視窗中,通過檢視資料庫表字段前圓圈的顔色,可以一目了然地了解有哪些字段用作視圖的字段。如圖3-10所示,預設資料庫表字段前的圓圈為灰色,這意味着不會用做視圖字段,此時選中客戶表主鍵“c_custkey”并右擊,在彈出的快捷菜單中選擇“add to output”指令,即可将其設定為屬性視圖字段。

《SAP HANA平台應用開發》—第3章3.2節屬性視圖

在details視窗中為視圖添加客戶表的主鍵“c_custkey”後,字段前的圓圈會立即變為橘黃色。此外,該字段還會出現在output視窗的columns檔案夾下。圖3-11所示為了上述兩種檢視屬性視圖的字段的方法。

《SAP HANA平台應用開發》—第3章3.2節屬性視圖

站在資料分析的角度看,屬性視圖不可能隻有一個主鍵,是以,還需要從客戶次元進行分析,添加更多字段。圖3-12所示為筆者為客戶屬性視圖添加的資料庫表字段,讀者在練習時可以完全參照筆者的示例,也可以增加或删減視圖中相關字段。

前面在details視窗中把多個資料庫表的字段添加為視圖的字段,實際上這些都隻是視圖中的“普通”字段。這裡所謂的“普通”都是相對于視圖主鍵而言的。盡管字段“c_custkey”是客戶表的主鍵,但并不會是以自動成為視圖的主鍵,還需要在字段的屬性中進行相關設定。

《SAP HANA平台應用開發》—第3章3.2節屬性視圖

如圖3-13所示,在output視窗中選擇“c_custkey”字段,在properties視窗中會顯示所選字段的屬性。其中,key attribute屬性可編輯,預設為false,從下拉清單框中選擇“true”選項即可把該字段設定為屬性視圖的主鍵。

《SAP HANA平台應用開發》—第3章3.2節屬性視圖

前面的三個步驟為建立視圖添加了表,設定了字段及主鍵,實際上這些就已經構成了一個完整的屬性視圖。但是,到現在為止,視圖的所有字段都使用了資料庫表中的字段,實際上還可以為屬性視圖添加一些新的、并不來自資料庫表的字段。接下來的步驟将介紹calculated column(以下譯為計算字段,也可譯為計算列)。

步驟4:為視圖添加新列

對前面建立的客戶屬性視圖進行擴充:在tpc-h模型中客戶主資料表提供了賬戶餘額資訊(字段“c_acctbal”),筆者會以此為基礎,在客戶屬性視圖中添加新的計算字段,即為視圖中的客戶記錄設定“欠債賬戶”标記。

output視窗可以分為兩個區域,在步驟3中選擇的資料庫表字段都會出現在columns檔案夾中,而視圖中的新字段,即目前介紹的計算字段,會陳列在calculated columns檔案夾中。如圖3-14所示,選擇calculated columns檔案夾并右擊,在彈出的快捷菜單中選擇“new...”指令來建立計算字段。

選擇“new...”指令後,将彈出calculated columns對話框,在該對話框中即可一步完成計算字段的定義。如圖3-15所示,針對目前示例的“欠債賬戶”标記字段,需要在對話框中輸入下列資訊。

name:計算字段的(技術)名稱,可以由字母、數字、下劃線(_)構成。

label:計算字段的短文本描述。

data type:hana資料庫中提供的标準資料類型。

length:計算字段的資料長度,針對“欠債賬戶”會使用一個字元長的資料類型。

expression:計算字段值的表達式,可以從elements operators functions視窗中選擇不同元素來構造非常複雜的表達式。

《SAP HANA平台應用開發》—第3章3.2節屬性視圖

elements視窗與工作台區域的output視窗非常相似,都會列出屬性視圖現有的字段,當然elements無法顯示所有的字段,缺少的就是建立或正在修改的計算字段。operators視窗提供了一些常見的資料計算符号。組合兩個視窗中的“内容”(輕按兩下選擇),可以構造相對簡單的表達式。

在有複雜需求時,還可以利用functions視窗中提供的功能,該視窗提供了一些非常實用的函數,如資料類型轉換、字元串處理、資料計算、日期轉換等,甚至還可以在表達式中實作邏輯判斷等流程控制。圖3-15中顯示的“欠債賬戶”表達式正是使用了if()對“賬戶餘額”進行判斷,當餘額為負時,會将計算字段中設定為“y”值,否則設定為“n”值。

在“expression editor”頁籤中輸入計算字段的表達式,單擊其中的“validate”按鈕,即可完成對表達式的文法檢查。當表達式文法正确時,單擊“validate”按鈕,會彈出valid expression對話框進行提示,如圖3-16所示。

《SAP HANA平台應用開發》—第3章3.2節屬性視圖

https://yqfile.alicdn.com/13453be2e654d5c41e3eeb310f9c9cbd99dd6c21.jpeg

在calculated columns對話框中輸入所有資訊,單擊右下角的“ok”按鈕即可建立計算字段,此時會在output視窗的calculated columns檔案夾中顯示該計算字段的技術名稱。如圖3-17所示,選擇該計算字段,可以在properties視窗中檢視甚至修改計算字段的屬性。

!

《SAP HANA平台應用開發》—第3章3.2節屬性視圖

必須再次說明,建立計算字段不是屬性視圖的必要步驟。筆者在客戶屬性視圖中添加的“欠債賬戶”标記字段,僅僅是為了向讀者介紹相關的步驟及操作,讀者在練習時可以假想一些需求來完善這個客戶屬性視圖。

步驟5:檢查和激活視圖

在步驟1中,對scneario視窗中的data foundation及semantics分别進行了介紹,在分别選擇兩者時,右邊顯示的工作區域界面也不相同。

在此之前所有的操作步驟都是在與data foundation對應的工作區域完成的,在定義完視圖後,切換到與semantics對應的工作區域,如圖3-18所示。在此仍可對視圖的顯示效果進行調整,如隐藏部分字段。

《SAP HANA平台應用開發》—第3章3.2節屬性視圖

在傳統rdbms中會用sql語句建立資料庫視圖,實際上在sap hana中建立資料庫視圖的過程也與此比較相似。前面的步驟等同于撰寫複雜的sql語句,如果sql語句需要執行,目前建立的屬性視圖就需要進行激活,最終在sap hana中生成對應的列視圖。如圖3-18所示,在工作區域右上角的工具欄中有兩個按鈕:save and validate(儲存并檢查)、save and activate(儲存并激活)。

單擊“save and validate”按鈕,會檢查屬性視圖的定義是否正确,比如檢查是否為屬性視圖定義了主鍵,在sap hana工作台的job log視窗中可以檢視對應的作業日志,圖3-19所示為驗證完成時的成功資訊。

《SAP HANA平台應用開發》—第3章3.2節屬性視圖

不隻是在前面工作區域中可以檢查或者激活屬性視圖,在sap hana工作台的導航區域選擇屬性視圖并右擊,然後在彈出的快捷菜單中選擇“activate”指令同樣可以開啟視圖的激活操作,如圖3-20所示。

《SAP HANA平台應用開發》—第3章3.2節屬性視圖

在job log視窗中同樣可以找到激活屬性視圖而産生的作業日志,如圖3-21所示。當激活操作出現錯誤時,還可以輕按兩下該視窗中相應的記錄來顯示更詳細的錯誤資訊。

《SAP HANA平台應用開發》—第3章3.2節屬性視圖

從圖3-20和圖3-21中可以發現,在sap hana工作台的導航區域,可以通過檢視屬性視圖前方的圖示來獲知視圖是否處于激活狀态。

如果視圖是建立的或是修改了卻沒有激活,則前方圖示上會出現灰色菱形;而在視圖被激活後,前方圖示上的菱形會消失。

步驟6:預覽資料

盡管在步驟5中有檢查視圖的操作,但那實際上隻是確定視圖本身不存在文法錯誤,可以激活并在sap hana中成功生成對應的列視圖。在生成列視圖(column view,存在于_sys_bic這個schema中)後,我們最關心的就是該視圖是否能夠提供所期望的資料,尤其是當在屬性視圖中添加了計算字段時。

檢查hana屬性視圖的資料并不一定需要使用外部軟體(比如sap bi商務智能套件等),實際上,在hana工作台中已經內建了資料預覽工具,可以采用多種分析方法從不同的角度來驗證資料是否正确。

如圖3-22所示,在導航區域中選擇customer屬性視圖并右擊,在彈出的快捷菜單中選擇“data preview”指令,即可打開資料預覽工具。

《SAP HANA平台應用開發》—第3章3.2節屬性視圖

sap hana中的資料預覽功能內建了3個工具,分别位于工作區域的3個頁籤中。

(1)analysis頁籤

如圖3-23所示,從左往右看,首先是“analysis”頁籤中的資料分析工具。該工具的使用者界面分為如下4部分:

available objects視窗中會顯示視圖的所有字段,并且會根據字段的資料類型自動分成字元串和數字兩組。通常,字元串那組的字段可用做分析時的次元,而數值那組的字元作為名額。

labels axis視窗用來放置使用者為資料分析而選擇的次元。

values axis視窗用來放置使用者為資料分析而選擇的名額。

最右側區域顯示了分析的結果。使用者可以根據分析的需求或個人的喜好,挑選不同的樣式來顯示結果,如柱圖、餅圖、趨勢圖等。

在圖3-23中,盡管客戶屬性視圖不是cube結構,但該視圖中的“c_acctbal”字段是數值類型,記錄了客戶的賬戶餘額,是以,可以把這個字段作為名額,然後再選擇需要進行分析的次元,比如添加“r_name”(地區名稱)作為分析的次元。預設顯示出來的結果是用柱狀圖展現了五大地區的賬戶餘額的彙總值。

《SAP HANA平台應用開發》—第3章3.2節屬性視圖

(2)distinct values頁籤

“distinct values”頁籤用來分析視圖的單個字段有哪些值,以及這些值出現的頻率,相當于執行下列sql語句來做分析:

select distinct <字段>, count(<字段>) from <視圖> group by <字段>

圖3-24所示為“r_name”字段上的分析結果,available objects視窗中列出了視圖的所有字段,目前已輕按兩下選中了“r_name”字段。目前頁面會用多種樣式向使用者呈現分析結果,可以是表格(在中間視窗),也可以是更直覺的柱圖(在最右側視窗)。

《SAP HANA平台應用開發》—第3章3.2節屬性視圖

(3)raw data頁籤

最後是“raw data”頁籤,此時會在表格中顯示視圖的資料,實際的展現樣式可參考圖3-25所示的客戶屬性視圖的資料。這種方式更加便于驗證計算字段的值,例如,驗證計算字段“cc_dun_acc”(即欠債賬戶)的值是否正确,比較字段“c_acctbal”(即賬戶餘額)中的數值來确認計算字段的值符合預期。

《SAP HANA平台應用開發》—第3章3.2節屬性視圖

查詢屬性視圖的資料,不僅可以使用前面介紹的內建在sap hana工作台中的工具,還可以自己編寫并執行相關sql語句。

在激活屬性視圖以後,系統會在“_sys_bic”這個schema中生成對應的列視圖,讀者可以展開schema→column view,然後會看到所有生成的列視圖,同時該列視圖的名稱遵循下列命名規範:

//.../<屬性視圖名稱>

package允許多層,是以,在列視圖的命名中,會把所有package層級都列出來并用“/”分隔。

在本例中,“customer”屬性視圖存放在“demo”這個package根目錄下,是以,對應的列視圖的名稱為“demo/customer”,圖3-26所示為查詢客戶屬性視圖的結果。

提示資訊:

目前步驟介紹了在sap hana工作台中主要使用的資料查詢方法,這些方法不僅适用于屬性視圖,同樣适用于查詢sap hana中任意模組化對象的資料。特别是使用sql語句查詢列視圖的方法,可以幫助讀者了解如何在sap hana中找到“能夠真正提供資料的”模組化對象,進而為讀者使用外部資料通路工具通路sap hana中模型提供了便利。

《SAP HANA平台應用開發》—第3章3.2節屬性視圖

到此為止,已經介紹完了在sap hana中搭建屬性視圖的通用步驟,相信讀者在此過程中已對屬性視圖的主要特性有所了解了。

接下來再看看屬性視圖中一些不常用的特性,比如filter(過濾條件),進而讓讀者能夠對屬性視圖有更加全面的掌握。

在sap hana項目中,通常直接使用oltp資料庫表,并在此基礎上搭建cube。很多時候,表中部分資料與模組化實作的分析主題并無關系,此時就需要在sap hana模型(比如屬性視圖)中使用filter(過濾條件)來屏蔽模型中不要的資料,而且這種方法對性能提升的作用也是顯而易見的。

接下來仍以前面建立的客戶屬性視圖為例,在“r_name”字段上設定過濾條件,使得屬性視圖僅僅顯示位于美洲的客戶。

這個示例的操作步驟非常簡單,在工作台中打開“customer”屬性視圖,所有操作在圖3-27所示的details視窗中進行即可。選擇“r_name”字段并右擊,在彈出的快捷菜單中選擇“apply filter”指令。

《SAP HANA平台應用開發》—第3章3.2節屬性視圖

選擇“apply filter”指令後會彈出apply filter對話框,該對話框中的operator(操作符)、value(值),也就是常量與前面選中的字段聯合起來可以構造過濾條件的實質,也就是單個的關系表達式。

對目前示例而言,這個關系表達式為:r_name = “america”。如圖3-28所示,需要在“operator”下拉清單框中選擇“equal”選項,并且在“value”文本框中輸入“america”,單擊“ok”按鈕即可建立過濾條件。

《SAP HANA平台應用開發》—第3章3.2節屬性視圖

在apply filter對話框中還可以查詢目前所選字段中出現的所有值,單擊“value”文本框右側的按鈕,會彈出“value help dialog”對話框,其中會自動顯示出該字段的所有值,選擇任意一個值并單擊“ok”按鈕後,會把該值傳到“value”字段中。

圖3-29顯示了在“r_name”字段右側出現的小漏鬥圖示,這個小漏鬥圖示代表已為該字段設定了過濾條件。有了這個漏鬥标記,在“details”視窗中就能對在哪些字段上設定了過濾條件一目了然。

《SAP HANA平台應用開發》—第3章3.2節屬性視圖

再次激活視圖并打開資料預覽工具,可以在“distinct values”頁籤中檢查視圖中“r_name”字段在設定了過濾條件後的資料。

如圖3-30所示,目前過濾條件明顯已經生效,在客戶屬性視圖中隻能看到“america”的資料。

在一些特殊情況下,在屬性視圖中設定過濾條件可能是一個過渡性的方案,是以,可能最終并不需要長久地使用過濾條件,使用後就需要對過濾條件進行删除。

如圖3-31所示,删除過濾條件很簡單,在“details”視窗中選中相應字段并右擊,在彈出的快捷菜單中選擇“remove filter”指令即可。

《SAP HANA平台應用開發》—第3章3.2節屬性視圖

**注意事項:

sap hana中的過濾條件是否還可以用于對使用者資料通路權限進行管控?實際上,這不是最佳的方案,過濾條件一旦應用,任何賬号通路這一屬性視圖都會得到同樣的結果,除非複制出多個視圖。

是以,sap hana中提供了分析權限(analytic privilege),可以使用關系表達式來控制次元上的值,也可以使用存儲過程動态控制,筆者會在10.2.1節通過一個項目執行個體來對分析權限進行更為詳細的介紹。**