.NET Core中使用C#查询Analysis Services表格模型的方法示例
在.NET Core中查询Tabular模型并格式化结果
准备工作
首先安装必要的NuGet包:
Install-Package Microsoft.AnalysisServices.AdomdClient.NetCore.retail.amd64
1. 实现类似SELECT * FROM myTable的查询
Tabular模型不直接支持SQL语法,但可以用DAX语言的EVALUATE语句实现等价效果。以下是完整的.NET Core示例代码:
using Microsoft.AnalysisServices.AdomdClient; using System; using System.Collections.Generic; class Program { static void Main() { // 替换为你的Tabular模型连接信息 string connectionString = "Data Source=localhost;Catalog=YourTabularDatabase"; // DAX语句:等价于SELECT * FROM myTable string daxQuery = "EVALUATE myTable"; using (AdomdConnection connection = new AdomdConnection(connectionString)) { connection.Open(); using (AdomdCommand command = new AdomdCommand(daxQuery, connection)) { using (AdomdDataReader reader = command.ExecuteReader()) { List<Dictionary<string, object>> resultList = new List<Dictionary<string, object>>(); List<string> columnNames = new List<string>(); // 获取所有列名 for (int i = 0; i < reader.FieldCount; i++) { columnNames.Add(reader.GetName(i)); } // 逐行读取数据并封装 while (reader.Read()) { Dictionary<string, object> row = new Dictionary<string, object>(); foreach (string colName in columnNames) { row[colName] = reader[colName]; } resultList.Add(row); } // 输出结果(可根据业务需求调整格式) foreach (var row in resultList) { foreach (var kvp in row) { Console.WriteLine($"{kvp.Key}: {kvp.Value}"); } Console.WriteLine("---"); } } } } } }
2. 查询多表列和度量值并生成指定格式的数组
针对你需要的跨表列+度量值的结果,先编写关联表的DAX查询(需确保表间已建立正确关系),再将结果转换为目标格式:
示例DAX查询
EVALUATE SUMMARIZECOLUMNS( TableA[Column1], TableA[Column2], TableB[Column1], "TableC.MeasureA", [MeasureA] )
.NET Core代码实现格式转换
using Microsoft.AnalysisServices.AdomdClient; using System; using System.Collections.Generic; class Program { static void Main() { string connectionString = "Data Source=localhost;Catalog=YourTabularDatabase"; string daxQuery = @" EVALUATE SUMMARIZECOLUMNS( TableA[Column1], TableA[Column2], TableB[Column1], ""TableC.MeasureA"", [MeasureA] ) "; using (AdomdConnection connection = new AdomdConnection(connectionString)) { connection.Open(); using (AdomdCommand command = new AdomdCommand(daxQuery, connection)) { using (AdomdDataReader reader = command.ExecuteReader()) { // 构建目标格式的结果结构 var result = new { Columns = new List<string>(), Rows = new List<List<object>>() }; // 填充列名 for (int i = 0; i < reader.FieldCount; i++) { result.Columns.Add(reader.GetName(i)); } // 填充行数据并格式化度量值 while (reader.Read()) { List<object> row = new List<object>(); for (int i = 0; i < reader.FieldCount; i++) { var value = reader[i]; // 对金额类型的度量值添加$符号格式化 if (result.Columns[i] == "TableC.MeasureA" && value is decimal decValue) { row.Add($"${decValue:N0}"); } else { row.Add(value); } } result.Rows.Add(row); } // 输出结果(可直接序列化为JSON或用于前端渲染) Console.WriteLine("列名:"); foreach (var col in result.Columns) { Console.Write($"{col}\t"); } Console.WriteLine("\n数据行:"); foreach (var row in result.Rows) { foreach (var cell in row) { Console.Write($"{cell}\t"); } Console.WriteLine(); } } } } } }
关键说明
- DAX是Tabular模型的原生查询语言,
EVALUATE用于返回表表达式结果,SUMMARIZECOLUMNS是聚合多列和度量值的常用函数。 - 需确保连接字符串中的服务器地址(
Data Source)和数据库名(Catalog)与你的实际环境匹配。 - 度量值的格式化逻辑可根据数据类型(如整数、日期)灵活调整。
内容的提问来源于stack exchange,提问作者Alberto Gentilcore
相关产品推荐
相关产品推荐

