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

.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 14:02:09