使用 Python 查询 SQL Server Analysis Services (SSAS) 多维数据集数据
Posted
技术标签:
【中文标题】使用 Python 查询 SQL Server Analysis Services (SSAS) 多维数据集数据【英文标题】:Use Python to Query SQL Server Analysis Services (SSAS) cube Data 【发布时间】:2019-10-10 05:48:16 【问题描述】:我的组织有一个SQL分析服务资源,我们可以使用excel或者powerbi连接cube使用服务器名(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(字符串名称)
看起来缺少一些环境。不知道如何进行。有什么建议吗?
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): Max retries exceeded with url: /OLAP/msmdpump.dll (由 NewConnectionError(': 无法建立新连接: [WinError 10060] 连接尝试失败,因为连接方在一段时间后没有正确响应,或者连接失败,因为连接的主机没有响应'))
看起来需要从服务器端进行一些配置,但我无法控制,请放弃此选项。
3.既然我可以使用excel来获取SSAS数据,那是否可以使用python调用excel并刷新数据,然后从excel中解析出数据?有人试试吗?
谢谢。
【问题讨论】:
尝试 1) 将 .dll 的位置附加到 sys.path;或 2) 使用完整路径,例如clr.AddReference (r"D:\dlls\Microsoft.AnalysisServices.AdomdClient.dll") 感谢 Owl7,在我添加完整路径后它现在可以工作了 【参考方案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 Github 或pythonnet 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)
【讨论】:
以上是关于使用 Python 查询 SQL Server Analysis Services (SSAS) 多维数据集数据的主要内容,如果未能解决你的问题,请参考以下文章
如何在 python 中使用 sqlalchemy 在查询中创建 sql server 表变量
sql server inject使用动态查询执行sql语句实例