使用Python(Anaconda)连接SQL Server Analysis Cube遇阻求助
嘿,我来帮你搞定这个SSAS Cube连接的问题!你在Windows 7+Anaconda4.4的环境下只能用自带库对吧?那咱们就从你已经熟悉的pyodbc入手,调整配置来适配SSAS的多维查询需求。
适配你的环境:用pyodbc连接SSAS Cube的可行方案
1. 修正SSAS专用的连接字符串
你之前连SQL Server用的是关系型数据库驱动,而SSAS属于OLAP多维数据库,得换对应的驱动才行。Windows 7系统一般自带适配的MSOLAP.6驱动(对应SQL Server 2016及兼容版本),连接字符串这么写是最稳妥的:
import pyodbc import pandas as pd # 替换成你的实际服务器、实例和Cube库名 conn_str = """ Provider=MSOLAP.6; Data Source=你的SSAS服务器地址\\实例名; Initial Catalog=你的Cube所属数据库名; Integrated Security=SSPI; """
小提示:如果是SSAS默认实例,
Data Source直接写服务器IP或机器名就行;Integrated Security=SSPI会用你当前的Windows账号做身份认证,不用额外输密码,很适合办公环境。
2. 执行MDX查询并转成DataFrame
MDX的查询结果格式和SQL不一样,但pyodbc依然能处理。不过考虑到你用的是较老的Anaconda版本,pandas.read_sql可能对MDX的兼容性有点小问题,给你两种方案:
方案一:直接用read_sql(优先尝试)
# 建立连接 conn = pyodbc.connect(conn_str) # 替换成你的实际MDX查询语句 mdx_query = """ SELECT [Measures].[销售额] ON COLUMNS, [日期].[年份].[年份].Members ON ROWS FROM [销售分析Cube] """ # 读取结果到DataFrame df = pd.read_sql(mdx_query, conn) # 记得关闭连接 conn.close() print(df.head())
方案二:手动遍历游标(如果read_sql报错)
要是老版本的pandas对MDX结果解析有问题,就手动处理游标数据:
conn = pyodbc.connect(conn_str) cursor = conn.cursor() cursor.execute(mdx_query) # 提取列名 columns = [col[0] for col in cursor.description] # 提取所有行数据 rows = cursor.fetchall() # 转成DataFrame df = pd.DataFrame.from_records(rows, columns=columns) conn.close()
3. 排查常见坑点
- 驱动版本不匹配:如果
MSOLAP.6连接失败,试试MSOLAP.5(对应SQL Server 2014),Windows 7上大概率也自带这个驱动; - 权限问题:确认你的Windows账号有访问目标SSAS Cube的权限,毕竟用的是SSPI认证,没有权限的话连接会直接失败;
- 更新pyodbc:Anaconda4.4自带的pyodbc版本可能偏老,在Anaconda Prompt里执行
conda update pyodbc更新一下(这属于Anaconda自带库的更新,不算安装外部库),老版本的pyodbc对OLAP驱动的支持可能有bug。
内容的提问来源于stack exchange,提问作者Analytics_A
相关产品推荐
相关产品推荐

