BW建模場景需求分析

\

場景需求分析

 

對於同一數據的分析,根據用戶不同的需求,共有四種場景。這四種場景是我們BW顧問建模之前一定要弄清楚的,要根據業務用戶的需求才能確定採用那種場景,選定場景後,我們才能開始建模。這是每個BW顧問都需要知道的問題!!後面是針對這四種不同的場景,都有現實,其報表結果是不一樣的!!

clip_image001[8]

需求分析:BBB物料在2000.01月份所屬物料組爲Food,而到了2000.02月份時變爲了Chemicals了,並且在2000.02月份新增了EEE物料主數據,在2000.01月份與2000.02月份BBB都產生了交易數據(但EEE物料只在2000.02月份產生了交易數據)。這樣在統計時,BBB物料是歸到Food組還是Chemicals組?由於歸到哪組參照的標準不同,這就產生了下面不同的4種場景。

  • 場景A:能夠還原業務數據的真實情況,這種是遵循歷史的。此場景下,BBB物料在2000.01月份產生的業務數據會被歸到Food組;在2000.02月份產生的業務數據會被歸到Chemicals組
  • 場景B:只注重於當前,不遵循歷史,根據出具報表時間來判斷物料所屬組。也就是說不管以前BBB物料曾經屬於過哪些物料組,只看現在它屬於哪個組。比如查看報表的日期爲2月份,則BBB物料在1月分產生的業務即使屬於Food,但還是歸到當前最新所屬物料組Chemicals
  • 場景C:與場景B相似,不同的是,場景B只的依據是查看報表的當前時間,這個標準是定死的,即當前時間,另一個不同的地方是在建模方面,物料組屬性在場景B是與時間無關的,但在C場景中是相關的。場景C在B的基礎上更靈活,你可以設定這個標準爲過去的某個時間點,也可以是當前時間,這種可變標準是通過報表裏的變量Key Date來實現的。此場景下(假設當前已經到了2000.03月份了),如果Key Date設定爲2000.01月份,則BBB物料在2000.02月份產生的業務數據雖然在歷史上來看屬於Chemicals,但還是會被歸到Food組;如果Key Date設定爲2000.02月份,則BBB物料在2000.01月份產生的業務數據雖然在歷史上來看屬於Food,但還是會被歸到Chemicals組
  • 場景D:具有可比性,即只統在一段時間內主數據未發生過變化的數據。該場景也是在C場景的基礎上(物料組屬性也是與時間相關的),物料主數據屬性附加了兩個有效期字段,這兩字段實質上與系統產生的有效期字段是完全一樣的,另外也有Key Date,因爲如果沒有Key Date,而查詢時間相關的屬性時,會以當前時間爲Key Date,所以爲了像場景C那樣數據的真實性,所以還是加上了Key Date變量。在D場景下,如果當前日期已到了3月份,則在查看1996.1到9999.12之間從未發生過變化的數據時,BBB與EEE就不會出現

clip_image002[8]

 

場景A實現

clip_image003[8]

 

場景A:數據在不同時期所屬有變化,但變化後在統計時也要區分開來,即原來與現在是屬於哪類還是屬於哪類,要符合歷史實際情況,一就是一,二就是二。這種需要將主數據特徵與其變化的屬性一起作爲CUBE的維度,同時出現在Cube中(即變化的屬性特徵也會現在交易數據裏)。下面針對該場景進行實現:

clip_image004[8]     clip_image005[4]

數據源中,還是將物料組作爲物料的一個屬性來設計,只是在Cube中不顯示(使用)這個屬性,而是將物料組設計成非只讀屬性,這樣在Cube設計時直接使用物料組這個特徵,讓它與物料直接出現在Cube維度中,而不只是個簡單的顯示屬性。由於Cube維度中直接出現了物料組這列,這樣Cube就要求交易數據中要有物料組這列,但從下面提供的交易數據來看是沒有的,這就要求在Transformateion裏對物料組這列做轉換規則來填充,具體請參考後面過程。

clip_image006[6]

 

下面開始建模:

clip_image007[6]

創建物料主數據的數據源,並加載一月分的數據到ZMTR00中。結果數據會是這樣:

clip_image008[6]



物料組特徵需直接在Cube的維度中使用,所以需要去掉此勾 :

clip_image009[6] 

否則在Cube中引用物料組特徵屬性ZMTRGP00時會提示它只是個屬性,不進使用:

clip_image010[6]  clip_image011[6]

創建CUBE,並且將物料特徵ZMTR00的物料組屬性特徵ZMTRGP00引用進來,也作爲一個維度:

clip_image012[6]

