最近做了一个PowerBI报表嵌入内部web应用系统的项目,分享一下主要步骤以及踩坑记录。
微软官网完整教程这里:https://learn.microsoft.com/zh-cn/power-bi/developer/embedded/embedded-analytics-power-bi
以下是我自己总结的主要步骤(仅供大家参考):
1. 你要付费买一个powerBI的账号。
2. 用这个powerBI账号登录 Azure 门户。
3. 在Azure 门户里选择 “应用注册” ,如果没有,就全局搜索一下。
4. 注册的时候需要特别注意一个地方,“账户类型” ,简单说,如果你希望web端用户每次进去都需要自己的powerBI账号登录查看报表,那就选择“仅此组织目录”。如果希望web端用户不需要登录即可查看报表,那就选择“任何组织目录”,就是选第一个和第二个的区别。
官方的说法是叫 “为组织嵌入内容” 和 “为客户嵌入内容”,区别就是登录不登录的问题。当然,对于这俩个类型,官方github给出的代码示例也不一样,比如你选择为“为客户嵌入内容” 官方不提供react版本代码。但其实自己也可以实现。
5. 在Azure 上 “应用注册” 好后,需要给这个应用赋予一定的访问权限,比如powerBI api的权限。
6. 在Azure 上 “应用注册” 好后,权限也设置完成后,需要复制这个应用的clientId、秘钥、租户ID等信息,给web端使用。
7. PowerBI客户端建立报表,发布报表,这个步骤相信会PowerBI的不用多说了。
8. PowerBI客户端报表完成后,需要去设置里面开启允许 应用访问 API。
9. 开始开发嵌入报表的web系统,我这边采用的是C# web api技术提供报表的后台服务,前端采用react + antd 技术。当然,你可以可以根据自己公司的技术要求,比如Java、python都可以。
主要的代码逻辑为:
- 复制Azure 上注册的 “应用” clientID 和秘钥去请求微软OAuth2身份验证接口,拿到 "访问token"
- 用这个"访问token" 去 请求powerBI的接口,获取“嵌入token"
- 把“嵌入token" 传到前端的powerBI报表组件中进行渲染
最终效果:(有问题可以给我留言)