基于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
相关产品推荐
相关产品推荐