除了將物料組ZMTRGP00設置 爲物料ZMTR00的屬性外,還需要將物料組屬性特徵ZMTRGP00設置爲CUBE的維度,這樣物料ZMTR00與其屬性ZMTRGR00都會出現在維度表中,處於平等地位。但是,交易數據中並沒有此列的值,所以物料組屬性特徵ZMTRGP00的值只能從物料特徵ZMTR00主數據中的物料組屬性裏讀取,並在Transformateion裏進行賦值處理。

 

clip_image013[6]

clip_image014[6]

規則 Read Master Data:表示目標字段的值從指定的InfoObject特徵主數據表裏讀取相應屬性來填充,這就要求源字段是由InfoObject特徵字段組成成,並且這個InfoObject帶有主數據。由於這裏的源是一個DataSource,組成DataSource的字段不會是InfoObject,而是普通的數據庫表字段定義,所以上而會提示出錯。滿足這種要求的源(字段由InfoObject組成,而非普通表字段),只能是DSO、CUBE等。下面我們只能使用DSO過渡一下:

clip_image015[6]

clip_image016[6]

創建DTP抽數,這樣就將交易數據存儲到了上面這個過渡DSO中了。

再爲Cube創建Transformateion,源爲上面創建過渡型DSO:

clip_image017[6]

clip_image018[6]

此時源爲DSO,而非DataSource了,並且組成DSO的原字段中有ZMTR00這個InfoObject,且這個InfoObject具有主數據表,並含有ZMTRGP00屬性,所以這個DSO可以用爲 Read Master Data 規則的源:

clip_image019[6]

clip_image020[6]

再爲Cube創建Transformateion:

clip_image021[6]

並且爲了模擬交易數據的過程(交易數據本應該分兩次抽的,一月與二月分開抽),所以要爲DTP加上過濾條件,分兩次抽取,這次只抽一月份的數據:

clip_image022[6]

運行這個DTP,一月份4條交易數據已被抽到CUBE中去了:

clip_image023[6]

 

到目前爲止,一月份的主數據與交易數據都已加載完成。下面進行二月份數據加載

加載二月份主數據:

clip_image024[6]

再查看P表:

clip_image025[6]  clip_image026[6]

發現P表裏有M版本的,所以在更新主數據後,要激活一下主數據後更新的數據才生效:

clip_image027[6]  clip_image028[6]

加載二月份交易數據,爲CUBE新創建(原因是由於DSO中的數據已被上面CUBE的Delta DTP抽過了,再使用那個Delta DTP是抽不上數據的,所以重新新的DTP)一個Full全量的DTP(也可創建一個Delta DTP,因 爲此時兩個Delta DTP條件不重疊也是可以的),並將DTP過濾條件設置爲二月份的:

clip_image029[6]

此時CUBE中的數據如下,且滿足場景A的需求了:

clip_image030[6]   clip_image031[6]

 

下面進行報表設計:

clip_image032[6]

由於報表查看器(Business Query)Excle有問題,所以臨時使用ECC自帶的查看器 RSRT 來查看:

clip_image033[6]  

clip_image034[6] clip_image035[6]

結論:這種正是因爲將物料組屬性也放在了維度表裏,記錄了物料屬性哪個物料組的全過程,所以BBB在2000.1月與2000.2屬於不同物料組時,也記錄下來了。並且在出報表時,也是基於此維度表來查詢某個物料屬於哪個物料組的,所以場景A的統計結果不會隨着查詢時間變化而變化:

clip_image036[6] clip_image037[6]

場景B實現

clip_image038[6]

 

場景B:根據查看報表時間的不同,查詢的結果會有所不同,其結果是以最新的數據狀態來展現,不管過去是啥,只注重於今天。這種只需要將變化的屬性作爲與時間無關的導航屬性即可,這是我們通常的做法。下面針對該場景進行實現:

 

下面直接在場景A實現上繼續。

這裏我們並沒有將A場景中的CUBE的物料組ZMTRGP00維度給刪除。現將ZMTR00的屬性ZMTRGP00修改成導航屬性(非時間相關),並在CUBE中打上勾:

clip_image039[6]

clip_image040[4]

這樣在Query Designer裏就會看到物料維度下有三個維度字段:

clip_image041[4]

clip_image042[4]

 

clip_image043[4]

結論:由於直接使用的物料組屬性是存放在主數據表裏的,並且該屬性與時間無關,所以物料主數據表裏的物料組屬性值只能存儲最新的值,比如這裏在2000.1月時BBB屬於Food,但到了2000.2月後卻變成了Chemical了,最後使用最新的Chemical覆蓋了以前的Food,並且這個變化過程並未記錄下來,所以報表在2000.2月之前某個時間點查看與在2000.2月之後某個時間點查看的結果是不同的(在2000.2月查時,會將以前爲Food的銷售額也看作成了Chemical了)。所以場景B的統計結果會隨着查詢時間點的變化可能會發生變化,原因是主數據屬性隨着時間發生了變化

