You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python(Adomd)连接Essbase立方体遇XML异常求助

解决Python连接Essbase立方体的问题

针对当前ADOMD连接的错误修复

你遇到的System.Xml.XmlException是因为Microsoft ADOMD.NET为SQL Server Analysis Services (SSAS)设计,Essbase的XMLA实现和SSAS存在格式差异,导致解析响应失败。可以尝试以下调整:

  1. 调整连接字符串
    尝试修改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};"
    
  2. 更换ADOMD.NET版本
    部分用户反馈ADOMD.NET 14.0版本(对应SQL Server 2017)比16.0版本更兼容Essbase,可尝试引用该版本的Microsoft.AnalysisServices.AdomdClient文件。

  3. 检查基础配置

    • 确认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调用,使用更便捷:

  1. 安装库:
    pip install pyessbase
    
  2. 示例代码:
    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
相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 11:27:16