Использование Python для запроса данных куба SQL Server Analysis Services (SSAS) - PullRequest
0 голосов
/ 10 октября 2019

В моей организации есть ресурс службы анализа SQL, мы можем использовать excel или powerbi для подключения к кубу, использовать имя сервера (tooldata.amr.xxx.com) и получить данные.

ЧтоЯ хочу использовать Python или Excel для автоматизации запроса данных и вывода в CSV-файл для последующего использования приложения (отчеты / диаграммы и т. д.)

Я пробовал ниже, но не получилось:

1. Microsoft.AnalysisServices.AdomdClient

FileNotFoundException Traceback (последний последний вызов) в

2. clr.AddReference ("Microsoft.AnalysisServices.AdomdClient.dll")

FileNotFoundException: Невозможно найти сборку 'Microsoft.AnalysisServices.AdomdClient.dll'. at Python.Runtime.CLRModule.AddReference (String name)

похоже на отсутствие некоторого env. не уверен, как поступить. какие-либо предложения?

2. использовать olap.xmla

import olap.xmla.xmla as xmla 
provider = olap.xmla.xmla.XMLAProvider()
connect = provider.connect(location='http://tooldata.amr.xxx.com/OLAP/msmdpump.dll',username='user',password='pwd')
source = connect.getOLAPSource()
print (source.getCatalog("TestCube"))

Ошибка подключения: HTTPConnectionPool (host = 'tooldata.amr.xxx.com', порт= 80): максимальное количество повторных попыток превышено с помощью url: /OLAP/msmdpump.dll (вызвано NewConnectionError (': не удалось установить новое соединение: [WinError 10060] Попытка подключения не удалась, поскольку подключенная сторона не ответила должным образом после периодавремя или не удалось установить соединение, потому что подключенный хост не смог ответить '))

Похоже, нужна некоторая конфигурация со стороны сервера, но она не в моем распоряжении, отбросьте эту опцию.

3. поскольку я могу использовать Excel для получения данных SSAS, возможно ли использовать Python для вызова Excel и обновления данных, а затем проанализировать данные из Excel? кто-нибудь пробовал это?

спасибо.

1 Ответ

1 голос
/ 20 октября 2019

Наконец, проблема решена на основе решения 1.Microsoft.AnalysisServices.AdomdClient .

#use your own DLL path.
clr.AddReference ("r"C:\Windows\assembly\GAC_MSIL\Microsoft.AnalysisServices.AdomdClient\11.0.0.0__89845dcd8080cc91\Microsoft.AnalysisServices.AdomdClient.dll"")
clr.AddReference ("System.Data")
from Microsoft.AnalysisServices.AdomdClient import AdomdConnection , AdomdDataAdapter
from System.Data import DataSet
#use your own server name or address. and data cube name.
conn = AdomdConnection("Data Source=tooldata.amr.xxx.com;Catalog=ShiftlyCellCube;")
conn.Open()
cmd = conn.CreateCommand()
#your MDX query, if you are not familiar, you can use the excel powerpivot to build one query for you. 
cmd.CommandText = "your mdx query" 
adp = AdomdDataAdapter(cmd)
datasetParam =  DataSet()
adp.Fill(datasetParam)
conn.Close();

# datasetParam hold your result as collection a\of tables
# each tables has rows
# and each row has columns
print (datasetParam.Tables[0].Rows[0][0])

clr равно pythonnet , пакет можно установить через: pythonnet Github или pythonnet pypi

А для Microsoft.AnalysisServices.AdomdClient.dll , вероятно, у вас его нет. Вы можете получить DLL, установив SQL_AS_ADOMD.msi .

И наконец, попытайтесь проанализировать структурированный набор данных из Cube DataSet. Я использую приведенный ниже код (поле зависит от вашего вывода запроса DAX).

with open ('xx_Pivot.csv','w') as file:
#my MDX only return 7 field as below headers.
header = 'WW,Shift,ShiftID,Factory,Entity,Cell,Data\n'
file.writelines(header)
#iteration the Dataset and get out a structure 2D data table and save to a file.
for row_n in range(len(list(datasetParam.Tables[0].Rows))):
    row = ''
    for column_n in range(7):
        data = datasetParam.Tables[0].Rows[row_n][column_n]
        row = row+str(data)+',' 
    row = row+'\n'
    file.writelines(row)
...