越來越多的SAP用戶正在將SAP HANA實施為現有SAP BW的基礎和數據庫。有些可能只是用現代SAP HANA數據庫替換現有數據庫,以提高查詢執行和倉庫管理的速度。當然,這是SAP BW中SAP HANA實施的關鍵目標,但不是唯一一個。
在我看來,使用 SAP HANA Studio 或 Eclipse 緊密集成 的SAP HANA 功能以設計新的數據倉庫管理方式,至少與改善報表性能一樣重要。
當可以動態計算新的報表數據時,為什么還要使用 SAP 應用程序層的舊習慣,在持久層中存儲越來越多的數據? 使用基於 SAP HANA 的暫存(staging)來增強數據流,而無需在多個層(SAP staging layer [SLA])中對傳入數據進行物理暫存,這是我正在客戶現場進行的工作。
本文鏈接:https://www.cnblogs.com/hhelibeb/p/15371591.html
英文原文:SAP-HANA-Calculation-Views
我的方法可以幫助你在設計更改時更加靈活,因為當業務邏輯更改時,暫存層中不會卸載或重新加載數據。 它還可以將 SAP HANA 的運營成本保持在最低水平,因為 SAP HANA 數據庫中的數據越少意味着許可費用越低。
(在由 SAP HANA 提供支持的現代 SAP BW 中,通過持久層切換到虛擬數據暫存、而不是老式數據暫存是明智的。針對復雜場景的SAP HANA計算視圖和過程有助於動態計算數據,從而在涉及數據暫存或數據模型中的擴展/減少方面的業務相關更改時,將卸載和重新加載階段減少到零。在使用SAP HANA Studio或Eclipse的SAP HANA環境中,SAP BW運維人員可以非常輕松地從老式模型切換到新的基於計算視圖的建模,或者運行二者混合場景。)
SAP HANA過程是一個數據庫存儲過程,它通過SAP HANA SQL腳本提供編程功能,類似於ABAP函數。 現在,我將在計算視圖(基於圖形和 SQL 腳本的視圖)的幫助下指導你創建 SAP HANA 數據流,包括你可能遇到的一些陷阱。
我的示例(下圖)是一種簡單的混合方法。
這意味着你使用現有的 SAP BW 入站數據(基於 DataStore 對象 [DSO],在 SAP BW 入口層中)。你還可以將SAP BW表信息(例如SAP數據字典[DDIC]表)合並到一個組合計算視圖中,可以與SAP HANA Composite Provider for BEx或Analysis for Office報告結合使用。 你還可以直接在Analysis for Office報告中使用計算視圖(這里不涉及權限問題)。
(DataStore對象:DSO(數據存儲對象)是以最低粒度級別保存清理和整合的事務或主數據的存儲位置,並且可以使用 BEx 查詢分析這些數據。 DataStore 對象包含關鍵指標和特征字段,數據可以使用增量更新或其他 DataStore 對象甚至從主數據進行更新。 這些 DataStore 對象通常存儲在二維透明數據庫表中。)
所有的截圖都基於Eclipse。 我正在運行Eclipse Neon 3和最新的SAP BW和SAP HANA附加組件。 可以使用 SAP Note1944835 – SAP BW Modeling Tools – Delivery Schedule 1944835 – SAP BW Modeling Tools – Delivery Schedule 找到SAP BW建模工具集。
在以下說明和示例中,我使用基於外部SAP HANA視圖的數據。 在我的示例中,我使用技術DSO內容數據在圖形計算視圖中提供數據和使用數據。 我將該數據與第三個圖形計算視圖中的SQL 腳本計算視圖結合使用,以連接這兩個數據。 我會解釋在圖形計算視圖中通過常規聯接訪問數據與基於 SQL 腳本的計算視圖相比的區別,並解釋SQL 腳本計算視圖的優點。 最后,你可以使用第三個計算視圖,將所有視圖連接到一個點,在 BEx 查詢的幫助下或直接與Analysis for Office結合,為報表用戶提供復合提供程序。
(本文假定讀者熟悉Eclipse使用)
開始創建HANA計算視圖
首先,切換到SAP HANA Development視圖。 建議在SAP HANA開發的情況下使用這個視圖。在所有其他視圖,都無法創建 SAP HANA hdb 過程。
第一個計算視圖是一個簡單的圖形視圖。 右鍵單擊開發包並選擇 New,然后選擇 Calculation View,如圖所示。
操作后顯示如下圖,
(注意:如果屏幕看起來不同,請確保選擇了Repositories選項卡)
接着輸入所需的計算視圖技術名稱,例如 MY_NEW_VIEW(沒圖)。 保留默認類型,即Graphical,然后單擊完成按鈕。 默認情況下,系統會生成兩個對象:語義和聚合對象。
在左側,可以找到所有可用的設計對象。 從投影(Projection)選項開始。 將其拖放到場景的空白區域。 投影允許訪問 SAP HANA 中的所有可用對象,例如 DDIC 表、信息提供者、主數據和現有的 SAP HANA 視圖。
將鼠標移到投影對象上時,會看到一個綠色的加號。
單擊加號圖標(數據訪問)打開一個對話框,可以在其中搜索所需的對象。 可以讀取數據,然后將該對象添加到實際視圖中。
單擊加號圖標后打開的對話框可以搜索所需的對象。 在我的示例中,我輸入了 SAP BW 技術內容對象 WIS_C03(SAP technical cude集TCT_C03 的副本,它是一個InfoCube)的搜索字符串。 正如下圖中展示的,搜索結果返回所有可用的 SAP HANA 對象,例如 InfoProvider 本身和所有現有的部分(例如,維度)表。
我選擇了 InfoCube 本身,它由 Cxx 后綴(從頂部開始的第三項)表示,方法是雙擊條目或簡單地選擇條目並選擇 OK 按鈕。 我建議創建引用其類型的 ADSO(一種標准 DSO)技術名稱,例如 C(用於類型 Cube)。
除了將選擇對象添加到投影並顯示名稱之外,您還可以在編輯器詳細信息窗格中看到所選對象的結構(在我的示例中是 InfoCube 結構),其中顯示了 InfoObjects 以及cube SID 條目。
單擊詳細信息視圖中的子彈形圖標可將該特定 InfoObject 添加到該投影的輸出(下圖)並將其顏色更改為橙色(已選擇)。 此選擇類似於將表的字段添加到事務SE11中的自定義視圖。 LED 形狀的圖標就像一個撥動開關。 灰色表示該字段已關閉(不使用),而橙色表示該字段已打開。
因為 InfoCube 使用 SID 以及 InfoObject 鍵,所以選擇可能有點耗時。 為了更好地查看 InfoCube,我建議通過管理工作台中的更改視圖激活該特定InfoCube的外部 SAP HANA視圖。 或者自動激活所有cube/DSO。
如果已經激活了外部 SAP HANA 視圖,可以直接從 Projection 搜索對話框中選擇該視圖(下圖)。
選擇這個外部 SAP HANA 視圖可以讓你更輕松地使用計算視圖。 如下圖,僅顯示 InfoObjects 及其文本元素(如果存在)。 可以將它們添加到投影的輸出中。
要將投影映射到場景窗格中的現有聚合對象,請單擊 Projection_2 上方的圓圈圖標。 按住鼠標,拖動一個連接(線)到聚合對象的底部圖標,然后松開鼠標。 現在您的投影已連接(圖 12)。
選擇聚合對象將顯示投影的所有字段的結構。 你可以按需決定顯示所有字段還是只喜歡幾個字段。 如果想要全部,最好的方法是右鍵單擊標題區域(黑色標題)並選擇 Add All To Output(下圖)選項,它會自動將所有現有字段映射到輸出,而無需逐個選擇條目。
完成此步驟后,您可以通過單擊 Eclipse 頂部菜單中的激活圖標來激活計算視圖。
激活后,可以通過右鍵單擊對象(例如,投影)並選擇數據預覽來直接顯示每個單獨對象的數據。 (查詢數據的細節不在本文的范圍。)
為了用更多細節豐富我的示例,我添加了來自新 ADSO 的數據。 和以前一樣,將Projection拖到場景中,單擊加號圖標,然后選擇所需的對象(在我的例子中,InfoProvider被命名為WIS_D01,如下圖 所示)。
可以看到兩個投影。 第一個已經連接到聚合對象。 現在加入這兩個表。 (這樣就不會丟失所有現有的映射,將連接對象從右側直接拖放到第一個投影和聚合對象之間的連接線上。這會自動添加連接而不破壞任何映射。之后場景如下圖所示。)
最后一步是將第二個投影的輸出拖到顯示的連接的輸入上。 由於現在在兩個對象(WIS_C01和WIS_D01)之間建立了連接,你需要定義所需字段之間的連接條件。 只需通過單擊橙色項目符號來選擇輸出字段,並在連接對象之間拖放一條線作為連接條件。 我通過從Projection_2傳輸數據並打開 Projection_1 的其他字段加入了 0CALDAY。 InfoObject 0CALDAY(下圖 )現在是連接條件,但它不會傳輸到輸出數據,因為否則將有兩倍的0CALDAY字段。
右鍵單擊聯接連接會打開一個對話框,可以在其中交換左右表(對於外聯接很重要)並顯示“編輯...”選項(下圖)。
當使用連接編輯模式時,會出現一個新對話框,可以在其中設置不同的連接條件和基數(下圖)。 為了簡單起見,保持標准連接條件(內部連接)處於活動狀態。
如你所見,圖形連接不允許您像在ABAP連接中那樣定義復雜的連接條件(例如,使用WHERE語句或復雜的過濾器)。 要創建此類聯接,需要基於SQL的計算視圖。 在這些計算視圖中,可以定義您喜歡的任何連接條件。 作為替代方案,可以將此類聯接和表訪問的編碼傳遞給SAP HANA過程,以提高靈活性。 這些過程可以在系統范圍內用於所有目的。 首先,必須創建一個新程序。 右鍵單擊包並選擇新建,然后選擇其他...,如圖下圖所示。
在對話框中選擇存儲過程,
為新過程提供名稱和目標schema (下圖)。
現在輸入SQL腳本代碼。 我的示例是將SAP BW表RSREQDONE和RSMONICDP中的激活和請求信息添加到最終計算視圖中。

