BW:如何加載和生成自定義的層次結構,在不使用平面文件的SAP業務信息倉庫

介紹服務器

一般狀況下,報告須要在一個相似樹的結構來顯示數據。經過啓用此特性在SAP BW層次結構。高級數據顯示的層次結構的頂層節點。更詳細的數據能夠向下鑽取到的層次結構中的下級節點的可視化。框架

考慮一個例子層次客戶聯絡層次「,用於限定電信呼叫中心接收電話。函數

   

圖1:客戶聯絡層次編碼

   

加載層次結構的標準機制spa

有幾種可能性供貨與SAP BW中的數據的層次結構:對象

  • 在SAP BW層次結構能夠手工維護,但大或頻繁變化的層次結構,這樣作固然是耗時。
  • 層次結構能夠從源系統中全部類型的自動獲取。SAP提供了衆多的BI內容的數據源提取標準的SAP數據源系統,爲各類行業和模塊。這也是不少標準的層次結構的狀況下,如利潤中心,組織單位... 然而,不少時候的層次結構的數據源系統中的自定義表。SAP不容許自定義的層次結構,以一個通用的數據源中提取。
  • 層次結構,也能夠提取使用分段BAPI( usiness 一個 pplication P AGC軟件覆蓋整個院落)或純文本文件,能夠經過程序自動生成的,而後加載到層次結構中的InfoObject 從外部系統(非SAP) 在此過程的自動化引入的一個問題是,這並不老是容易克服的物理純平要上傳的文件,該文件是應放置在SAP BW服務器。這並不老是可能的幾個緣由。
  • 最後的選項加載一個層次是容許裝載在SAP BW系統或其餘SAP BW系統的數據接口,數據集市。如今的問題是,層次結構(還)沒有在SAP BW系統。可是,此選項將被證實是很是有用的,使自定義層次結構提取。

若是你想加載一個標準的SAP層次結構或層次結構的基礎上的平面文件,你可使用一個以上的機制來獲取數據。然而,當裝入非標準的SAP層次或從其餘來源的層次結構,你都面臨着一個很大的問題。SAP BW 標準層次結構的數據源或基於層次結構的平面文件數據源,並有一件事是確定的,加載任何類型的層次結構只容許須要的數據源的類型層次結構,將數據插入到相應的InfoObject表!因此沒有標準化的方法來從源系統中加載自定義的層次結構。接口

咱們怎樣才能解決這個問題呢?圖片

總之,解決的辦法是獲取數據到一個數據存儲對象(DSO)[1],使肯定的InfoObject有正確的屬性[2],加載一個虛擬的層次結構(數據集市接口)[3]和提升本提取,以取代從DSO數據的僞層次結構[4]。此過程將在下面更詳細地進行說明。事務

   

圖2:解決方案概述element

   

1。DSO的層次數據

第一步是獲得的層次結構的數據轉換成一個DSO。爲此目的,咱們可使用一個事務處理的數據源。構建一個簡單的層次結構相結合的節點ID和它的父節點ID是足夠的。

   

圖3:DSO ZDSOCUST

   

重要的是要注意,咱們不須要一個層次數據源。不管什麼樣的數據源和類型的提取,SAP容許不一樣的程序,以獲取的「交易「 

在這個例子中所用的DSO ZDSOCUST填充用一個簡單的平面文件。

聯繫咱們說明家長聯繫

1001;商業;

1002;技術支持;

1003;更改合同; 1001

1004;結束合同; 1001

1005,新的合同,1001

(1006);電視; 1002

1007,聯繫電話; 1002

1008;互聯網; 1002

1009;銷售1003

1010下出售; 1003

1011;邊賣; 1003

1012;結束; 1004

1013年,新的1005

1014數字電視; 1006

1015;模擬電視,1006

1016;手機; 1007

1017固定; 1007

2。層次的InfoObject

圖4:的InfoObject客戶服務聯繫咱們

   

使用交易代碼RSD1,保持的InfoObject做爲信息資源直接更新。

啓用後,相應的複選框選擇一個應用程序組件。根據上的InfoObject屬性,這將容許加載屬性,文字和層次結構的數據的特性。

做爲信息提供者,將其分配給一個資訊區域的特徵標記。的InfoObject將被顯示在信息提供者樹在數據倉庫工做臺。

