使用Python查询SQL Server Analysis Services(SSAS)多维数据集数据

问题描述 投票:0回答:1

我的组织中有一个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'。在Python.Runtime.CLRModule.AddReference(String name)

看起来缺少一些环境。不知道如何进行。有什么建议吗?

2. use 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"))

ConnectionError:HTTPConnectionPool(host ='tooldata.amr.xxx.com',port = 80):url超过了最大重试次数:/OLAP/msmdpump.dll(由NewConnectionError('引起:无法建立新连接:[ WinError 10060]连接尝试失败,因为一段时间后连接方未正确响应,或者由于连接的主机未能响应而建立的连接失败'))

似乎需要从服务器端进行一些配置,但超出我的控制范围,请删除此选项。

3。因为我可以使用excel来获取SSAS数据,是否可以使用python调用excel并刷新数据,然后从excel中解析出数据?有没有人尝试过?

谢谢。

python sql excel ssas cube
1个回答
1
投票

最后,基于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 Githubpythonnet pypi

对于Microsoft.AnalysisServices.AdomdClient.dll,您可能没有。您可以通过安装SQL_AS_ADOMD.msi 获得DLL。

最后,旨在从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)
© www.soinside.com 2019 - 2024. All rights reserved.