BW顧問必須要清楚的:時間相關數據建模場景需求分析

 

場景需求分析
A場景實現
B場景實現
C場景實現
D場景實現html

 

場景需求分析web

 

對於某些與時間相關的數據(主數據有變化的數據)進行分析時,根據用戶不一樣的需求,數據可歸爲4種不一樣的場景中,這4種場景是咱們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種場景。ide

  • 場景A:可以還原業務數據的真實狀況,這種是遵循歷史的。此場景下,BBB物料在2000.01月份產生的業務數據會被歸到Food組;在2000.02月份產生的業務數據會被歸到Chemicals
  • 場景B:只注重於當前,不遵循歷史,根據出具報表時間來判斷物料所屬組。也就是說無論之前BBB物料曾經屬於過哪些物料組,只看如今它屬於哪一個組。好比查看報表的日期爲2月份,則BBB物料在1月分產生的業務即便屬於Food,但仍是歸到當前最新所屬物料組Chemicals
  • 場景C:與場景B類似,不一樣的是,場景B只的依據是查看報表的當前時間,這個標準是定死的,即當前時間,另外一個不一樣的地方是在建模方面,物料組屬性在場景B是與時間無關的,但在C場景中是相關的。場景CB的基礎上更靈活,你能夠設定這個標準爲過去的某個時間點,也能夠是當前時間,這種可變標準是經過報表裏的變量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.19999.12之間從未發生過變化的數據時,BBBEEE就不會出現

clip_image002[8]

 

場景A實現測試

clip_image003[8]

場景A另外一實現示例請參考另外一篇文章:HR數據抽取spa

 

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

clip_image004[8]     clip_image005[4]

從上面的主數據源文件來看,物料組要設計成爲物料一個屬性,爲了遵循數據歷史的客觀性場景,須要將物料組的數據還須要存儲到CUBE的物料組維度字段中,讓物料組信息成爲交易數據的一部分,這樣才能記錄下每條業務發生時,該業務數據到底屬性哪一個物料組。要將物料組信息也直接存儲到CUBE中,能不僅是簡單的將物料組設置成爲物料特徵的導航屬性就能夠實現的,而是將物料組設置爲非僅屬性(非Attribute  Only,表示該物料組屬性不只是某物料的屬性,並且還有相應的底表),設置爲非僅屬性後,就能夠將物料組這個有主數據的特徵直接引入到CUBE的維度中,做爲維度表中的物料字段而存在,而非導航屬性。這種設置,徹底是爲了實現場景A來設置。
因爲Cube維度中直接出現了物料組這列,這樣Cube就要求交易數據中要有物料組這列,但從下面提供的實際交易數據來看是沒有的物料組數據的,這就要求在Transformateion轉換規則裏對物料組這列進行填充,具體請參考後面過程。

clip_image006[6]

 

下面開始建模:orm

clip_image007[6]

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

clip_image008[6]



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

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組成,而非普通表字段),只能是DSOCUBE等。下面咱們只能使用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中的數據已被上面CUBEDelta 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 QueryExcle有問題,因此臨時使用ECC自帶的查看器 RSRT 來查看:

clip_image033[6]  

clip_image034[6] clip_image035[6]

結論:這種正是由於將物料組屬性也放在了維度表裏,記錄了物料屬性哪一個物料組的全過程,因此BBB2000.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]

因爲該物料的物料組屬性設置的與時間相關,因此會出現0DATETO0DATEFROM兩個字段,按理須要物料主數據文件裏有這兩列,爲了省事,就在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 Date2000-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 FromValid TO

 clip_image068[4]    clip_image069[4]

 

從場景C中物料特徵複製,加上兩個日期字段 Valid FromValid 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]

相關文章
相關標籤/搜索