如何让R与PowerBI中的数据库建立连接?
直接用R连接PowerBI相关数据源的方案
一、最优方案:直接连接PowerBI的原始数据源
如果你的PowerBI数据来自外部数据库(如SQL Server、MySQL、PostgreSQL等),跳过PowerBI直接让R连接这个原始数据库是最高效的方式,完全适配500万级别的数据量:
- 对应数据库的R包使用示例:
- SQL Server:用
odbc包(推荐,支持现代驱动)library(odbc) # 建立数据库连接 conn <- dbConnect(odbc(), Driver = "ODBC Driver 17 for SQL Server", Server = "你的服务器地址", Database = "目标数据库名", UID = "登录用户名", PWD = "登录密码") # 直接读取整张表,或用SQL筛选数据减少内存占用 hours_data <- dbGetQuery(conn, "SELECT * FROM 员工工时表 WHERE 统计月份 = '2024-05'") # 用完断开连接 dbDisconnect(conn) - MySQL:使用
RMariaDB包;PostgreSQL:使用RPostgres包,逻辑与上述一致,都是建立连接后直接拉取数据。
- SQL Server:用
二、连接本地PowerBI Desktop的.pbix文件
如果必须从.pbix文件取数,可采用以下两种方式:
- 连接.pbix内置的Tabular数据模型
PowerBI Desktop的.pbix文件包含一个本地Analysis Services Tabular模型,用olapR包直接连接:library(olapR) # 先打开目标.pbix,在PowerBI的「帮助→关于」中找到本地实例端口(如localhost:55555) conn_str <- "Data Source=localhost:55555;Catalog=你的PBIX文件名" olap_conn <- OlapConnection(conn_str) # 用MDX查询提取数据,按需调整维度和度量 mdx_query <- "SELECT {[Measures].[工时]} ON COLUMNS, {[员工].[员工ID].[员工ID].MEMBERS} ON ROWS FROM [模型]" hours_data <- executeMD(olap_conn, mdx_query) - 直接提取.pbix中的原始数据
将.pbix后缀改为.zip,解压后找到DataModel目录,用read.pbix包直接读取:library(read.pbix) pbix_content <- read_pbix("你的文件路径/工时数据.pbix") # 提取指定表的数据集 hours_data <- pbix_content$tables$员工工时表$data
三、连接PowerBI Service云端数据集
如果数据存储在PowerBI云端服务,通过PowerBI REST API结合R调用:
- 先在PowerBI Service中完成应用注册,获取客户端ID、密钥及租户ID,并授予数据集读取权限
- 用
httr包实现API调用:
也可以使用library(httr) library(jsonlite) # 获取访问令牌 token_res <- POST( url = "https://login.microsoftonline.com/你的租户ID/oauth2/token", body = list( grant_type = "client_credentials", client_id = "你的客户端ID", client_secret = "你的客户端密钥", resource = "https://analysis.windows.net/powerbi/api" ), encode = "form" ) access_token <- fromJSON(content(token_res, "text"))$access_token # 读取指定数据集的表数据 dataset_id <- "目标数据集ID" table_name <- "员工工时表" data_res <- GET( url = paste0("https://api.powerbi.com/v1.0/myorg/datasets/", dataset_id, "/tables/", table_name, "/rows"), add_headers(Authorization = paste("Bearer", access_token)) ) hours_data <- fromJSON(content(data_res, "text"))$valuepowerbiR包简化API调用流程,该包封装了常用的PowerBI服务交互逻辑。
内容的提问来源于stack exchange,提问作者Grant Weaver
相关产品推荐
相关产品推荐

