pbixr 包操作 pbix

R语言在不久前出过一个操作pbix的package:pbixr
参考:
https://cran.r-project.org/web/packages/pbixr/pbixr.pdf
https://cran.r-project.org/web/packages/pbixr/vignettes/explore.html
我大致猜测一下分两大块:
1.本地文件不打开读取数据:类似于将pbix处理为zip文档查看方式;
2.关于打开状态的pbix数据读取:类似Ado的olap查询方式、中间部分功能还调用了powershell。
他目前支持MDX和DAX查询语句、类似ssas接口相关功能。
我就纳闷儿了,都用了ps为什么不做全套类似tabular editor应用,直接连.net干啊,,,
从参考文档看该包的使用注意事项:
版本限制 Depends R (>= 3.2.0), dplyr
相关依赖:
Imports formatR, xml2, jsonlite, zip, utils, textclean, stringr
Suggests knitr, rmarkdown, testthat (>= 2.1.0), RCurl, ggplot2,
ggraph, igraph, imager, tidyr
这个在你安装这个包的时候会自动给你装好,不用担心。
安装导入两句话:

install.packages("pbixr")
library(pbixr)

安装的时候尽量选择中国区的镜像源
你可以随时查看该包的相关帮助文件:

help(package="pbixr")

当你打开pbix时可以获取ssas分析服务相关服务器地址端口号:

f_get_connections()

file
file

f_query_datamodel("evaluate Sales",paste("Provider=MSOLAP.8;Data Source=localhost:",f_get_connections()[1,2],sep=""))

file

f_query_datamodel(paste0("select MEASURE_NAME, EXPRESSION, MEASUREGROUP_NAME ","from `$SYSTEM.MDSCHEMA_MEASURES"),
paste0("Provider=MSOLAP.8;Data Source=localhost:",f_get_connections()[1,2]))

file
你可以直接获取本地未打开pbix文档内的相关数据(类似改后缀为zip方式查看)

f_get_dama_m('C:/Users/Administrator/Desktop/EmbeddedContentExample.pbix', TRUE)

file
file
下面是我做的一部分笔记

获取图片信息
f_extract_images('C:/Users/Administrator/Desktop/test.pbix',"[.]png|[.]jpg")

plot(imager::load.image(f_extract_images('C:/Users/Administrator/Desktop/test.pbix',"[.]png|[.]jpg")[[1]]), main = 图名称)

获取DataMashup二进制文件
f_get_dama('C:/Users/Administrator/Desktop/test.pbix')

DataMashup二进制存储区块信息
f_get_dama_index('C:/Users/Administrator/Desktop/test.pbix')
f_get_dama_index('C:/Users/Administrator/Desktop/test.pbix')[1]   //[1] $zip_start_end   [2] $zip_header_start  [3] $xml_start_end  [4] $datamashup_end

提取DataMashup内部相关类型二进制数据信息
f_get_dama_file('C:/Users/Administrator/Desktop/test.pbix','xml', f_get_dama_index('C:/Users/Administrator/Desktop/test.pbix'))  // "zip" "ziponly"  "hf"
f_get_dama_file('C:/Users/Administrator/Desktop/test.pbix','hf', f_get_dama_index('C:/Users/Administrator/Desktop/test.pbix'))

提取DataMashup内的M查询语句,第二参数指定是否删除临时压缩文件。
f_get_dama_m(input_file_pbix, remove_temp)

f_get_dama_xml_details('C:/Users/Administrator/Desktop/test.pbix')
xml_start <-f_get_dama_xml_details('C:/Users/Administrator/Desktop/test.pbix')[[1]][1]/2+1或者f_get_dama_xml_details('C:/Users/Administrator/Desktop/test.pbix')$length[1]/2+1
xml_end <-f_get_dama_xml_details('C:/Users/Administrator/Desktop/test.pbix')[[3]][1] 或者f_get_dama_xml_details('C:/Users/Administrator/Desktop/test.pbix')$xml_length
dama_xml<-f_get_dama_xml('C:/Users/Administrator/Desktop/test.pbix',xml_start,xml_end)
f_get_dama_xml_data(dama_xml) //获取DataMashup内xml信息
f_search_xml(dama_xml,"//ItemLocation[ItemType = \"Formula\"]//ItemPath", 1) //获取DataMashup内xml信息中的指定节点内容,此时等于f_get_dama_xml_data(dama_xml)[3]或f_get_dama_xml_data(dama_xml)$steps

获取zip文档内部所有路径文件相关信息
f_get_pbix_info('C:/Users/Administrator/Desktop/test.pbix')
可以参考上一步得到的路径,引用指定路径文件信息
f_get_pbix_fir('C:/Users/Administrator/Desktop/test.pbix','Report/Layout') //按类似文件夹索引提取指定路径文件二进制信息

读取pbix内的json文件信息
f_read_any_json('C:/Users/Administrator/Desktop/test.pbix',json文件相对路径地址(f_get_pbix_info可以查看), gsub1, gsub2)  后两个参数貌似是支持正则替换 如".*sections"替换为"{\"id\":0,\"sections"

f_read_layout('C:/Users/Administrator/Desktop/test.pbix',".*sections","{\"id\":0,\"sections")  将Report/Layout文件json化读取?
打包与解压
f_compress_pbix('C:/Users/Administrator/Desktop/test2','C:/Users/Administrator/Desktop/test.pbix')
f_decompress_pbix('C:/Users/Administrator/Desktop/test.pbix','C:/Users/Administrator/Desktop/test2')

下面这个我这里没有测试成功,,,
f_remove_file('C:/Users/Administrator/Desktop/test.pbix','C:/Users/Administrator/Desktop/test','C:/Users/Administrator/Desktop/test2.pbix',"DataModel")

针对打开pbix文件做查询,支持MDX与DAX查询语句
f_query_datamodel(查询语句,Olap连接语句)
我都是用的本地pbix测试,你可以用云上服务器测试下f_query_datamodel

另外可以参考R语言的olapR包操作ssas实例
https://docs.microsoft.com/zh-cn/sql/machine-learning/r/ref-r-olapr?view=sql-server-ver15&viewFallbackFrom=sqlallproducts-allversions

https://docs.microsoft.com/zh-cn/sql/machine-learning/r/how-to-create-mdx-queries-using-olapr?view=sql-server-ver15

ocs <- OlapConnection("Data Source=localhost:端口号; Provider=MSOLAP; initial catalog=")
qry <- Query()
cube(qry) <- "[Model]"
columns(qry) <- c("[Measures].[度量值1]", "[Measures].[度量值2]")
rows(qry) <- c("[维度表].[列].[列].MEMBERS") 
slicers(qry) <- c("[筛选表].[列].[值]")
result1 <- executeMD(ocs, qry)

*github不够丝滑怎么办?

https://www.ipaddress.com查一下raw.githubusercontent.com的ipv4地址。
使用管理员权限打开C:\Windows\System32\Drivers\etc文件,配置文件:
# github
204.232.175.78 http://documentcloud.github.com
207.97.227.239 http://github.com
204.232.175.94 http://gist.github.com
107.21.116.220 http://help.github.com
207.97.227.252 http://nodeload.github.com
185.199.111.133 http://raw.githubusercontent.com
107.22.3.110 http://status.github.com
204.232.175.78 http://training.github.com
207.97.227.243 http://www.github.com

道高一尺 魔高一丈
https://pbihub.cn/users/44
M与DAX的恩怨纠葛