Python的MS分析服务OLAP API

7 投票
3 回答
17573 浏览
提问于 2025-04-15 21:47

我想找一种方法,能够连接到微软的分析服务OLAP立方体,运行MDX查询,并把结果导入到Python里。换句话说,就是跟Excel做的事情一样。有没有什么Python的解决方案可以做到这一点?

有人提到过Django的ORM,虽然我很喜欢这个框架,但这不是我想要的。我也不是想要一种拉取行并进行汇总的方法——这正是分析服务的用途。

有什么想法吗?谢谢。

3 个回答

1

你可以很简单地通过一个叫xmla的python包来连接和访问OLAP立方体。xmla在和OLAP沟通中起着重要作用,它可以对立方体进行各种操作。

你可以通过以下方式安装xmla包:

python -m pip install xmla --user

或者

python -m venv xmlaenv
# python -m venv --without-pip xmlenv - use if the above commands throws error
cd xmlaenv
source bin/activate
git clone https://github.com/may-day/olap
cd olap/xmla
# optional if you have it already
pip install pipenv
pipenv install -dev
python setup.py develop

安装完成后,使用位置、用户名和密码来连接OLAP XMLA立方体。

import olap.xmla.xmla as xmla
provider = xmla.XMLAProvider()
connect = provider.connect(location='http://localhost/OLAP/msmdpump.dll',
 username = 'test', password = 'test')
source = connect.getOLAPSource()
9

这可以通过使用pythonnet很简单地实现:

http://pythonnet.github.io/

你需要加载与SQL Server 2005和2008一起提供的Microsoft.AnalysisServices.dll,或者可以在这里获取可再分发包:

http://www.microsoft.com/downloads/en/details.aspx?FamilyID=b33d2c78-1059-4ce2-b80d-2343c099bcb4

搜索SQLSERVER2008_ASAMO10.msi

然后你就可以加载它并使用了。下面是一个简单处理数据立方体的例子:

import CLR
from CLR.System.Reflection import Assembly

Assembly.LoadWithPartialName("AnalysisServices.DLL")

from CLR.Microsoft.AnalysisServices import Server
from CLR.Microsoft.AnalysisServices import ProcessType

serverName = 'localhost\sql2005'
dbName = 'MyDatabase'

# Connect to server
amoServer = Server()
amoServer.Connect(serverName)

# Connect to database
  amoDb = amoServer.Databases[dbName]
    amoDb.Process(ProcessType.ProcessFull)
4

我对Python完全不了解,但如果它能调用DLL文件,那就应该可以使用微软的ADOMD对象。这是我能想到的最佳选择。

你可以看看Office Web Components(OWC),因为它有一个OLAP控件,可以嵌入到网页上。我觉得你可以把MDX传给它,但也许你想让Python看到结果,而我觉得它不支持这样做。

否则,你也可以用其他语言自己做一个“代理”。这个程序或网页可以接收MDX,然后返回给你一个显示结果的XML。之后,Python就可以使用这个XML。

撰写回答