精品丨PowerBI负载测试和容量规划

当选择Power BI作为业务报表平台时,如何判断许可证的选择是否符合业务需求,价格占了主导因素。
Power BI的定价是基于SKU和服务器内核决定的,但是很多IT的负责人都不确定自己公司业务具体需要多少。
不幸的是,Power BI的容量和预期使用量的比率很难进行量化的评估。
注:本文非原创,是搬运过来的,原文链接[1]在文章末尾。
例如:
一家公司可能有一个非常大的数据模型,需要占用大量的内存和CPU来进行长时间的刷新,高峰期有20个用户,每小时刷新一次,查询都非常简单,并且允许查询折叠。
另一家企业可能有6个较小的数据模型,高峰期有950个用户,每天刷新,数据模型的查询都非常非常复杂。这些相关元素都会影响后台资源的使用情况,使得预测总体资源并作为许可证选择的依据这件事变得几乎是不可能的。
值得庆幸的是,内存负载测试可以给我们提供一个良好的参照依据。
本文将介绍如何对你的内存进行负载测试、负载测试的规划要素以及如何理解负载测试的结果。
先决条件
-
具备权限,可以访问Premium容量利用率和指标应用程序/报表 (利用率和指标报表[2])
-
具备权限,可以访问你想测试的报表
-
PC需要足够的CPU和内存来运行并发测试时的多浏览器窗口
-
足够的权限来运行PowerShell
(即以管理员身份运行) -
负载测试工具[3]
(说明在后面)
搭建&测试
-
导航到负载测试工具的GitHub[4],下载包含PowerShell脚本的zip文件。负载测试工具有两个选项,默认测试 “最坏的情况”,即所有用户同时登录,并不断点击过滤器,从而迫使Power BI忽略其缓存。
现实加载测试工具[5]的操作类似于默认加载测试工具,但它测试的不是初始加载时间,而是最终用户可能会使用的可编程功能,如更改切片器、筛选器和浏览书签,并在操作之间留出一些 “思考时间”。
在本演示中,我们将使用标准负载测试工具,以保持简单。
有关使用实际负载测试工具的进一步说明,请参阅 ReadMe 文件。注意:
此PowerShell脚本包含一个未签名的PowerShell脚本。必须首先使用Set-ExecutionPolicy Unrestricted命令才能允许运行未签名脚本。
它还要求从此处安装[6] “MicrosoftPowerBIMgmt” Power BI PowerShell模块。

- 将文件解压缩到桌面(或虚拟机)上的文件夹中,然后导航到Initiate_Load.ps1文件。
右键单击该文件,在PowerShell中运行。


- PowerShell脚本将引导你完成一些提示设置:
-
你想配置多少个报表?这个会影响并发ping报表的数量。
- 请记住,你可以在相同的PowerShell窗口中ping不同工作区的报表。输入一个数字,然后回车。
-
身份验证
- 会弹出一个登录窗口,需要登录并且访问你想要测试的工作区
-
从列表选择工作区索引
- 在需要进行负载测试的报表所在的工作区旁边输入数字,然后回车。
-
从列表选择报表索引
- 在需要进行负载测试的报表旁边输入数字,然后回车。
-
过滤需要的过滤表、过滤列、过滤列中的最小值和最大值
- 这是脚本绕过Power BI服务器中缓存特性的方式。通过提供表、列、最小值和最大值,脚本能够将不同的过滤上下文传递加载报表。
- 建议使用与整个数据模型交互的日期表或事实表,并使用数字字段
(最小值和最大值对文本字段没有意义)。 - 确保变量和逗号之间没有空格。
例如:
我有一张名为“Invoice Date”的表,存在名为“MonthsAgo”的列,我想对其进行过滤,则输入“InvoiceDate.MonthsAgo,0,4”。 -
输入要为此报表启动的实例数
- 这是当ping报表时,打开浏览器窗口的数量。输入一个数字,然后回车。
- 建议从10开始,然后逐步升级测试,避免因为窗口数量太多造成电脑崩溃。
-
要启动配置好的报表么?[y/n]
- 如果上面的配置没有任何问题,那么输入“y”就可以了。
- 如果需要终止测试的运行,那么输入“n”。
-
如果要测试数据集刷新是否会影响用户体验(反之亦然),请进入Power BI在线服务,并手动刷新正在进行负载测试报表的数据集。
虽然负载测试工具适合测试交互操作,但是一些后台操作需要在工具外完成。
有一些Rest Api[7]可以触发Power BI数据集刷新,本文不涉及这些。 -
如果浏览器窗口的数量超过了电脑的内存容量,则窗口会超时,需要单独刷新浏览器页面以使它们再次运行。
- 建议一次只允许10个页面处于活动状态。
- 注意在每个窗口的左上角有一个小提示。
- 这个是提醒该窗口ping Power BI服务的次数。
- 要停止每个窗口的ping,需要单独关闭每个窗口。
- 所有的窗口将在初始脚本运行一小时后超时,因为API生成的令牌将在一小时后过期。

