Любой запрос MDX в Excel VBA?

Есть ли способ выполнить запрос MDX в Excel VBA?

Я думал, что это можно сделать черезАДОтак же, как в случае с SQL (да, я знаю, что SQL отличается от MDX - проблема, которая много раз упоминалась в Stackoverflow).
 К сожалению, я не могу найти никаких примеров.

Some told about using external tools to accomplish this task, but I don't want to pay for them. Some give an examples in XMLA, but I want to execute simple MDX query instead

.

 SeanC25 июн. 2012 г., 16:18
msolap.wordpress.com/2008/10/07/… это другой метод
 Fionnuala25 июн. 2012 г., 14:48
Вы пробовали Google?cwebbbi.wordpress.com/2009/12/18/… может довольно быстро.

Ответы на вопрос(1)

Решение Вопроса

которая вызывается в VBA и которая основана на входной строке MDX, записывает данные в Excel. Электронная таблица требует ссылки на ADO и ADOMD

Public Sub DisplayMDX(ipCell, ipMDX, ipExclHeadings)

    Dim sQry As String
    Dim sConnection As String
    Dim rs As ADOMD.Cellset
    Dim sServer, sDB, ts As String
    Dim hyper As Hyperlink
    Dim i, j, k, h, rowStart, colStart, dimCount As Integer
    Dim sURLLink, sCustCaption, sCustLink As String
    Dim db As ADODB.Connection

    'Open a new ADO connection
    Set db = New ADODB.Connection
    sConnection = "Provider=MSOLAP; Data Source=DW3; Initial Catalog=FDMDW1; Integrated Security=SSPI"

    db.CommandTimeout = 0
    db.Open sConnection

    'Open a CellSet to store the results of the query.
    Set rs = New Cellset

    'Tidy the query of an erroneous spaces
    sQry = Trim(ipMDX)

    'Open the query that was constructed above
    Application.StatusBar = "Getting OLAP Data"
    With rs
        .Open sQry, db
    End With

    With ActiveSheet

     'Goto cell specified
     Range(ipCell).Select

     'Find the starting point
     rowStart = ActiveCell.Row
     colStart = ActiveCell.Column
     For j = 0 To rs.Axes(1).Positions.Count - 1

        If Not ipExclHeadings Then
           dimCount = rs.Axes(1).DimensionCount
           For h = 0 To rs.Axes(1).DimensionCount - 1
                Cells(rowStart + j, colStart + h) = rs.Axes(1).Positions(j).Members(h).Caption
           Next
        End If

        For k = 0 To rs.Axes(0).Positions.Count - 1
           If Not (k = 1) Then

              If rs(k, j) <> "" Then
                 Cells(rowStart + j, colStart + dimCount + k).Value = rs(k, j)
              Else
                 Cells(rowStart + j, colStart + dimCount + k).ClearContents
              End If

           End If
           Application.StatusBar = rs(k, j)
        Next

     Next
    End With

rs.Close

Application.StatusBar = "Done"

Exit Sub
errMsg:
   MsgBox Err.Description, vbOKOnly + vbCritical, "Error #" & Err.Number

End Sub
 matandked27 июн. 2012 г., 13:03
Мой MDX был "SELECT CUBE_NAME FROM $ SYSTEM.MDSchema_Cubes, где cube_source = 1". Работает, когда вызывается из служб Analysis Services.
 matandked27 июн. 2012 г., 13:02
Синтаксический анализатор XML для анализа: входной запрос не на языке, указанном в свойстве Dialect для этого request.error code-2147467259
 matandked27 июн. 2012 г., 12:40
Сбой кода здесь: Dim rs As ADOMD.Cellset (тип не определен), поэтому я добавил объекты данных Microsoft ActiveX (многомерный) 2.7 Библиотека Объекты данных Microsoft ActiveX 2.7 Библиотека в Инструменты -> Ссылки
 29 июн. 2012 г., 01:11
Извините, я должен был взять ipLink. Да, вы можете просто удалить его. Я использовал его, чтобы вставить ссылку в таблицу.
 matandked27 июн. 2012 г., 12:24
Я не могу найти, где вы используете "ipLink" в вашем коде. Не могли бы вы описать, почему нам это нужно, пожалуйста?

Ваш ответ на вопрос