BI筆記之 SSAS庫Process的幾種方案

2022-01-12 19:38:47 字數 3860 閱讀 4239

本文綜合描述ssas庫的處理的幾種方案,並簡單介紹各種方案的應用場景。

環境約定:sql server 2008

示例庫:adventure works dw

方式一:直接在專案中process

這種方法在開發階段和測試階段是經常使用的。

如圖這種處理方式通常是第一次的全量處理,如果ssas庫猶更新的話會提示先部署。

可以看到在出現的process介面中處理的級別是database。

同時也可以直接點選cube(或者是挖掘結構)單獨處理它們:

如果是處理cube的話也會有很多種方式:

同時維度也是可以單獨處理的:

還有,分割槽也是可以單獨處理的(如果存在分割槽的話),不過就不是在solution介面了,而是得開啟cube設計檢視,然後點分割槽:

關於處理增量的選項,在ssas庫剛部署好的時候是沒有的,只有在處理過一次ssas庫之後這個處理選項才會存在。

這個方法是最基本的方法,畢竟ssas庫本身誕生於此。適用於開發和測試階段及生產和開發不是隔離,對安全要求不是很高的情況。

方式二:在ssis包中process

這個方法的優點是定義很方便。

在bids中直接新建專案,選擇商業智慧型下的整合服務專案:

裡面有乙個模組式專門用來處理ssas庫。

可以看到在每乙個模組中可以分別定義都處理什麼內容。

通常,都是先處理維度,然後再處理cube的。

同樣,在這裡可以自己設計增量方案。如果定義好了增量方案的話,按照這種方案走的bi方案就成型了。最後需要做的就是,將ssis包部署到整合服務上,然後設定好job和schedule。

關於cube的增量處理方案,可以參考我的這篇文章:bi筆記之---增量方式處理多維資料集

這種方法應該算是微軟產品線中最標準的方法。適用範圍很廣。

方式三:**中process

**的處理方式雖然比較複雜,但還是比較靈活的,主要還是呼叫amo物件來實現。

這裡只簡單介紹如何處理database級別的邏輯。(通過列舉amo下的server物件的各子物件可以很簡單的定義每個ssas物件的處理)

server _server = new server();

_server.connect("localhost");

database _db = _server.databases["adventure works dw 2008"];

//generate xmla command.

_server.capturexml = true;

//process command.

_db.process();

_server.capturexml = false;

//out put xmla.

foreach (string item in _server.capturelog)

console.writeline("processing");

//execute

xmlaresultcollection _result = _server.executecapturelog(true,true);

console.writeline("process finished");

//out put result

foreach (xmlaresult r in _result) }

console.writeline("finished");

console.readline();

[2011-03-26補充]:另附powershel

l版的process

[void][reflection.assembly]::loadfile("c:\program files\microsoft sql server\100\sdk\assemblies\microsoft.analysisservices.dll")

$server=new-object microsoft.analysisservices.server

$server.connect("localhost")

$db=$server.databases.getbyname("adventure works dw 2008r2")

$server.capturexml=$true

$db.process()

$server.capturexml=$false

write-output "processing..."

$result = $server.executecapturelog($true,$true)

foreach ($r in $result)

}write-out

put "done"

留意**的_server.capturexml部分,由於我們要處理的是database,所以直接列舉到database的時候直接呼叫process方法,其相關的xmla指令就會儲存在_server的capturelog屬性中。**的第乙個foreach就是現實生成的xmla命令的部分。

bi筆記之--- ssas部署的幾種方式

中關於如何以ascmd.exe部署ssas庫的描述。

通過**能處理的ssas粒度很細,參看本文中截圖中的add analysis services object可以看到能列舉到的都有哪些物件,另外通過下列**,也可以把這些物件都列舉出來:

server _server = new server();

_server.connect("localhost");

foreach (database _db in _server.databases) }

foreach (cubedimension _dm in _cube.dimensions) }

} 以下是執行結果:

可以看出乙個ssas庫基本上是這樣乙個結構:

上圖省略了挖掘結構中的相應部分。

實際處理 cube的時候,就可以在列舉的過程中,加入自己的邏輯來判斷這個ssas物件是否需要被處理,如果需要被處理的話,呼叫其process方法就可以。

通過這種方法也可以間接的實現一種增量方案,不過需要資料倉儲端實體設計上的一些配合,具體方案已經超出本文範圍,但將在後續內容提到。

BI筆記之 合理處理SSAS資料庫的幾點建議

今天又有朋友遇到ssas資料庫處理速度慢的情況,主要是由於資料聚合量確實很大,每次處理都要超過三十分鐘,有沒有什麼方法能讓處理的時間少一些呢?從事bi工作有七個年頭了,這樣類似的問題絕對可以排在職業圈內top 10的faq當中。這樣的問題往往都略有複雜,在此根據遇到過的一些場景,羅列一些自己的經驗。...

Linux筆記之動態庫

動態庫 動態鏈結庫是程式執行時載入的庫,當動態鏈結庫正確安裝後,所有的程式都可以使用動態庫來執行程式。動態鏈結庫是目標檔案的集合。動態鏈結庫的名稱有別名,真名和鏈結名。別名由乙個字首lib,然後是庫的名字,再加上乙個字尾 so 構成。真名是動態鏈結庫的真實名稱,一般總是在別名的基礎上加上乙個小版本號...

個人筆記之python庫安裝

執行平台 windows python版本 python3.x python的庫安裝主要有兩種,第一種比較簡單,可以使用pip,優於我的電腦上安裝了python的多個版本,目前常用的是python3,為了避免混亂,我對程式python改名為python37,如此,如下命令 例如 python37 m...