clip_image044[4]

 

場景B的第二種實現:

clip_image045[4]

場景C實現

clip_image046[4]

 

場景C:根據查看報表指定的Key Date不同,查詢的結果會有所不同,一筆業務數據到底屬於哪個範疇,則根據指定的Key Date來劃分,這樣,一筆數據在昨天看來或在今天看來是不一樣的。這種與場景B有點相似,只不過B只能根據查詢報表當前來定業務數據到底該劃分到哪個組,而場景B除了根據當前外,還可以基於歷史的任一天來靈活查看。下面針對該場景進行實現:

 

clip_image047[4]

clip_image048[4]

由於該物料的物料組屬性設置的與時間相關,所以會出現0DATETO與0DATEFROM兩個字段,按理需要物料主數據文件裏有這兩列,爲了省事,就在Transformation裏設置對應固定值,這裏抽的是2000.1月份的主數據,所以有效期設置爲 2000.01.01 到 2000.01.31:

clip_image049[4]

物料主數據表數據如下(系統會自動爲每個物料加上兩個有效期:一個是在輸入的有效期之前的期間,另一個是在輸入的有效期之後的期間):

clip_image050[4]

從上面數據來看,系統會自動爲每個物料多生成兩個期間,一個是在我們指定的有效期之間的期間,另一個是在我們指定的有效期之後的期間



下面再次抽取2月份的物料主數據,先修改轉換規則的有效時間爲2000.02.01 到 2000.02.29:

clip_image051[4]

clip_image052[4] 

 

創建CUBE:

clip_image053[4]

創建轉換規則時金額字段報錯:

clip_image054[4]

編輯規則,由於金額字段的單位固定爲RMB,所以這裏不需要對金額進行轉換:

clip_image055[4]

clip_image056[4]

 

下面創建報表測試:

clip_image057[4]     clip_image058[4]

clip_image059[4]

由於Key Date輸入的爲 2000-01-15 ,在這一時間點上,EEE 還沒有對應的物料組屬性(即那個時候還沒有產生業務數據),所以是 # 表示。其他物料都是按 2000-01-15 這一天所屬物料組來統計的,如 BBB物料,雖然在2000.2月份變成了Chemical組了,但輸入的Key Date爲2000-01-15,則按2000-01-15這天的標準來判斷BBB物料到底屬性哪個物料組,經到數據主數據表裏查找這一時間點(2000-01-15)所對應的組還是Food,而不管業務什麼發生的,而是按查詢時指定的Key Date爲依據進行判斷,所以BBB物料在2000.2月份的銷售金額原本屬於Chemical的,卻還是歸到了Food組了:

clip_image060[4]  clip_image061[4]

 

 

再將報表的Key Date設置爲2000.02.15:

clip_image062[4]

clip_image063[4] clip_image064[4]

原本BBB有一筆在2000.01月份業務發生時,是屬於Food物料組的,但由於Key Date輸入的爲 2000-02-15,即物料屬於哪個物料組要按着這個指定的Key Date爲判斷依據,所以這筆發生的業務要算到Chemical物料組裏而不是Food組

 

結論:主數據的屬性隨着時間的變化而變化時,數據統計的標準可以是過去的某天,也可也是今天。同一筆業務數據根據不同的Key Date分類統計時會劃分到不同的分組裏,這樣以不同的時間點來看報表時,統計結果會有所不同

 

場景C第二種實現:

clip_image065[4]

場景D實現

clip_image066[4]

 

clip_image067[4]

 

注:由於同一InfoObject屬性裏不能多次添加同一屬性,所以通過Reference的方式創建Valid From與Valid TO:

 clip_image068[4]    clip_image069[4]

 

從場景C中物料特徵複製,加上兩個日期字段 Valid From與Valid To,並且做爲時間相關的導航屬性:

clip_image070[4]

 

clip_image071[4]

創建好Transformation後,加載主數據:

clip_image072[4]

clip_image073[4]

clip_image074[4]

 

Cube從場景C中複製並修改如下:

clip_image075[4]

加載交易數據:

clip_image076[4]

 

報表設計:

clip_image077[4]    clip_image078[4]  

clip_image079[4]

clip_image080[4]

 

clip_image081[4]

clip_image082[4] 

clip_image083[4]

聲明:原創作品,轉載時請註明文章來自SAP師太博客,並以超鏈接形式標明文章原始出處,否則將追究法律責任!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章