You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何调整PowerShell代码单次调用Power BI API以规避速率限制

解决Power BI API速率限制导致的Keyblocker error问题

你的代码当前每读取一行SQL数据就调用一次Power BI API,频繁请求触发了API速率限制,这才出现了Keyblocker error。下面是修改后的代码,先把所有SQL数据批量存入数组,再仅调用一次API完成推送:

$dataSource = '******' #Server Name
$userName = '******' #SQL User Name
$password = '************' #SQL User Password
$database = 'Production' #Database Name

# 使用SQL Server认证的连接字符串
$connectionString ="Server=$dataSource;Database=$database;trusted_connection=false; user id =$userName;Password=$password;Integrated Security=False"

$connection = New-Object System.Data.SqlClient.SqlConnection
$connection.ConnectionString = $connectionString
$connection.Open()

$query = 'SELECT [data],[datetime], [id], [source_id] FROM [dbo].[vwResawLine2FPM]'
$command = $connection.CreateCommand()
$command.CommandText = $query
$dataset = $command.ExecuteReader()

$endpoint = "*****ENDPOINT*****"

# 创建空数组,用来批量存储所有数据对象
$allPayloads = @()

# 循环读取SQL数据,仅将对象存入数组
while ($dataset.Read()) {
    $payload = @{
        "data"       = $dataset['data']
        "datetime"   = $dataset['datetime']
        "source_id"  = $dataset['source_id']
        "id"         = $dataset['id']
    } 
    $allPayloads += $payload
}

# 一次性推送所有数据到Power BI
if ($allPayloads.Count -gt 0) {
    $jsonBody = ConvertTo-Json $allPayloads -Depth 10
    Invoke-RestMethod -Method Post -Uri $endpoint -Body $jsonBody -ContentType "application/json"
}

$connection.Close()
$connection.Dispose()

核心修改说明:

  • 新增$allPayloads = @()空数组,专门批量存储所有SQL返回的数据对象
  • 原while循环仅负责将每行数据转为对象并添加到数组,不再单独发起API请求
  • 循环结束后,将整个数组转为JSON(指定-Depth 10避免嵌套对象序列化失败),然后**仅调用一次Invoke-RestMethod**完成全部数据推送
  • 补充ContentType参数,确保Power BI能正确识别JSON格式的请求体

内容的提问来源于stack exchange,提问作者villasenorbritt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 20:05:38