负载测试到现在已经完成!需要等待大约45分钟。然后手动刷新容量和指标报表的数据集。
容量规划注意事项
Power BI容量规划和管理是一项艰巨的任务。
微软建议根据Power BI项目(数据集、数据流等)的大小来设置容量大小,因为这个直接影响SKU内的操作速度(提前规划容量[8])。
这是一个很好的建议,但不幸的是,这种方法不适合数据总量小且交互频率非常高的项目。
例如:
假设有一个经过认证的数据集和八个使用该数据集的报表。
每个报表都有20-30人观看,因为现在是月底,所有的分析师、客户经理和高管都在用这些报表的截图准备他们的汇报。
这时候此数据集(以及容量)的负载就像有160-240个用户与数据集交互一样。
现在把它放大——如果有100个人在看每份报表。
针对此数据集/项目的使用会成倍增长,因此经过优化的认证数据集对CPU的压力要比只有一个报表的数据集大得多。
这就是为什么在评估最佳SKU/CPU的时候,必须同时考虑后台操作和交互操作的原因。
Power BI中的容量由以下几个变量决定:
- 使用的数据模型的模式和大小(后台和交互操作)
- 所需查询的数量和复杂性(后台操作)
- 应用程序每小时的使用情况(交互式操作)
- 数据刷新频率和持续时间(后台操作)
值得庆幸的是,Gen2指标应用程序根据这些变量提供了对容量当前状态分析。
结果分析
Premium容量利用率和指标报表提供了前14天或28天的容量使用情况的可视化报表。
此报表与容量度量本身非常相似,可能非常复杂且难以理解。
微软已经提供了一些关于该报表内容的说明,不过回归到上面所做的负载测试结果相关。
在开始之前,请确保刷新了Premium容量利用率和指标报表的数据集(测试结束后需要等待45分钟,以确保测试结果数据进入到报表中)。

进入报表后,要将报表数据范围缩小到最新测试的日期,可以通过页面的过滤器窗格设置“所有页面过滤”,日期过滤到测试的日期。

如果进行了多轮测试,那么通过此报表可以了解每个测试节点的更多信息。
总览页面右上角的图表对于了解在测试过程中是否有测试导致CPU峰值超过了限制非常有效。
例如:
进了3次测试,但是只有一次导致CPU峰值达到了168%,要了解具体的细节,可以通过Power BI的钻取功能下钻到细节中去查看。


这是报表中我最喜欢的部分。在这个页面中,可以看到在过去24小时内,除了所有后台操作之外,每隔30秒内发生的交互操作的数量。


在评估可用容量负载时,了解当前SKU的限制非常重要。
在示例中,分配的SKU是A1,它允许30s的CPU容量,了解了这个之后,来看看611个交互操作造成了多少秒的CPU时间。

50.6秒,导致容量使用达到了169.98%。
因为使用了负载测试工具,所以所有这些交互的操作都代表Power BI用户。
但是在生产环境中,需要判断30s的CPU容量允许多少个用户与报表进行交互过滤。
值得庆幸的是,这种高强度的交互并没有影响报表的加载,也没有造成服务故障,不过如果想一直保持良好的运行状况,可以根据情况扩展容量。
在示例中,后台交互(刷新数据模型)在过去24小时内仅占容量的0.53%。
不过需要警惕的是,虽然CPU支持的秒数比交互操作要大得多,但是后台的一些操作也是包含在24小时内的框架下计算的。

如果一次测试多个数据集,建议按Artifact排序,然后按住shift键,且按CPU字段交叉排序。
这样,就可以判断一个数据集是否比另一个数据集消耗更多的资源(查看平均CPU秒数来判断)。

