很多用户需要将报表集成在自己的应用,而应用的身份体系是属于私有的应用体系。这时候我们如何来实现集成呢?以下就是整个模拟集成的过程。
准备工作
因为是模拟,所以先去创建一个目录服务。如果是真实环境就是直接一套ad,不需要这样操作。
在portal.azure.com上创建一个目录服务。点击新建,搜索Azure Active Directory。 创建目录

创建了一个模拟目录

创建用户

使用此用户去powerbi注册免费的pro测试账号
注册完成后可以登录
创建一个工作区


制作一个测试报表发布到工作区


在制作一些仪表盘,基本准备完成,现在需要在应用中:http://pbienbedded.azurewebsites.net 中集成报表。集成报表分为2种:第一是用户拥有数据,也就是集成时候需要用户登录授权访问。第二是应用拥有数据,就是直接打开即可集成。一般来说用户都需要这样的集成方式。
注册应用
首先我们需要注册应用才能进行授权。建议只用powerbi注册工具进行注册,工具链接如下
https://dev.powerbi.com/apps
在这里apptype 选择 Native app(不知道为什么,图片一致无法显示
注册成功后会生成一个clientid,在portal.azure.com上可以找到注册好的应用,这时候需要更多权限设置.找到注册好的应用,点击所需权限,会看到power bi service 和 ad的相关权限。分别点击,进行浏览,设置如下



完成后点击授予权限。

应用注册完成
下载测试代码
下载下面的测试代码, app owns data。
https://github.com/Microsoft/PowerBI-Developer-Samples/tree/master/App%20Owns%20Data
下载后更改web.config.更改相应的参数,关键是需要使用到前面生成的clientid,报表id,和groupid,指的是在powerbi上发布报表的工作区id和报表id,可以在浏览报表的时候浏览器的url中找到。比如我的可以是
https://app.powerbi.com/groups/b146685b-9c7b-4daf-89de-1f911595dcef/reports/303dfcdd-d3ad-4ba1-a906-2e4c64dd275d/ReportSection
这里的 b146685b-9c7b-4daf-89de-1f911595dcef 就是groupid
303dfcdd-d3ad-4ba1-a906-2e4c64dd275d 是报表reportId
pbiUsername 指的是powerbi的user,这里测试就是使用的注册的username。
实际生产中用户名和密码不会配置在这里。作为demo就将相应的内容写到了config。如果需要浏览报表列表等操作,也可以调用api
<add key="clientId" value="3d9812c5-6277-470a-b685-bb5ab92d18e2" />
<add key="groupId" value="b146685b-9c7b-4daf-89de-1f911595dcef" />
<!-- The id of the report to embed. If empty, will use the first report in group -->
<add key="reportId" value="303dfcdd-d3ad-4ba1-a906-2e4c64dd275d" />
<!-- Note: Do NOT leave your credentials on code. Save them in secure place. -->
<add key="pbiUsername" value=" " />
<add key="pbiPassword" value=" " />
配置好后发布应用,浏览即可得到集成效果




参考内容
使用javascript api https://github.com/Microsoft/PowerBI-javascript/wiki
更多的效果demo https://microsoft.github.io/PowerBI-JavaScript/demo/v2-demo/index.html
安全控制 https://docs.microsoft.com/zh-cn/power-bi/developer/embedded-row-level-security
令牌生成等都在 HomeController.cs 可以查看
// Create a user password cradentials.
var credential = new UserPasswordCredential(Username, Password);
// Authenticate using created credentials
var authenticationContext = new AuthenticationContext(AuthorityUrl);
var authenticationResult = await authenticationContext.AcquireTokenAsync(ResourceUrl, ClientId, credential);
容量规划
以上调用api的过程和使用测试过程,就没有Power BI Embedded这个服务的感觉。事实上是发布了微软发布了 Power BI Premium,这是一个基于容量的新许可模型,可提高用户访问、共享和分发内容方式的灵活性。 产品/服务还为 Power BI 服务提高其他可伸缩性和性能。
通过引入 Power BI Premium,Power BI Embedded 和 Power BI 服务开始进行融合以推动在应用中嵌入 Power BI 内容的进展。 这意味着,在嵌入内容时,将拥有一个 API 外围、一组一致的功能以及对最新 Power BI 功能(如仪表板、网关和应用工作区)的访问权限。
也就是说其实上面调用的API最后提供服务是Power BI Embedded来提供,由于是测试所以不需要去购买Power BI Embedded,在生产就需要安装需求进行规划购买。
可参考以下文档:
Microsoft Power BI Premium 白皮书
规划 Power BI Enterprise 部署白皮书
更多问题我们可以一起探讨。
联系方式:maxcloud@outlook.com ,
也可以访问www.maxbi.info获取更多信息。公众号信息同步




