使用Python(Adomd)连接Essbase立方体遇XML异常求助
解决Python连接Essbase立方体的问题
针对当前ADOMD连接的错误修复
你遇到的System.Xml.XmlException是因为Microsoft ADOMD.NET为SQL Server Analysis Services (SSAS)设计,Essbase的XMLA实现和SSAS存在格式差异,导致解析响应失败。可以尝试以下调整:
调整连接字符串
尝试修改DataSourceInfo参数或简化连接字符串:connection_string = f"Data Source={server};Initial Catalog={database};User ID={username};Password={password};Provider=Essbase;"或者指定正确的Essbase数据源标识:
connection_string = f"Data Source={server};Initial Catalog={database};DataSourceInfo=\"Provider=Essbase;Data Source=servername:port\";User ID={username};Password={password};"更换ADOMD.NET版本
部分用户反馈ADOMD.NET 14.0版本(对应SQL Server 2017)比16.0版本更兼容Essbase,可尝试引用该版本的Microsoft.AnalysisServices.AdomdClient文件。检查基础配置
- 确认
server地址正确性:Essbase的XMLA端点通常为http://servername:9001/essbase/xmla(默认端口9001) - 替换代码中
username = username和password = password为实际账号密码
- 确认
更适合Python的替代连接方法
方法1:使用Essbase REST API
Oracle官方提供Essbase REST API,无需依赖.NET库,直接用Python的requests库调用:
import requests from requests.auth import HTTPBasicAuth # 配置参数 essbase_server = "http://servername:9001/essbase" username = "你的账号" password = "你的密码" app_name = "目标应用名" cube_name = "目标立方体名" # 获取认证令牌 resp = requests.post(f"{essbase_server}/api/v1/auth/token", auth=HTTPBasicAuth(username, password)) token = resp.json()["token"] headers = {"Authorization": f"Bearer {token}", "Content-Type": "application/json"} # 示例:执行MDX查询 mdx = "SELECT {[Measures].[销售额]} ON COLUMNS, {[地区].[所有地区].Children} ON ROWS FROM [你的立方体]" resp = requests.post( f"{essbase_server}/api/v1/applications/{app_name}/cubes/{cube_name}/mdx", json={"mdx": mdx}, headers=headers ) print(resp.json())
方法2:使用第三方库pyessbase
这是专门为Essbase开发的Python库,封装了API调用,使用更便捷:
- 安装库:
pip install pyessbase - 示例代码:
from pyessbase import Essbase
连接Essbase服务器
with Essbase("servername", "你的账号", "你的密码", port=9001) as ess:
# 获取所有应用
apps = ess.get_applications()
print("应用列表:", apps)
# 连接到指定立方体 cube = ess.get_cube(app_name, cube_name) # 执行MDX查询 query_result = cube.execute_mdx("SELECT {[Measures].[销售额]} ON 0, {[产品].Members} ON 1 FROM [你的立方体]") print(query_result)
内容的提问来源于stack exchange,提问作者Anudeep Thota
相关产品推荐
相关产品推荐