做爲出口數據源中啓用的特色。這容許提取的的InfoObject數據使用的數據集市接口。

圖片5的InfoObject

   

源文檔< http://www.element61.be/e/resourc-detail.asp?ResourceId=189

   

   

很明顯,你還須要到指定的InfoObject包含層次。具體的設置,如時間依賴性和版本,所產生的影響的表,這將反過來又須要特定編碼後數據源中的加強。

   

圖片6與層次的InfoObject

   

3。虛擬層次提取

如今的InfoObject是正確的維護和激活,咱們能夠創建一個虛擬的層次結構中,咱們將使用後爲出發點的數據提取。本手冊的過程當中須要作一次(每SAP BW系統中的景觀)。使用按鈕「 保持層次結構,以建立虛擬的層次結構。

   

圖片7建立一個虛擬的層次結構

   

酮(虛設)節點添加到該層次結構是足以激活的層次結構。添加一個文本節點是最簡單的。

圖像8使用一個空節點

   

9張圖片的虛擬層次結構

   

接下來的步驟是生成的出口數據源。這實際上會產生一個數據集市提取屬性(M),文本(T)和層次結構(H),根據的InfoObject設置。「 數據倉庫工做臺「(交易代碼RSA1),而後右鍵單擊上的InfoObject。在上下文菜單中,選擇「 附加功能「>」生成,出口數據源「。一般獲得的技術名稱'M','T'或'H'> 8,能夠發現應用程序組件被稱爲「數據集市主數據(DM-IO),以後複製此應用程序組件的數據源區域的數據源數據倉庫工做臺(記得檢查BW系統自己做爲源系統,在屏幕的左上方)。若是該特定應用程序組件還沒有激活您的BW系統中,能夠發現新的數據源的應用程序組件的未分配節點'(NODESNOTCONNECTED的)。

如今,咱們有層次結構的數據源,咱們能夠將它鏈接到咱們的InfoObject層次結構,經過傳輸規則。層次數據源的還沒有使用的SAP NetWeaver 2004s/7.0技術支持,所以,咱們仍然須要使用SAP BW 3.5的數據源和傳輸規則來創建鏈接。事實上,咱們鏈接的InfoObject自己。爲了建立傳輸規則,右鍵單擊層次結構,並使用上下文菜單中去「附加功能」>「建立傳輸規則」。接下來,咱們須要選擇正確的源系統。因爲咱們要採用的出口數據源咱們前面建立的,選擇你登陸到一個相同的SAP BW系統。會彈出一個列表全部可用的數據源,源系統。選擇出口數據源咱們先前建立的。它應該有名稱8 <>'H'。傳輸規則自動生成的,而事實上,他們創建的出口數據源和的InfoObject層次之間的聯繫。

建立一個新的Infopackage層次結構的數據源,經過右鍵點擊數據源,而後選擇「 建立Infopackage ... 「。給「Infopackage一個描述性的名稱和刷新「 可用的層次結構。這將加載在源代碼中提供的全部層次結構。咱們只建立了一個虛擬的層次結構,這將是惟一的等級,咱們能夠提取。選擇這個虛擬的層次和保存Infopackage的。這是明智的重命名的目標層次。

圖片10 InfoPackage

4。提取加強

到目前爲止,咱們已經創建了一個虛擬的層次,使提取到一個新的層次結構是徹底相同的副本原來的數據流。如今,咱們仍然須要插入的層次結構的數據,目前居住在DSO。這能夠經過在一個用戶出口,加強所產生的層次結構的數據源。

11張圖片的層次數據流

   

像任何其餘類型的數據源,能夠提升層次數據源。每種類型都有其本身的功能模塊,在強化「RSAP0001 -客戶服務API 函數調用

  • EXIT_SAPLRSAP_001:交易數據
  • EXIT_SAPLRSAP_002:主數據的屬性或文本
  • EXIT_SAPLRSAP_004:等級

,若是提升RSAP0001是還沒有處於活動狀態在您的系統,它能夠簡單地被激活,並分配到項目中。

功能模塊EXIT_SAPLRSAP_004被稱爲每次執行的層次結構數據源。它是功能組的一部分該功能模塊包含一個包括稱爲「 ZXRSAU04「。這包括能夠提升使用ABAP代碼從咱們前面加載的DSO來獲取數據。最重要的表在此退出是表C_T_HIENODE的的應該充滿層次的實際數據。這表的類型RSAP_T_HIENODE,它是這樣定義的結構ROSHIENODE。

