Асинхронное обновление REST API Power BI: ответ не включает поле местоположения, которое должно содержать refreshId

Я пытаюсь программно обновить набор данных Power BI Premium, отправив почтовый запрос в конечную точку API PBI: наборы данных//обновляет.

В документации (https://docs.microsoft.com/en-us/power-bi/connect-data/asynchronous-refresh) указано:  ответ также включает поле заголовка ответа местоположения, чтобы указать вызывающему абоненту на операцию обновления, которая был только что создан/принят. Расположение — это местонахождение нового ресурса, созданного по запросу, который включает в себя refreshId.

Мне нужен refreshId, чтобы опросить его статус, чтобы определить, удалось ли это.

Я использовал следующий код Powershell для обновления набора данных.

Пожалуйста, дайте мне знать, как я могу вернуть поле местоположения в заголовке ответа.

      Login-PowerBI
$XmlaQuery = @"
{
  "refresh": {
    "type": "full",
    "objects": [
      {
        "database": "<Datamodel>",
        "table": "<Table>"
      }
    ]
  }
}
"@

# URL is a relative or absolute URL of the Power BI entity to access. 
Invoke-PowerBIRestMethod -Url 'datasets/<datasetid>/refreshes' -Method Post -Body $XmlaQuery 

Я понял, что Invoke-PowerBIRestMethod не имеет свойства заголовка. Я попробовал то же самое, используя Invoke-WebRequest, и включил ответ.

      
$XmlaQuery = @"
{
  "refresh": {
    "type": "full",
    "objects": [
      {
        "database": "<Datamodel>",
        "table": "<Table>"
      }
    ]
  }
}
"@

# URL is a relative or absolute URL of the Power BI entity to access.
Login-PowerBIServiceAccount  
$headers = Get-PowerBIAccessToken
$Response = Invoke-WebRequest  -Uri 'https://api.powerbi.com/v1.0/myorg/groups/<workspaceid>/datasets/<datasetid>/refreshes' -Method Post -Body $XmlaQuery -Headers $headers
$Response.Headers | Format-Table
$Response.StatusCode

Ответ (с кодом состояния 202):

      Key                           Value
---                           -----
Pragma                        no-cache
Transfer-Encoding             chunked
Strict-Transport-Security     max-age=31536000; includeSubDomains
X-Frame-Options               deny
X-Content-Type-Options        nosniff
RequestId                     <RequestId>
Access-Control-Expose-Headers RequestId
request-redirected            true
home-cluster-uri              https://wabi-north-europe-f-primary-redirect.analysis.windows.net/
Cache-Control                 no-store, must-revalidate, no-cache
Content-Type                  application/octet-stream
Date                          Mon, 17 Jan 2022 16:09:30 GMT

2 ответа

Почему после обновления POST вы просто не проверяете, есть ли новый идентификатор запроса из метода GET?

ПОЛУЧИТЬ https://api.powerbi.com/v1.0/myorg/datasets/{datasetId}/refreshes?$top={$top}

должен быть "refreshType": "ViaApi" и StartTime, а также статус "inProgress"/"Completed"/"not start"

      {
  "value": [
    {
      "refreshType": "ViaApi",
      "startTime": "2017-06-13T09:25:43.153Z",
      "endTime": "2017-06-13T09:31:43.153Z",
      "status": "Completed",
      "requestId": "9399bb89-25d1-44f8-8576-136d7e9014b1"
    }
  ]
}

Возможно, попробуйте удалить слой «обновить» в теле запроса. Судя по общедоступной документации, он не содержит этого слоя. А также установите «Content-Type: application/json» в заголовке запроса.

Другие вопросы по тегам