Запрос к OLAP-серверу - PullRequest
2 голосов
/ 03 апреля 2012

Я использую следующий код для выполнения запроса в 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, Канада, Ванкувер, Allproduct, велосипеды, аксессуары, 297483].Я хочу получить только листья и значение меры: [Ванкувер, аксессуары, 297483].Что я должен делать?Как я могу указать листья?

1 Ответ

2 голосов
/ 30 ноября 2013

Поскольку результат запроса MDX на самом деле является многомерным, я чувствую себя более комфортно с ExecuteCellSet.Вы можете получить весь CellSet, затем вы получите Меры через координаты.

Например (если у вас есть одна мера в запросе):

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();

Если у вас есть несколько мер, то это будетбыть третьим измерением в запросе и третьим согласованием в наборе ячеек.

...