点击可视化视图右上角的三个点,可以将这些结果导出到excel或CSV中,以便进一步检查或将多个测试的结果堆叠起来并进行二次分析。


对于上面的示例,建议增加SKU以获得更多CPU,来容纳更多的用户,并保证用户可以进行大量的交互操作。
除此之外,还可以检查测试的数据模型,对接的数据源最好有折叠查询[9]和严谨的星型模型[10]来减轻CPU的压力。
引用链接
[1] 原文链接: https://dataonwheels.wordpress.com/2022/02/22/power-bi-embedded-stress-testing-capacity-planning/
[2] 利用率和指标报表: https://learn.microsoft.com/en-us/fabric/enterprise/metrics-app-install?tabs=1st
[3] 负载测试工具: https://github.com/microsoft/PowerBI-Tools-For-Capacities
[4] GitHub: https://github.com/microsoft/PowerBI-Tools-For-Capacities
[5] 测试工具: https://github.com/microsoft/PowerBI-Tools-For-Capacities/tree/master/RealisticLoadTestTool
[6] 此处安装: https://learn.microsoft.com/en-us/powershell/power-bi/overview?view=powerbi-ps
[7] Rest Api: https://learn.microsoft.com/en-us/rest/api/power-bi/datasets/refresh-dataset
[8] 提前规划容量: https://learn.microsoft.com/en-us/power-bi/enterprise/service-premium-capacity-manage
[9] 折叠查询: https://learn.microsoft.com/en-us/power-query/query-folding-basics
[10] 星型模型: https://learn.microsoft.com/en-us/power-bi/guidance/star-schema