1 PROCEDURE “JOEBOE”.“system-local.public.JOEBOE::P_GET_BW_MONITOR_DATA” 2 3 4 5 (OUT TABLE_OUT table 6 7 ( 8 9 “RNR” NVARCHAR (30), 10 11 “ICUBE” NVARCHAR (30), 12 13 “DP_NR” NVARCHAR (30), 14 15 “STATUS” NVARCHAR (4), 16 17 “QMSTATUS” NVARCHAR (4), 18 19 “REC_INSERT” INTEGER, 20 21 “REC_UPDATE” INTEGER, 22 23 “DATUM” NVARCHAR (8), 24 25 “UZEIT” NVARCHAR (6), 26 27 “TSTATUS” NVARCHAR (4), 28 29 “TDATUM” NVARCHAR (8), 30 31 “TUZEIT” NVARCHAR (6)) 32 33 ) 34 35 36 37 LANGUAGE SQLSCRIPT SQL 38 39 SECURITY INVOKER 40 41 42 43 DEFAULT SCHEMA “MY_SCHEMA” 44 45 READS SQL DATA AS 46 47 48 49 BEGIN 50 51 /***************************** 52 53 The upper table has to be defined exactly like the receiving SQL Script calculation View 54 55 56 57 *****************************/ 58 59 60 61 — Table out will receive all data in exactly the order as given by upper table from 62 63 — next SQL call. It should be aligned to the fields being used in SQL scipt calc view 64 65 table_out = 66 67 68 69 select distinct 70 71 TB1.”RNR” , 72 73 TB1.”ICUBE” , 74 75 TB1.”DP_NR” , 76 77 TB1.”STATUS”, 78 79 TB1.”QMSTATUS” , 80 81 TB1.”REC_INSERT” , 82 83 TB1.”REC_UPDATE”, 84 85 TB2.”DATUM”, 86 87 TB2.”UZEIT”, 88 89 TB2.”TSTATUS”, 90 91 TB2.”TDATUM”, 92 93 TB2.”TUZEIT” 94 95 96 97 from “SAPT04″.”RSMONICDP” as TB1 98 99 INNER JOIN “SAPT04″.”RSREQDONE” as TB2 100 101 on 102 103 TB1.”RNR” = TB2.”RNR” 104 105 WHERE TB2.”DATUM” > ‘20160101’ AND 106 107 TB1.”ICUBE” like ‘0TCT%’ AND 108 109 (TB1.”QMSTATUS” is NOT NULL AND TB2.”RECORDS” > 0) 110 111 order by TB1.”ICUBE” ASC; 112 113 114 115 116 117 END;
我的示例代碼中的第一部分是連接條件中使用的表字段的聲明。 那些聲明的字段稍后會發送到計算視圖(類似於 ABAP 中的內部表)。
SECURITY INVOKERf負責單個用戶可能擁有的稍后運行該過程的授權。 table out 參數接收select語句的結果,並將信息傳遞給稍后使用的輸出表 (table_out)。 使用Ctrl + F3或Eclipse菜單中的激活圖標在編碼無錯誤后激活程序。 下一步是在計算視圖類型的SQL腳本中使用此過程。 (請記住,該過程不是強制性的;可以直接在基於 SLQ腳本的計算視圖中使用代碼。)右鍵單擊包並選擇新建,然后選擇計算視圖。 在熟悉的對話框(下圖)中,確保選擇類型SQL Script(默認為Graphical)並提供必需信息,例如名稱。
下一個對話框顯示了一個熟悉的場景視圖,但只有兩個簡單的對象。
單擊 Script_View 對象並查看顯示的代碼和輸出窗格。 代碼部分相當簡單(如下)。 如你所見,只調用您剛剛創建的過程。
/********* Begin Procedure Script ************/ BEGIN –Call procedure that does Join and structure definition to return its value to calculation view call “MY_SCHEMA”.”system-local.public.JOEBOE::P_GET_BW_MONITOR_DATA”(:var_out); END /********* End Procedure Script ************/
過程中聲明的表var_out現在必須連接到計算視圖的輸出字段。 字段的類型(下圖)和確切的序列必須與過程中table_out定義的類型和序列對齊。
完成所有設置后,激活並測試(數據預覽)基於 SQL 的計算視圖。
最后一步是將此計算視圖與前面的示例結合起來。 只需添加一個新投影,單擊加號圖標,然后搜索基於SQL的計算視圖。
計算視圖不僅允許你插入標准 SAP BW 對象,還允許插入所有SAP HANA對象(例如計算視圖)。
在新添加的項目中打開所需的輸出字段,如上所述。添加新的連接條件並使用新的基於 SQL 腳本的計算視圖映射現有組件。 輸出應該類似於我的示例。
你可以使用 SAP HANA 計算視圖的介紹來幫助構建結合圖形和基於SQL的計算視圖的場景,用於各種用途。 在某些情況下,可以通過將此計算視圖直接添加到復合信息提供者(Composite InfoProvider)以制作報表,完全繞過 DSO 和cube中的經典暫存。
使用 SAP HANA 計算視圖的好處是,可以使用我剛剛在其他幾個視圖(可重用)的投影中創建的視圖,就像我在本文中使用基於 SQL 腳本的視圖一樣。