Power BI REST API

API参考文档:https://docs.microsoft.com/en-us/rest/api/power-bi/
当我们的本地版Power BI Desktop将报表发布到云上工作区后(通过在线版可以查看)https://app.powerbi.com
我们想通过PQ针对云上的数据报表做点事儿怎么玩?
条件:Premium账号
然后你得建个应用,去哪儿建是个问题,我曾经尝试过在Azure里面建立应用,貌似水土不服无法直接用PQ拿到Token授权,你熟练后应该也可以直接在AZURE里面弄,,,
这里我推荐大家去下面这个网址注册应用:
https://dev.powerbi.com/apps
用你自己的Power BI账号登陆上面网址,
file
特别注意应用对报表的使用权限设置,你自己勾选好,,,
file
注册完注意保存应用信息(Application ID和Application secret):
file
然后就开始办正事儿了,,,,
先获取调用云数据的授权Token:

= "Bearer "&Json.Document(Web.Contents("https://login.microsoftonline.com/common/oauth2/token",
[
Content=Text.ToBinary(Uri.BuildQueryString([grant_type="password",
scope="openid",
client_id="你刚注册的Application ID",
username="你的Power BI账号,如我的是PowerQuery@pqfans.com",
password="Power BI账号对应的密码(注意不是Application secret)",
resource="https://analysis.windows.net/powerbi/api"]))]))[access_token]

此时将返回Authorization授权token供下面的API数据接口调用。
先测试下接口吧,如果你不会使用接口读取相关报表信息,可以先去在线版看看报表各模块在网址URL中参数的变化,几个常见参数groups、dashboards、datasets、reports、workbooks基本都可以在看到。
套路我已经帮你写好了:

let
Authorization= "Bearer "&Json.Document(Web.Contents("https://login.microsoftonline.com/common/oauth2/token",
[
Content=Text.ToBinary(Uri.BuildQueryString([grant_type="password",
scope="openid",
client_id="********************",
username="*******************",
password="*****************",
resource="https://analysis.windows.net/powerbi/api"]))]))[access_token],
api接口="https://api.powerbi.com/v1.0/myorg/reports",
api调用=Json.Document(Web.Contents(api接口, [Headers=[Authorization=Authorization]]))
in
api调用

上面更多api接口参考开头的参考文档网址,里面有非常丰富的关于Power BI rest api接口介绍,,,
如果是Post方式请注意修改书写Headers及Content部分传递body参数
file


顺便把office365也撸一把?
我们知道office也是有隐式授权方式的,这就方便我们获取token从而进行接口调用,,,
登陆AZURE建立应用
https://go.microsoft.com/fwlink/?linkid=2083908
Azure Active Directory内可以查看租户信息:
https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/Overview
比如我的目录(租户) ID:51a58d6c-4fcf-4b75-8608-d00bf7f244d5
下面可以查看租户内azure建立的所有应用(没有就新建)
https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredApps
建立应用(客户端)获得:
client_id:8e****09
client_secret=_0****0Nj~-~b****6
api://8e35557b-24c9-42c0-bf76-2687e72eaf09
当然client_secret也可以在具体app应用下设置客户端密码及使用期限:
https://portal.azure.com/#blade/Microsoft_AAD_RegisteredApps/ApplicationMenuBlade/Credentials/appId/8e****************************09/isMSAApp/
你可以设置应用的权限:
https://portal.azure.com/#blade/Microsoft_AAD_RegisteredApps/ApplicationMenuBlade/CallAnAPI/appId/8e****************************09/isMSAApp/
身份验证里面可以配置回调地址:
https://portal.azure.com/#blade/Microsoft_AAD_RegisteredApps/ApplicationMenuBlade/Authentication/appId/8e*****************************09/isMSAApp/

确保账号登陆授权
OAuth 2.0 客户端凭据授予:使用共享机密访问令牌请求

let
body="client_id=8e********************************09
&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default
&client_secret=_0*****************************j~-~*************
&grant_type=client_credentials",
token="Bearer "&Json.Document(Web.Contents("https://login.microsoftonline.com/51a58d6c-4fcf-4b75-8608-d00bf7f244d5/oauth2/v2.0/token",[Headers=[#"Content-Type"="application/x-www-form-urlencoded"],Content=Text.ToBinary(body)]))[access_token]
//或者token="Bearer "&Json.Document(Web.Contents("https://login.windows.net/51a58d6c-4fcf-4b75-8608-d00bf7f244d5/oauth2/token",[Headers=[#"Content-Type"="application/x-www-form-urlencoded"],Content=Text.ToBinary(body)]))[access_token]
in
token

我要是很懒就直接上:
https://login.live.com/oauth20_authorize.srf?client_id=8e*************************09&scope=Files.ReadWrite.All&response_type=token&redirect_uri=你的回调地址

https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=8e*************************09&response_type=id_token&redirect_uri=https://www.baidu.com&scope=openid&response_mode=fragment&state=12345&nonce=678910
配置权限有些是需要域管理员授权的:
https://login.microsoftonline.com/51a58d6c-4fcf-4b75-8608-d00bf7f244d5/adminconsent?client_id=8e****************************09&state=12345&redirect_uri=https://www.baidu.com
参考:https://docs.microsoft.com/zh-cn/graph/?view=graph-rest-1.0

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