2010-04-19 59 views
5

Estoy buscando una forma de conectarse a un cubo OLAP de MS Analysis Services, ejecutar consultas MDX y extraer los resultados en Python. En otras palabras, exactamente lo que Excel hace. ¿Hay alguna solución en Python que me permita hacer eso?MS Analysis Services OLAP API para Python

Alguien con una pregunta similar dirigida al ORM de Django. Por mucho que me guste el marco, esto no es lo que estoy buscando. Tampoco estoy buscando una forma de extraer filas y agregarlas, para eso sirve Analysis Services.

Ideas? Gracias.

+0

¿Ha intentado ajustar adomd.dll? Estaba a punto de darle una oportunidad. –

Respuesta

3

Soy completamente ignorante sobre Python, pero si puede llamar a DLL entonces debería poder usar el objeto ADOMD de Microsoft. Esta es la mejor opción que se me ocurre.

Puede ver Office Web Components (OWC) ya que tiene un control OLAP que puede incrustarse en una página web. Creo que puedes pasarle MDX, pero quizás quieras que Python vea los resultados también, lo cual no creo que permita.

De lo contrario, quizás pueda construir su propio "proxy" en otro idioma. Este programa/página web podría aceptar MDX y devolverle XML mostrando los resultados. Python podría entonces consumir este XML.

+0

Por lo que sé, puede llamar DLL. El problema es que están tan mal documentados. En realidad, lo mismo se aplica al protocolo de comunicación del servidor cliente-OLAP. Implementaría un cliente en Python yo mismo (o lo intentaría) pero no puedo encontrar nada en ninguna parte. ¿Alguna sugerencia? – ktdrv

+0

Busque un ejemplo de Python que muestre cómo llamar a una DLL. A continuación, instale MS SQL Server 'Client Components' en su máquina de desarrollo e intente cambiar el ejemplo de Python para llamar a adomd.dll y utilice la documentación de Microsoft para indicarle qué clases/objetos/propiedades usar. En VBScript haríamos Server.CreateObject ("ADOMD.Cellset") –

7

Esto se puede hacer con bastante facilidad utilizando pythonnet:

http://pythonnet.github.io/

Carga el Microsoft.AnalysisServices.dll que se proporciona con SQL Server 2005 y 2008 o obtener el paquete redistribuible aquí:

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

búsqueda de SQLSERVER2008_ASAMO10.msi

Luego puede cargarlo y usarlo. Aquí hay un ejemplo que simplemente procesa cubos:

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)