圖片12結構ROSHIENODE

須要注意的是否是全部的字段,以便成功地創建層次結構。根據不一樣的層次結構屬性中的InfoObject設置,其餘領域,甚至其餘表能夠成爲必需的。

上面的例子中的層次結構是至關直接的,所以,它是足夠的填充只有一個選擇的字段的表C_T_HIENODE; NODEID,IOBJNM,NODENAME,TLEVEL和PARENTID。

讓咱們在這些領域有更詳細的瞭解。的的字段NODEID有被惟一地定義。進行領域IOBJNM應填寫的InfoObject名ZCUSTCONT「或值0 HIER_NODE」若是你想加載一個文本節點。領域NODENAME應填寫與實際值(的InfoObject值或文本節點的描述)。也可使用複合的InfoObject,但那麼咱們就須要到指定的複合價值。試想一下,咱們的InfoObject ZCUSTCONT複合國家。填充該字段NODENAME若是咱們「1003」的值,這個值會被自動分割成國家「BE」和「客戶聯繫」1003「。

下一個字段被稱爲TLEVEL幷包含該節點的層級。若是一個節點的層級是不等於其父母和1的層次結構級別的總和,這將產生一個錯誤,當加載的層次結構。的層次結構的最上層節點被稱爲根和多根被容許在一個單一層次。這根節點老是有層次的水平。PARENTID包含的父節點ID。

表1填充C_T_HIENODE

根據您的層次結構特性,其餘領域和/或表是必需的。例如,若是你有一個隨時間變化的層次結構,的領域DATEFROMDATETO應填補。

現場NODENAME獨一無二的,除了,當領域LINK包含值'X'(首都),它能夠爲一個層次結構節點在層次結構中包括幾回在不一樣的層次分支。換句話說,一個NODENAME能夠有多個父節點。在一份報告中,當使用這些重複的層次結構節點的InfoObject值的關鍵人物值,將顯示屢次的層次。固然,這關鍵的人物只會考慮一次,結果行!當使用的時間間隔,你也將有填寫的表格C_T_HIEINTV。

若是咱們有一個DSO,只包含節點ID和它的父節點ID,咱們有足夠的信息來構建咱們的層次結構。可是,咱們須要手工計算的層級。最好的作法是開始與根(S)和它的孩子,而後找到這些兒童和兒童等。須要注意的是每根固然應該單獨列出。

讓咱們來仔細看看的編碼。,包括「 ZXRSAU04「每次都被執行,執行的層次結構數據源,它是推薦的數據源之間做出區分。

這一過程確保您的編碼時,不執行其餘層次結構的數據源執行。

在ABAP程序作的第一件事是刪除虛擬層次的內部表C_T_HIENODE的數據。

如今,咱們能夠設置的層次結構描述的「 客戶聯繫「。

接下來,咱們須要獲取數據從DSO到內部表的層次結構。

對於每一個節點,咱們須要找出的層級和它的父節點的ID。確保全部相關領域都充滿。正如前面提到的,根據不一樣的InfoObject屬性。最簡單的方法是自頂向下和從根(S)。根是一個沒有父節點。層次結構能夠由多根。一旦咱們肯定了根,咱們能夠搜索它的孩子。而後,咱們須要尋找的孩子的孩子。每一條記錄被保存表中的C_T_HIENODE。咱們將繼續這個過程,直到全部的記錄被處理。

如今,咱們已經完成了數據源的加強,最後一步是執行的Infopackage的。這將填充層次結構的基礎上,咱們的數據集加載到一個DSO。完整的加載程序能夠被自動執行流程鏈。

這就是它!層次是準備用於在SAP BW報告。

結論

使用SAP NetWeaver BW 7.1(或以前),也沒有標準化的方式來加載自定義的層次結構。使用BW 3.x數據流和數據源遷移是不可能的,只能裝層次。在這種洞察力描述的過程,是一個很好的解決方法,使一個自動化的自定義層次結構提取。隨着全新的層次結構框架,提供與SAP NetWeaver BW 7.30,這將變得更加容易,由於可使用任何類型的數據源。

相關文章
相關標籤/搜索