如何使用python运行xmla查询

如何使用python运行xmla查询,python,xml,xmla,Python,Xml,Xmla,我的要求是使用python连接到AnalysisServices服务器,运行xmla查询,例如 <Discover xmlns='urn:schemas-microsoft-com:xml-analysis'> <RequestType>MDSCHEMA_CUBES</RequestType> <Restrictions/> <Properties> <PropertyList>

我的要求是使用python连接到AnalysisServices服务器,运行xmla查询,例如

<Discover xmlns='urn:schemas-microsoft-com:xml-analysis'>
    <RequestType>MDSCHEMA_CUBES</RequestType>
    <Restrictions/>
    <Properties>
        <PropertyList>
            <Catalog>Q2C Analysis</Catalog>
        </PropertyList>
    </Properties>
</Discover>

MDU多维数据集
Q2C分析
得到结果,结果将是

<return xmlns="urn:schemas-microsoft-com:xml-analysis">
  <root xmlns="urn:schemas-microsoft-com:xml-analysis:rowset" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msxmla="http://schemas.microsoft.com/analysisservices/2003/xmla">
    <xsd:schema targetNamespace="urn:schemas-microsoft-com:xml-analysis:rowset" xmlns:sql="urn:schemas-microsoft-com:xml-sql" elementFormDefault="qualified">
      <xsd:element name="root">
        <xsd:complexType>
          <xsd:sequence minOccurs="0" maxOccurs="unbounded">
            <xsd:element name="row" type="row" />
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:simpleType name="uuid">
        <xsd:restriction base="xsd:string">
          <xsd:pattern value="[0-9a-zA-Z]{8}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{12}" />
        </xsd:restriction>
      </xsd:simpleType>
      <xsd:complexType name="xmlDocument">
        <xsd:sequence>
          <xsd:any />
        </xsd:sequence>
      </xsd:complexType>
      <xsd:complexType name="row">
        <xsd:sequence>
          <xsd:element sql:field="CATALOG_NAME" name="CATALOG_NAME" type="xsd:string" />
          <xsd:element sql:field="SCHEMA_NAME" name="SCHEMA_NAME" type="xsd:string" minOccurs="0" />
          <xsd:element sql:field="CUBE_NAME" name="CUBE_NAME" type="xsd:string" minOccurs="0" />
          <xsd:element sql:field="CUBE_TYPE" name="CUBE_TYPE" type="xsd:string" minOccurs="0" />
          <xsd:element sql:field="CUBE_GUID" name="CUBE_GUID" type="uuid" minOccurs="0" />
          <xsd:element sql:field="CREATED_ON" name="CREATED_ON" type="xsd:dateTime" minOccurs="0" />
          <xsd:element sql:field="LAST_SCHEMA_UPDATE" name="LAST_SCHEMA_UPDATE" type="xsd:dateTime" minOccurs="0" />
          <xsd:element sql:field="SCHEMA_UPDATED_BY" name="SCHEMA_UPDATED_BY" type="xsd:string" minOccurs="0" />
          <xsd:element sql:field="LAST_DATA_UPDATE" name="LAST_DATA_UPDATE" type="xsd:dateTime" minOccurs="0" />
          <xsd:element sql:field="DATA_UPDATED_BY" name="DATA_UPDATED_BY" type="xsd:string" minOccurs="0" />
          <xsd:element sql:field="DESCRIPTION" name="DESCRIPTION" type="xsd:string" minOccurs="0" />
          <xsd:element sql:field="IS_DRILLTHROUGH_ENABLED" name="IS_DRILLTHROUGH_ENABLED" type="xsd:boolean" minOccurs="0" />
          <xsd:element sql:field="IS_LINKABLE" name="IS_LINKABLE" type="xsd:boolean" minOccurs="0" />
          <xsd:element sql:field="IS_WRITE_ENABLED" name="IS_WRITE_ENABLED" type="xsd:boolean" minOccurs="0" />
          <xsd:element sql:field="IS_SQL_ENABLED" name="IS_SQL_ENABLED" type="xsd:boolean" minOccurs="0" />
          <xsd:element sql:field="CUBE_CAPTION" name="CUBE_CAPTION" type="xsd:string" minOccurs="0" />
          <xsd:element sql:field="BASE_CUBE_NAME" name="BASE_CUBE_NAME" type="xsd:string" minOccurs="0" />
          <xsd:element sql:field="CUBE_SOURCE" name="CUBE_SOURCE" type="xsd:unsignedShort" minOccurs="0" />
          <xsd:element sql:field="PREFERRED_QUERY_PATTERNS" name="PREFERRED_QUERY_PATTERNS" type="xsd:unsignedShort" minOccurs="0" />
        </xsd:sequence>
      </xsd:complexType>
    </xsd:schema>
    <row>
      <CATALOG_NAME>Q2C Analysis</CATALOG_NAME>
      <CUBE_NAME>Q2C Thor</CUBE_NAME>
      <CUBE_TYPE>CUBE</CUBE_TYPE>
      <LAST_SCHEMA_UPDATE>2020-11-20T07:07:10.88</LAST_SCHEMA_UPDATE>
      <LAST_DATA_UPDATE>2020-11-20T07:14:47.023333</LAST_DATA_UPDATE>
      <DESCRIPTION />
      <IS_DRILLTHROUGH_ENABLED>true</IS_DRILLTHROUGH_ENABLED>
      <IS_LINKABLE>false</IS_LINKABLE>
      <IS_WRITE_ENABLED>false</IS_WRITE_ENABLED>
      <IS_SQL_ENABLED>false</IS_SQL_ENABLED>
      <CUBE_CAPTION>Q2C Thor</CUBE_CAPTION>
      <CUBE_SOURCE>1</CUBE_SOURCE>
      <PREFERRED_QUERY_PATTERNS>1</PREFERRED_QUERY_PATTERNS>
    </row>
  </root>
</return>

Q2C分析
Q2C雷神
立方体
2020-11-20T07:07:10.88
2020-11-20T07:14:47.023333
真的
假的
假的
假的
Q2C雷神
1.
1.
然后从相关标记元素中提取所需的值


有没有办法做到这一点?提前感谢。

所以我终于找到了解决这个问题的方法,而且非常简单(至少对我来说是这样)

首先安装adodbapi和pyodbc 其次,为Olap指定连接字符串-您可以找到正确的connectionstring模式 第三,定义需要在AnalysisServices服务器上运行的DMV查询
第四,获取结果并将其解析为一个列表,以便插入SQL数据或所需的输出。

我了解到我可以使用olapy模块,但文档中非常详细地介绍了如何连接到AS服务器并运行查询。我确实设法实例化了一个MDXEngine,但它似乎期望的是MDX查询,而不是xmla查询(事后看来,在olapy模块中,它确实说是MDXEngine),所以可能是我的疏忽。这似乎是一个不完整的答案。问题的标题是“如何使用python运行xmla查询”,标记为“python”。但问题或答案中没有一行Python代码。