正在查询OLAP服务器

本文关键字:服务器 OLAP 查询 | 更新日期: 2023-09-27 18:29:58

我使用以下代码在C#中执行查询:

 AdomdConnection con = new AdomdConnection("Datasource=local;...");
            con.Open();
            AdomdCommand command = con.CreateCommand();
            command.CommandText = input;
            AdomdDataReader reader = command.ExecuteReader();
  while (reader.Read())
            {
for(i =0; i<reader.fieldCount; i++){
      a[i]=reader.GetString(i);
}
return a;

然而,这段代码为每个单元格返回层次结构中的完整路径。也就是说,每一行数据都像[AllGeography,Canada,Vancouver,Allproduct,bicycles,accessories,297483]。我只想检索树叶和度量值,即:[vancouver,accessories,297483]。我该怎么办?如何指定树叶?

正在查询OLAP服务器

因为MDX查询的结果实际上是多维的,所以我觉得自己对ExecuteCellSet更满意。你可以得到整个CellSet,然后你可以通过坐标得到Measures。

例如(如果您在查询中有一个度量):

AdomdCommand cmd = conn.CreateCommand();
cmd.CommandText = @"SELECT 
            [Geography].[Geography].[Country].&[Canada].Children ON 0, 
            [Product].[Id] ON 1
            FROM [Cube]
            WHERE [Measures].[Your Measure]";
CellSet cs = cmd.ExecuteCellSet();
TupleCollection CanadaChildren = cs.Axes[0].Set.Tuples;
TupleCollection ProductIds = cs.Axes[1].Set.Tuples;
for (int row = 0; row < CanadaChildren.Count; row++)
{
    for (int col = 0; col < ProductIds.Count; col++)
    {
        a[i++] = cs.Cells[col, row].Value;
    }
}
conn.Close();

如果你有几个度量,那么它将是查询中的第三个维度,也是单元集中的第三个子维度。