Cognos更新問題之利用Transform實現Cube增量更新


    本人從事BI行業已經2年半了,也是從今年起開始負責了一些部門內的需求開發。之前一個report如何做,一個cube如何做可以說都是和公司的前輩們學習的死死的步驟(也可以說是比葫蘆畫瓢),只可以這么形容了。如今是前輩們走的走,有的是已經不再從事這些BI中的體力活兒了。於是我也開始負責一些項目開發的東西,心里還是感到很欣慰的,因為一件事情只有自己真正的去做了,才可以學習到更多的知識。言歸正傳,我們直接入主題吧。

    最近兩周以來,開發了四五個數據量較大的cube,大概每次更新都是千萬級別的數據。有一種感覺,也許從事BI行業的朋友們都曾經歷過。創建cube的時候眼睜睜的看着他在哪里跑,卻不知道什么時候可以跑完。速度是真的很慢,很慢。這個情況在去年的時候也遇到過,記憶中那個時候也就那么一兩個。這樣的數據無非是維度很多,關系很復雜的模型。生成Cube時候就很慢很慢,這也給每天cube的批量更新造成了時間壓力,長時間的更新緩慢,客戶難免的要抱怨的。所以考慮到失態嚴重,需要想辦法解決了。

分析:為什么會這么慢?

重點在於cube的更新模式上面,最近才發現去年半年內cognos做的報表差不多都是全量更新的.模式就是:

讀取全部數據源(iqd,平面,package)→更新cube生成mdc→覆蓋原來目錄的mdc重新發布。等於說是每次對(整個關聯表)做了一次重新的關聯。也可以說是把整個表重新的跑了一遍。隨着時間的累計,表中數據越來越多,千萬級以上的數據每天更新起來肯定很慢了的。

如果每天只更新前一天的數據,比如昨天數據過來了,今天只更新昨天的數據。刨除以前的覆蓋mdc方式去update 已經存在的mdc.這樣效率就快起來了。

解決步驟:

(1):說到cube增量更新在cognoschina上面也有很多說法,比如http://www.cognoschina.net/club/viewthread.php?tid=11614

 

看到這個很是高興,於是乎就去修改了自己的模型。如下圖

設置完畢,下方的紅色圈圈 增量更新的屬性勾上。保存,再次更新模型。出現下面結果。。

糾結了,這時才知道幸福沒有那么容易。於是乎繼續看帖子等回復。

http://www.cognoschina.net/club/viewthread.php?tid=26449&from=favorites

知道今天上午也沒有人回復那個帖子了,我是在想高人都深藏不漏,深怕知識外流啊..也可能是高人沒有看到吧。總之這個問題糾結了一天多。

TR的‘?’里面涉及的也有TR系列的錯誤和解釋。但是唯獨沒有TR2747這個錯誤,無奈了。於是乎就去www.cognos.com尋求幫助。搜了下TR2747可以看到如下解釋:

 

http://www-01.ibm.com/support/docview.wss?uid=swg21348860

Problem(Abstract)

Error

(TR2747) Dimension 'dimensionname' contains a unique level with unique move specified. This model contains an incremental update cube. Any unique moves will invalidate this cube.

Resolving the problem

This error will occur if the unique move option is selected when you are trying to incrementally update a cube. Transformer cannot make a unique move on the data that is already in the cube and allowing the addition of the new data would cause an uniqueness error.

紅色部分是官網給出的解釋,注意紅色部分。大概的意思就是 unique  move 選項被選中所以到此增量更新發生問題。OK 問題找到

返回模型做以下修改。

move選項勾掉,其他不變(注意所有維度都要這么操作,有幾個維度勾掉幾個)保存再次更新cube  OK 提示create cube  is  succseeful!

步驟總結如下~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

第一:確保每次數據源取出的數據都是新的數據,保證本次更新的數據在cube里面不存在。保證數據的正確性。如下面的操作。。

本人IQD數據源:Mysql數據庫,在IQD文件中加入

WHERE datekey=DATE_FORMAT(DATE_ADD(SYSDATE(),INTERVAL -1 DAY),'%Y%m%d')

當前時間減去1

第二:更改PowerCube的Processing屬性:把This cube is incremenally updated屬性勾選上

第三:打開維度視圖-Dimension-map 選中當前維度的最基層(最基礎比如是年-季度-日)那么日的那一層就是最基層。

雙擊打開屬性勾去Move屬性。注意的是此模型存在的所有維度都要做這個操作。

第四:保存修改的模型,就可以生成Cube了。

效果:兩次手動更新,第一次數據源選擇20120702的 第二次數據源選擇20120703的結果是第一次更新后模型里面可以看到0702的數據,第二次更新后可以看到0702和0703的數據就是說在原來0702的上面insert進去了0703日的數據。加上自動更新cube的腳本。每天增量更新cube的功能就實現了。

備注:由於時間倉促,此文如有不完善的地方和理解錯誤的地方請各位同學諒解~本人希望大家關於cube增量更新的其他方法就此討論一下,比如cube group這些了,這次就分享到這里了。

 

 

 

 

 

 


免責聲明!

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



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