C#通過AMO物件模型瀏覽SQL SERVER 2005 SSAS角色一例
用過SSAS的朋友都使用Visual Studio Business Intelligence Development Studio(BIDS)去建立以及管理所建立的Cube。但是如果只是想檢視Cube下的某個角色包含的使用者以及許可權,我們只能一遍遍的開啟BIDS,忍受它的慢動作。更有甚者,如果要比較兩個Cube下所有角色及使用者是否一致,手工操作更是會讓人頭大。現在,利用Microsoft提供的AMO物件模型,我們可以很輕鬆的對Cube進行程式設計訪問,根據自身工作的需求,實在一些有用的工具,以提高工作效率,避免無聊的手工重複勞動。
Analysis Management Objects (AMO) 是
需要說明的一點是,
下面,我們就簡要介紹一下如何利用AMO物件來訪問Cube。在把Microsoft.AnalysisServices.Dll載入到專案的引用以後,在程式碼中我們需要引入名稱空間:
在此名稱空間下,我們首先引入SSAS的Server物件,並建立連線:
Server ssasServer = New Server();
ssasServere.Connect(connectstring);
與SSAS的伺服器例項建立連線以後,我們要取得它的所有Database物件名稱:
staticpublic List<string> GetDatabaseCollection(){
List<string> collect =new List<string>();
foreach (Database db in server.Databases)
{
collect.Add(db.Name);
}
return collect;
}
請注意,AMO中的Database物件並不是一般意義上的資料庫,而是一個容器,可以簡單的理解為我們的一個Business Intelligence專案就是一個Database容器,在Database物件內容,包括了BI專案中的所有內容 (Cube, dimension, data mining structure, data source, account, role) 。
接下來,根據所選擇的Database來獲得它的Cube物件,因為在一個Database下(一個BI專案中),我們可以建立多個Cube,所以在此先取得所有Cube的列表:
staticpublic List<string> GetCubeCollection(string databasename){
List<string> collect =new List<string>();
database = server.Databases[databasename];
foreach (Cube cube in database.Cubes)
{
collect.Add(cube.Name);
}
return collect;
}
在Cube物件中,我們可以取得CubePermission物件,角色Role就在CubePermission中,從這裡就可以獲得指定Cube下所有的角色名稱列表:
staticpublic List<string> GetCubePermission(string cubename){
List<string> collect =new List<string>();
cube = database.Cubes[cubename];
foreach (CubePermission cp in cube.CubePermissions)
{
collect.Add(cp.Role.Name);
}
return collect;
}
到這裡,我們其實就滿足了基本需求,可以很輕鬆地得到Cube下的角色列表,但是不同角色針對Dimension和Attribute其實是擁有不同的訪問許可權。
foreach (CubeDimensionPermission dp in cp.DimensionPermissions){
foreach (AttributePermission ap in dp.AttributePermissions)
{
Label1.Text = ap.AllowedSet;
Label2.Text = ap.DeniedSet;
}
}
利用CubeDimensionPermission下的AttributePermission物件,我們可以得到當前角色的允許和拒絕的維度屬性值,得到了這個值,我們可以直接程式設計來檢查兩個Cube中的角色是否一致。
上面只是簡單介紹了利用AMO物件進行SSAS伺服器物件管理的一個例子,其實大家可以盡情發揮,利用AMO物件實現一些實用的工具來幫忙日常工作中對於SSAS的便捷管理。
附:AMO物件樹