В нашем случае это работает, встраивая olapR-код в T-SQL в RODBC-Code.
library(RODBC)
my_server="<server>"
my_db="<database>"
my_username="<myusername>"
my_pwd="<mypassword>"
db <- odbcDriverConnect(paste0("DRIVER={SQL Server};
server=",my_server,";
database=",my_db,";
uid=",my_username,";
pwd=",my_pwd))
sql="exec sp_execute_external_script
@language =N'R',
@script=N'
library(olapR)
cnnstr <- \"Data Source=<server>; Provider=MSOLAP; initial catalog=<AnalysisService>; User Id=<domain>\\\\<user>; Password=<myPassword>\"
olapCnn <- OlapConnection(cnnstr)
mdx <- \" <MDX-Query> \"
OutputDataSet <- execute2D(olapCnn, mdx)';"
df <- sqlQuery(db,sql)
Обратите внимание на четырехкратную обратную косую черту в домене \ user.
Обратите внимание, что логин сервисов анализа не обязательно совпадает с логином SQL
Обратите внимание, что пользователь SQL должен иметь права на выполнение внешних сценариев:
GRANT EXECUTE ANY EXTERNAL SCRIPT TO [<user>]
Его можно улучшить еще больше, если использовать оператор «с наборами результатов», но он работает.