哎,不知道今年行情怎么就这样了,大厂一边大批毕业生,一边大量招人。难道是今年的新人便宜?就连道哥(吴翰清,阿里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 (wordpress.com)[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] 这里主要用的就是management.chinacloudapi.cn这个url来更改Power BI Embedded的容量。

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

新建应用
登录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 (pbi-guy.com)[6] 该博客的博主是微软的员工,去年有问题时也有邮件向他提问,他也是有邮件回复的,这里推荐下他的博客,很多干货的。

token_endpoint = 'https://login.chinacloudapi.cn//{tenant_id}/oauth2/token'
tenant_id = ''
client_id = ''
client_secret = ''
data = {
'grant_type': 'client_credentials',
'client_id': client_id,
'client_secret': client_secret,
'resource': 'https://management.chinacloudapi.cn/'
}
response = requests.post(token_endpoint. format(tenant_id=tenant_id), data=data)
access_token = response.json()
token = access_token[ 'access_token']
获取token后就可以缩入容量了,相关参数可在Power BI Embedded订阅概述中查看,这里要注意代码中body参数添加了位置,位置也要改成自己的服务所在的位置

resource_group = '' #资源名称
capacity_name = '' #资源组
new_size = 'A3'
url = f'https://management.chinacloudapi.cn/subscriptions/{subscription_id}/resourceGroups/{resource_group}/providers/Microsoft.PowerBIDedicated/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 = requests.put(url, json=body,headers=headers)
if response.status_code == 200:
print(' Capacity size updated successfully')
else:
print( f'Error: {response.text}'")

数据工厂中设置定时任务
在数据工厂中刷新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 (wordpress.com): https://dataonwheels.wordpress.com/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 |微软学习: https://learn.microsoft.com/en-us/power-bi/enterprise/service-premium-auto-scale
[3] 缩放 Power BI Embedded 容量 - Power BI | Microsoft Learn: https://learn.microsoft.com/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) |微软学习: https://learn.microsoft.com/zh-cn/rest/api/power-bi-embedded/capacities/update?tabs=HTTP
[5] 中国区 Azure 开发人员指南 | Azure Docs: https://docs.azure.cn/zh-cn/articles/guidance/developerdifferences
[6] Assign Power BI workspaces to a capacity automatically – PBI Guy --- 自动将 Power BI 工作区分配给容量 – PBI Guy (pbi-guy.com): https://pbi-guy.com/2022/09/22/assign-power-bi-workspaces-to-a-capacity-automatically/