Power BI Embedded自动缩放容量,为公司每个月节省上万元

时间:2024-10-28 07:08:53

哎,不知道今年行情怎么就这样了,大厂一边大批毕业生,一边大量招人。难道是今年的新人便宜?就连道哥(吴翰清,阿里P10,中国*黑客)都从阿里离职了,当年年少不懂学计算机,就是想当一名白帽子的。。。在上一篇文章中有介绍Power BI各个版本的功能差异,其中有介绍当人数超过80人时,从成本上讲是推荐Power BI Embedded的,Power BI Embedded不同的SKU价格也是不同的,具体使用哪个SKU价位层不止和使用人数有关,和报告的模型复杂度也是有关的,具体哪个容量符合使用,可以进行压力测试,可参考以下博客:Power BI Embedded: Stress Testing & Capacity Planning – Data on Wheels – Steve & Kristyna Hughes --- Power BI Embedded:Stress Testing & Capacity Planning – Data on Wheels – Steve & Kristyna Hughes ()[1]

比如高峰期有1000人同时访问,这时可能至少要A3容量才符合,但是下班时间,或者周末,可能最多才会有几十个人同时访问,这时可能A1容量就可以满足要求。微软Azure云服务最大的好处就是弹性的,可缩放,当需求量大量采用A3,需求量低时采用A1甚至暂时关闭都是可以的。我们可以手动在网页端进行容量的更改,但这并不够智能,人也不可能总是记得去更改容量。

Power BI Premium是支持自动缩放容量的,但是也是单独收费的Using Autoscale with Power BI Premium - Power BI | Microsoft Learn --- 将自动缩放与 Power BI 高级版结合使用 - Power BI |微软学习[2]

那么Power BI Embedded要怎么自动缩放容量呢?继续查找微软的文档,缩放 Power BI Embedded 容量 - Power BI | Microsoft Learn[3]文档显示是有REST API可供调用的

继续查看文档Capacities - Update - REST API (Azure Power BI Embedded) | Microsoft Learn --- 容量 - 更新 - REST API(Azure Power BI Embedded) |微软学习[4]那么剩下的问题就是调用API时相应的世纪互联相应的URL的是什么了,具体的对应可查看以下文档 中国区 Azure 开发人员指南 | Azure Docs[5] 这里主要用的就是这个url来更改Power BI Embedded的容量。

这里其实还走了弯路,因为一开始缩放容量时总是不成功,在Azure门户中查看活动日志,日志中显示的是这个地址,我就一直使用这个地址来请求缩放容量,其结果就是一直失败。。。

新建应用

登录Azure门户,进入到Azure Active Directory,然后选择应用注册

进行创建的应用,选择证书和密码,新建客户端密码,这里一定要注意及时保存,密码只在第一次创建时显示

创建安全组

同样进行Azure Active Directory,选择组,进去之后新建安全组

新建组之后,进去组,然后添加成员,成员即为上面创建的应用

Power BI Embedded资源添加管理权限

进行到Power BI Embedded资源界面,选择Power BI容量管理员,然后添加安全组为管理员

切换到访问控制,点击添加角色分配

我这里使用的是所有者角色,可根据具体需要选择合适的角色 ,之后在成员中添加上面创建的安全组,完成创建即可

Power BI中添加安全组

在Power BI门户中进入到管理门户,然后在允许服务主体使用Power BI API中加入上面创建的安全组

使用python来缩放容量

首先是获取token,获取token需要一些参数,比如租户id(租户id在Azure Active Directory的概述中可以查看,也可参考[[PowerBI REST API 进阶]]),应用id和应用密码用上面创建应用时的即可。这里还参考了 Assign Power BI workspaces to a capacity automatically – PBI Guy --- 自动将 Power BI 工作区分配给容量 – PBI Guy ()[6] 该博客的博主是微软的员工,去年有问题时也有邮件向他提问,他也是有邮件回复的,这里推荐下他的博客,很多干货的。

import requests

token_endpoint =  '//{tenant_id}/oauth2/token'
tenant_id =  ''
client_id =  ''
client_secret =  ''
data = {
     'grant_type':  'client_credentials',
     'client_id': client_id,
     'client_secret': client_secret,
     'resource':  '/'
}

response = (token_endpoint. format(tenant_id=tenant_id), data=data)
access_token = ()
token = access_token[ 'access_token']

获取token后就可以缩入容量了,相关参数可在Power BI Embedded订阅概述中查看,这里要注意代码中body参数添加了位置,位置也要改成自己的服务所在的位置

image.pngsubscription_id =  ''    #订阅id
resource_group = ''     #资源名称
capacity_name =  ''      #资源组
new_size =  'A3'
url =  f'/subscriptions/{subscription_id}/resourceGroups/{resource_group}/providers//capacities/{capacity_name}?api-version=2021-01-01'
headers = {
         'Content-Type':  'application/json',
         "Authorization":  "Bearer " + token
    }
body = {
     'sku': {
         'name': new_size,
        ' tier':  'PBIE_Azure'
    },
     'location': ' chinaeast'
}

response = (url, json=body,headers=headers)
if response.status_code ==  200:
     print(' Capacity size updated successfully')
else:
     print( f'Error: {}'")

数据工厂中设置定时任务

在数据工厂中刷新PowerBI数据集中就介绍当处理完ETL任务后,就刷新Power BI数据集,其中就有介绍怎么获取token,然后再调用REST API刷新Power BI数据集,那么同样的,我们也可以在数据工厂中使用同样的方法来缩放Power BI Embedded容量,并且可以设置解发器,不同时间段调整为不同的容量。

引用链接

[1] Power BI Embedded: Stress Testing & Capacity Planning – Data on Wheels – Steve & Kristyna Hughes --- Power BI Embedded:Stress Testing & Capacity Planning – Data on Wheels – Steve & Kristyna Hughes (): /2022/02/22/power-bi-embedded-stress-testing-capacity-planning/
[2] Using Autoscale with Power BI Premium - Power BI | Microsoft Learn --- 将自动缩放与 Power BI 高级版结合使用 - Power BI |微软学习: /en-us/power-bi/enterprise/service-premium-auto-scale
[3] 缩放 Power BI Embedded 容量 - Power BI | Microsoft Learn: /zh-cn/power-bi/developer/embedded/azure-pbie-scale-capacity
[4] Capacities - Update - REST API (Azure Power BI Embedded) | Microsoft Learn --- 容量 - 更新 - REST API(Azure Power BI Embedded) |微软学习: /zh-cn/rest/api/power-bi-embedded/capacities/update?tabs=HTTP
[5] 中国区 Azure 开发人员指南 | Azure Docs: /zh-cn/articles/guidance/developerdifferences
[6] Assign Power BI workspaces to a capacity automatically – PBI Guy --- 自动将 Power BI 工作区分配给容量 – PBI Guy (): /2022/09/22/assign-power-bi-workspaces-to-a-capacity-automatically/