首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

使用 AMO (Analysis Management Objects) 存取 SQL Server SSAS 物件模型

     編輯:關於SqlServer

AMO (Analysis Management Objects) 是 SQL Server Analysis Services (SSAS) 的官方 .NET 物件模型,可程式化管理 Cube、Dimension、Measure、Partition、Role、DataSource、DataSourceView、Assembly、DataMining 等所有 SSAS 物件。本文示範如何在 C# 專案中引用 AMO 組件,並撰寫程式碼列舉伺服器上的資料庫、Cube、資料庫角色與 Cube 權限角色。

環境準備

  1. 確認已安裝 SQL Server SSAS(或僅安裝 Client Tools SDK)。
  2. 尋找組件路徑:C:\Program Files\Microsoft SQL Server\<版本>\SDK\Assemblies\Microsoft.AnalysisServices.dll。
  3. Visual Studio 專案 → 加入參考 → 瀏覽選取上述 DLL。
  4. 程式碼頂端引入命名空間: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 的權限角色成員數。截圖顯示主控台成功列舉資訊。

重要觀察:資料庫角色 vs Cube 權限角色

實測發現 Database.Roles 與 Cube.CubePermissions.Select(cp => cp.Role) 回傳的角色集合內容相同。可能原因:

  • 該資料庫僅包含單一 Cube,權限未另行細分。
  • Cube 權限繼承自資料庫角色,未額外定義 Cube 專屬角色。

實務上若需細粒度控制,應在 Cube 層級建立獨立 CubePermission 並指派專屬角色。

常見應用場景

  • 自動化部署:CI/CD 流程中以 AMO 建立/更新 Cube、調整 Partition、部署計算成員。
  • 權限稽核:定期掃描所有 Cube 權限,產出合規報表。
  • 監控與維護:程式化處理 Partition 合併、索引重建、處理狀態檢查。
  • 元資料同步:將 SSAS 結構同步至資料目錄或文件化工具。

版本相容性提醒

  • SQL Server 2012+:組件路徑改為 130\SDK\Assemblies(版本號隨主版本遞增)。
  • .NET Core / .NET 5+:需引用 Microsoft.AnalysisServices.NetCore NuGet 套件,API 大致相容。
  • 若專案目標框架為 .NET Framework 4.x,直接參考 GAC 中的組件即可。

AMO 提供完整物件模型,配合 LINQ 查詢極具表達力,是 SSAS 自動化管理的首選程式庫。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved