使用 MDX 查询从 ASP.NET API 检索数据

Retrieve data from ASP.NET API by using MDX queries

当我 运行 在 SQL 服务器上进行一些查询时,它会显示结果,但是当我 运行 通过 ASP.NET 进行相同的查询时,我不能获得与 SQL 服务器相同的结果。我能够获取 table 的列名,但无法从这些行中获取数据,因为我的 _dt.Rows.Count 始终为零。

public dynamic GetData(string business, string email)
{
        string sConnStr = "...";
        string query = "....";

        DataTable _dt = new DataTable();
        AdomdConnection connection = new AdomdConnection(sConnStr);

        connection.Open();

        AdomdCommand cmd = new AdomdCommand(query, connection);

        var data = cmd.ExecuteReader();
        _dt.Load(data);

        return _dt.Columns;
}

结果显示

{
        "AllowDBNull": true,
        "AutoIncrement": false,
        "AutoIncrementSeed": 0,
        "AutoIncrementStep": 1,
        "Caption": ",,,,,,,",
        "ColumnName": ",,,,,,,,",
        "Prefix": "",
        "DataType": "System.Double, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
        "DateTimeMode": 3,
        "DefaultValue": null,
        "Expression": "",
        "ExtendedProperties": {},
        "MaxLength": -1,
        "Namespace": "",
        "Ordinal": 0,
        "ReadOnly": true,
        "Table": [],
        "Unique": false,
        "ColumnMapping": 1,
        "Site": null,
        "Container": null,
        "DesignMode": false
    },

对所有列都这样。

如何访问 SQL 服务器中显示的数据?

另一个问题是对于某些查询它会抛出异常:

Cannot query internal supporting structures for column '**'[..] because they are not processed. Please refresh or recalculate the table....

seem to same problem that i faced

实现我的结果的最佳方法是什么?谢谢

您可以使用以下代码在 asp.net 中通过 SSAS Cube 获得结果,

     public DataTable Execute(string mdxQuery)
    {
        using (var connection = new AdomdConnection(this.ConnectionString))
        {
            using (var command = new AdomdCommand(mdxQuery, connection))
            {
                connection.Open();
                using (var dapter = new AdomdDataAdapter(command))
                {
                    var table = new DataTable(connection.Database);
                    dapter.Fill(table);
                    return table;
                }
            }
        }
    }

我找到答案了

根据我的情况,我的组织没有授予我将查询应用于分析服务的适当权限。

根据我的组织提供的权限级别,我能够通过我的连接字符串连接分析服务,但该权限级别不足以将查询应用于分析服务。

组织更改了我的权限级别,现在上面的代码运行良好