相关文章:
精品丨PowerBI负载测试和容量规划
当选择Power BI作为业务报表平台时,如何判断许可证的选择是否符合业务需求,价格占了主导因素。 Power BI的定价是基于SKU和服务器内核决定的,但是很多IT的负责人都不确定自己公司业务具体需要多少。 不幸的是,Power BI的容量和预期…...
【算法-PID】
算法-PID ■ PID■ 闭环原理■ PID 控制流程■ PID 比例环节(Proportion)■ PID 积分环节(Integral)■ PID 微分环节(Differential) ■ 位置式PID,增量式PID介绍■ 位置式 PID 公式■ 增量式 PI…...
ros rosbag使用记录
rosbag: 1. rosbag record -a 记录当前所有消息(较少用)2. rosbag record -O bag_name.bag /topic 记录指定消息3. rosbag info 查阅bag文件信息4. rosbag play 播放bag文件内容5. python script 查看bag文件内容参考: 1. rosbag record -a 记…...
WebKit结构揭秘:探秘网页渲染的魔法之源
一、WebKit之心:渲染引擎的魔力 WebKit的渲染引擎是其核心所在,它犹如一位技艺高超的魔法师,将HTML、CSS和JavaScript的魔法咒语转化为绚丽的网页画面。它解析代码,绘制页面,让网页内容跃然屏上,展现出无尽…...
VSCode美化
今天有空收拾了一下VSCode,页面如下,个人觉得还是挺好看的~~ 1. 主题 Noctis 色彩较多,有种繁杂美。 我使用的是浅色主题的一款Noctis Hibernus 2. 字体 Maple Mono 官网:Maple-Font 我只安装了下图两个字体,使…...
Runes 生态一周要览 ▣ 2024.3.25-3.31|Runes 协议更新 BTC 减半在即
Runes 生态大事摘要 1、Casey 发布了 Runes 协议文档 RUNES HAVE DOCS,Github 代码库更新到 ord 0.17.0 版本,Casey 表示符文是一个“严肃”的代币协议。 2、Casey 公布了第一个硬编码的创世符文「UNCOMMONGOODS」 3、4月7日香港沙龙|聚焦「…...
瘦身Spring Boot应用(thinJar)
瘦身Spring Boot应用(thinJar) 简介 我们使用Spring Boot提供的spring-boot-maven-plugin打包Spring Boot应用,可以直接获得一个完整的可运行的jar包,把它上传到服务器上再运行就极其方便。 但是这种方式也不是没有缺点。最大的缺点就是包太大了&…...
备战蓝桥杯---贪心刷题1
话不多说,直接看题: 本质是一个数学题: 我们令xi<0表示反方向传递,易得我们就是求每一个xi的绝对值之和min,我们令平均值为a爸。 易得约束条件: x1-x2a1-a,x2-x3a2-a..... 解得x1x1-0,x2x1-((n-1)*a-a2-...an)。…...
《数据结构学习笔记---第九篇》---循环队列的实现
文章目录 1.循环队列的定义 2.循环队列的判空判满 3.创建队列并初始化 4.入队和出队 5. 返回队尾队首元素 6.释放循环队列 1.循环队列的定义 定义:存储队列元素的表从逻辑上被视为一个环。 我们此次实现的循环队列,采用顺序表 typedef struct {int…...
前端调试工具之Chrome Elements、Network、Sources、TimeLine调试
常用的调试工具有Chrome浏览器的调试工具,火狐浏览器的Firebug插件调试工具,IE的开发人员工具等。它们的功能与使用方法大致相似。Chrome浏览器简洁快速,功能强大这里主要介绍Chrome浏览器的调试工具。 打开 Google Chrome 浏览器,…...
vue 加 websocket 聊天
<template><div style="height: 100%; width: 100%; background-color: #fff"><div class="wrap"><!-- 头部 --><div class="titleBox"><imgsrc="@/assets/image/avatar.png"style="argin: 10p…...
uniapp通过蓝牙传输数据 (ios)
在uni-app中,可以通过uni-ble(uni-app官方提供的蓝牙插件)来实现iOS设备上的蓝牙数据传输。 首先,确保已在uni-app的manifest.json文件中添加uni-ble插件的配置: "permission": { "scope.userLocati…...
docker搭建CI/CD环境配置过程中的常见问题
一、Jenkins 1、pull镜像问题 docker pull jenkins/jenkins:lts Using default tag: latest Trying to pull repository docker.io/library/centos ... Get https://registry-1.docker.io/v2/library/centos/manifests/latest: Get https://auth.docker.io/token?scoperepo…...
实验四 微信小程序智能手机互联网程序设计(微信程序方向)实验报告
请编写一个用户登录界面,提示输入用户名和密码进行登录; 代码 index.wxml <view class"user"> <form bindreset""> <view>用户名:</view><input type"text"name""/>…...
WPF —— 关键帧动画
wpf动画类型 1<类型>Animation这些动画称为from/to/by动画或者叫基本动画,他们会在起始值或者结束值进行动画处理,常用的例如 <DoubleAnimation> 2 <类型>AnimationUsingKeyFrames: 关键帧动画,功能要比from/to这些动画功…...
Taro + vue3 小程序封装标题组件
分为没有跳转页面的title组件和 有跳转页面的title组件 我们可以把这个封装成一个组件 直接上代码 <template><div class"fixed-title-container"><div class"box"><div class"icon" v-if"isShow" click"…...
babyAGI(6)-babyCoder源码阅读2任务描述部分
废话不多说,我们直接看task的prompt 这里需要注意的是,每个openai_call的temperature都不相同,这也是开发程序时需要调整和关注的一点 1. 初始化代码任务agent 作为babycoder的第一个angent,整个prompt编写的十分值得学习 整个p…...
生成式语言模型预训练阶段验证方式与微调阶段验证方式
生成式语言模型,如GPT-3、BERT等,在预训练和微调阶段都需要进行验证以确保模型性能。下面分别介绍这两个阶段的验证方式: 预训练阶段的验证: 预训练阶段通常使用大量未标注的文本数据来训练模型,以学习语言的一般特性。…...
flink on yarn
前言 Apache Flink,作为大数据处理领域的璀璨明星,以其独特的流处理和批处理一体化模型,成为众多企业和开发者的首选。它不仅能够在处理无界数据流时展现出卓越的实时性能,还能在有界数据批处理上达到高效稳定的效果。本文将简要…...
用TOMCAT部署web项目教程
文章目录 引言I 使用webapps文件夹II 利用server.xmlIII 自定义配置文件IV 预备知识4.1项目的一般结构4.2 contex标签4.3 IDE部署4.4 配置Tomcat服务引言 在开发阶段,一般使用IDE如MyEclipse来部署web项目,不要忘记手动部署的三种方式。 I 使用webapps文件夹 将项目文件夹…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
