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


介紹

通常情況下,報告需要在一個類似樹的結構來顯示數據。通過啟用此特性在SAP BW層次結構。高級數據顯示的層次結構的頂層節點。更詳細的數據可以向下鑽取到的層次結構中的下級節點的可視化。

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

   

圖1:客戶聯絡層次

   

加載層次結構的標准機制

有幾種可能性供貨與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:解決方案概述

   

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,這將變得更加容易,因為可以使用任何類型的數據源。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM