AMO (Analysis Management Objects) 是 SQL Server Analysis Services (SSAS) 的官方 .NET 物件模型,可程式化管理 Cube、Dimension、Measure、Partition、Role、DataSource、DataSourceView、Assembly、DataMining 等所有 SSAS 物件。本文示範如何在 C# 專案中引用 AMO 組件,並撰寫程式碼列舉伺服器上的資料庫、Cube、資料庫角色與 Cube 權限角色。
C:\Program Files\Microsoft SQL Server\<版本>\SDK\Assemblies\Microsoft.AnalysisServices.dll。using Microsoft.AnalysisServices;using System;
using System.Collections.Generic;
using Microsoft.AnalysisServices;
namespace AMOTest
{
class Program
{
static void Main(string[] args)
{
string connStr = "Data Source=ServerName; Provider=msolap";
Server server = new Server();
server.Connect(connStr);
// 1. 列出所有資料庫
var databases = GetDatabaseCollection(server);
Console.WriteLine("------------- Databases ----------------");
foreach (var db in databases) Console.WriteLine(db.Name);
// 2. 列出第一個資料庫的所有 Cube
var cubes = GetCubeCollection(databases[0]);
Console.WriteLine("--------------- Cubes ------------------");
foreach (var cube in cubes) Console.WriteLine(cube.Name);
// 3. 列出資料庫層級角色
var dbRoles = GetRolesCollection(databases[0]);
Console.WriteLine("------------- Roles (Database) ---------");
Console.WriteLine("Role members count: " + dbRoles[0].Members.Count);
// 4. 列出 Cube 層級權限角色
var cubeRoles = GetRolesCollection2(cubes[0]);
Console.WriteLine("------------- Roles (Cube) -------------");
Console.WriteLine("Role members count: " + cubeRoles[0].Members.Count);
Console.Read();
}
static List GetDatabaseCollection(Server server)
{
var list = new List();
foreach (Database db in server.Databases) list.Add(db);
return list;
}
static List GetCubeCollection(Database db)
{
var list = new List();
foreach (Cube cube in db.Cubes) list.Add(cube);
return list;
}
static List GetRolesCollection(Database db)
{
var list = new List();
foreach (Role role in db.Roles) list.Add(role);
return list;
}
static List GetRolesCollection2(Cube cube)
{
var list = new List();
foreach (CubePermission cp in cube.CubePermissions) list.Add(cp.Role);
return list;
}
}
}
程式依序輸出:伺服器上所有資料庫名稱、第一個資料庫的所有 Cube 名稱、該資料庫角色成員數、第一個 Cube 的權限角色成員數。截圖顯示主控台成功列舉資訊。
實測發現 Database.Roles 與 Cube.CubePermissions.Select(cp => cp.Role) 回傳的角色集合內容相同。可能原因:
實務上若需細粒度控制,應在 Cube 層級建立獨立 CubePermission 並指派專屬角色。
130\SDK\Assemblies(版本號隨主版本遞增)。Microsoft.AnalysisServices.NetCore NuGet 套件,API 大致相容。AMO 提供完整物件模型,配合 LINQ 查詢極具表達力,是 SSAS 自動化管理的首選程式庫。