You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于ADOMD.NET读取SSAS表格模型维度与度量信息的最优方案

用ADOMD.NET读取SSAS表格模型维度及关联度量的最优方案

刚接触SSAS表格模型的话,用ADOMD.NET来获取维度和关联度量其实没那么复杂,我之前做过类似需求,给你整理了一套高效靠谱的方案:

核心思路:利用SSAS Schema行集

SSAS的所有元数据(包括维度、度量、关联关系)都存储在Schema行集里,表格模型和多维Cube的Schema行集大部分兼容,直接调用ADOMD.NET的Schema查询接口是最稳定高效的方式,比写MDX元数据查询更可靠。


步骤1:准备环境与建立连接

首先确保你已经安装了Microsoft.AnalysisServices.AdomdClient NuGet包(直接在NuGet管理器里搜就能找到),然后建立与SSAS表格模型的连接:

using Microsoft.AnalysisServices.AdomdClient;

// 替换成你的SSAS服务器和表格模型数据库名
var connectionString = "Data Source=你的SSAS服务器地址;Catalog=你的表格模型数据库名";

// 用using自动管理连接资源,避免泄漏
using (var adomdConn = new AdomdConnection(connectionString))
{
    adomdConn.Open();
    // 后续的元数据查询都放在这里
    adomdConn.Close();
}

步骤2:获取所有维度(表格模型中的“表”)

表格模型里的“维度”其实对应模型中的物理表,我们可以通过DIMENSIONS Schema行集获取所有维度的基本信息:

// 获取维度Schema数据集
var dimensionsDs = adomdConn.GetSchemaDataSet("DIMENSIONS", new[] { adomdConn.DatabaseName });

foreach (DataRow dimRow in dimensionsDs.Tables[0].Rows)
{
    string dimName = dimRow["DIMENSION_NAME"].ToString();
    string dimUniqueName = dimRow["DIMENSION_UNIQUE_NAME"].ToString(); // 用于后续关联度量

    Console.WriteLine($"=== 维度:{dimName} ===");
    // 调用方法获取该维度关联的所有度量
    GetRelatedMeasures(adomdConn, dimUniqueName);
}

步骤3:获取维度关联的度量

维度和度量的关联关系存在DIMENSION_USAGE Schema行集里,我们先通过它找到维度对应的度量组,再从MEASURES行集里提取该度量组下的所有度量:

private static void GetRelatedMeasures(AdomdConnection conn, string dimensionUniqueName)
{
    // 获取维度与度量组的关联关系
    var dimUsageDs = conn.GetSchemaDataSet("DIMENSION_USAGE", new[] { conn.DatabaseName, dimensionUniqueName });

    foreach (DataRow usageRow in dimUsageDs.Tables[0].Rows)
    {
        string measureGroupName = usageRow["MEASURE_GROUP_NAME"].ToString();
        // 获取该度量组下的所有度量
        var measuresDs = conn.GetSchemaDataSet("MEASURES", new[] { conn.DatabaseName, measureGroupName });

        foreach (DataRow measureRow in measuresDs.Tables[0].Rows)
        {
            string measureName = measureRow["MEASURE_NAME"].ToString();
            string measureExpression = measureRow["MEASURE_EXPRESSION"]?.ToString() ?? "无表达式"; // 可选:查看度量的DAX表达式

            Console.WriteLine($"  关联度量:{measureName} (表达式:{measureExpression})");
        }
    }
}

关键说明

  • 为什么用Schema行集? 相比自定义MDX查询,Schema行集是SSAS官方提供的元数据查询接口,结构稳定,不会因为模型的命名规则变化而失效,查询效率也更高。
  • 表格模型兼容性 这套代码同时适用于多维Cube和表格模型,因为表格模型的元数据在Schema行集中的存储格式和多维Cube是兼容的。
  • 资源管理 一定要用using包裹AdomdConnection,确保连接自动释放,避免SSAS服务器连接池耗尽。

内容的提问来源于stack exchange,提问作者OpenStack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:14:08