如何在c#中从mdx查询中检索数据

本文关键字:查询 检索 数据 mdx 中从 | 更新日期: 2023-09-27 18:20:06

我正试图使用Adomdclient库从MDX查询中获取数据。我依赖这个例子http://www.yaldex.com/sql_server/progsqlsvr-CHP-20-SECT-6.html.

MDX查询:

SELECT {[Measures].[Cantidad Vta],[Measures].[Monto Vta],[Measures].[ExistenciaHistorica],[Measures].[Valor Inventario historico]} DIMENSION PROPERTIES PARENT_UNIQUE_NAME ON COLUMNS , NON EMPTY Hierarchize({DrilldownLevel({[DIM SUBMARCA].[Código].[All]})}) DIMENSION PROPERTIES PARENT_UNIQUE_NAME ON ROWS FROM (SELECT ({[DIM TIENDA].[JERARQUIA TIENDA].[Región].&[Bodega],[DIM TIENDA].[JERARQUIA TIENDA].[Región].&[Cadena],[DIM TIENDA].[JERARQUIA TIENDA].[Región].&[Outlet]}) ON COLUMNS FROM [JUGUETRONHQ]) WHERE ([DIM FECHA VENTA].[JERARQUIA FECHA VENTA].[Time].&[2012-01-01T00:00:00],[DIM FECHA EXISTENCIA].[JERARQUIA FECHA EXISTENCIA].[All]) CELL PROPERTIES VALUE

与SqlClient等其他命名空间一样,使用连接、命令和数据读取器:

using Microsoft.AnalysisServices.AdomdClient;
...
using (AdomdConnection con = new AdomdConnection(connection_string))
{
  con.Open();
  using (AdomdCommand command = new AdomdCommand(query, con)) 
  {
    using (AdomdDataReader reader = command.ExecuteReader()) 
    {
      while (reader.Read())
      {
        for (int i = 0; i < reader.FieldCount; i++)
          Console.Write(reader[i] + (i == reader.FieldCount - 1 ? "" : ", "));
          Console.WriteLine("");
      }
    }
  }
}

然而,这个片段只正确显示了5列中的4列:

[DIM SUBMARCA].[Código].[All], , , 3, 825

必须是:

115200081, , , 3, 825

也许需要一个演员阵容,但我不知道怎么做。

如何在c#中从mdx查询中检索数据

这看起来像是MDX查询的问题,而不是数据检索的问题。它没有正确地约束[DIM SUBMARCA]。[Código]维度。

您的查询有1[ALL]级别维度和4个度量值:

[DIM SUBMARCA].[Código].[All], 
[Measures].[Cantidad Vta],
[Measures].[Monto Vta],
[Measures].[ExistenciaHistorica],
[Measures].[Valor Inventario historico]

这将检索1[ALL]列和4个值:

[DIM SUBMARCA]。[Código]。[全部],,3825

115200081是关键值吗?您可以使用"DIMENSION PROPERTIES MEMBER_HEY"获取此值。

从MDX查询中检索数据

添加了对Microsoft.AnalysisServices.AdomdClient.dll的引用
AdomConnection步骤

AdomdConnection con = new AdomdConnection("connectionstring"); // connect DB con.Open(); AdomdCommand cmd = new AdomdCommand("MDX query", con); //query
AdomdDataReader reader = cmd.ExecuteReader(); //Execute query
    while (reader.Read())   // read
        {
            Data dt = new Data();  // custom class
            dt.Gender = reader[0].ToString();
            dt.Eid = reader[1].ToString();
            dt.salary = reader[2].ToString();
            data.Add(dt);
        }