Actualización mejorada con la API REST de Power BI
Puede usar cualquier lenguaje de programación que admita llamadas REST para realizar operaciones de actualización de modelos semánticas mediante la API REST de actualización del conjunto de datos de Power BI.
La actualización optimizada para modelos con particiones grandes y complejas se invoca tradicionalmente con métodos de programación que usan TOM (modelo de objetos tabulares), cmdlets de PowerShell o TMSL (lenguaje de scripting de modelos tabulares). Sin embargo, estos métodos requieren conexiones HTTP de larga duración que pueden no ser confiables.
La API REST de Power BI para refrescar conjuntos de datos puede llevar a cabo operaciones de actualización de modelos asincrónicamente, por lo que no se necesitan conexiones HTTP de larga duración desde aplicaciones cliente. En comparación con las operaciones estándar de actualización, la actualización mejorada con la API REST proporciona más opciones de personalización y las siguientes características que son útiles para los modelos grandes:
- Confirmaciones por lotes
- Actualización de nivel de tabla y partición
- Aplicación de directivas de actualización incremental
- Detalles de la actualización de
GET
- Cancelación de actualización
- Configuración de tiempo de espera
Nota
- Anteriormente, la actualización mejorada se llamaba actualización asincrónica con la API REST. Sin embargo, una actualización estándar que usa la API REST Refresh Dataset también se ejecuta de forma asincrónica por su naturaleza inherente.
- Las operaciones mejoradas de actualización de la API REST de Power BI no actualizan automáticamente las cachés de iconos. Las cachés de iconos solo se actualizan cuando un usuario accede a un informe.
Base URL
La dirección URL base tiene el formato siguiente:
https://api.powerbi.com/v1.0/myorg/groups/{groupId}/datasets/{datasetId}/refreshes
Puede anexar recursos y operaciones a la dirección URL base en función de los parámetros. En el diagrama siguiente, los grupos, los conjuntos de datos y las actualizaciones son colecciones. Grupo, Conjunto de datosy Actualización son objetos .
Requisitos
Necesita los siguientes requisitos para usar la API REST:
- Un modelo semántico en Power BI Premium, Premium por usuario o Power BI Embedded.
- Un identificador de grupo y un identificador de conjunto de datos que se van a usar en la dirección URL de solicitud.
- Ámbito de permiso Dataset.ReadWrite.All.
El número de actualizaciones se limita según las limitaciones generales de las actualizaciones basadas en API para los modelos Pro y Premium.
Autenticación
Todas las llamadas deben autenticarse con un token de OAuth 2 válido de Microsoft Entra ID en el encabezado autorización. El token debe cumplir los siguientes requisitos:
- Ser un token de usuario o una entidad de servicio de aplicación.
- Establecer correctamente el público en
https://api.powerbi.com
. - Use un usuario o una aplicación que tenga permisos suficientes en el modelo.
Nota
Las modificaciones de la API REST no cambian los permisos definidos actualmente para las actualizaciones del modelo.
POST/actualizaciones
Para realizar una actualización, use el verbo POST de la colección /refreshes para agregar un nuevo objeto de actualización a la colección. El encabezado Ubicación de la respuesta incluye el requestId
. Dado que la operación es asincrónica, una aplicación cliente puede desconectar y usar el requestId
para comprobar el estado más adelante si es necesario.
El código siguiente muestra una solicitud de ejemplo:
POST https://api.powerbi.com/v1.0/myorg/groups/f089354e-8366-4e18-aea3-4cb4a3a50b48/datasets/cfafbeb1-8037-4d0c-896e-a46fb27ff229/refreshes
El cuerpo de la solicitud podría parecerse al ejemplo siguiente:
{
"type": "Full",
"commitMode": "transactional",
"maxParallelism": 2,
"retryCount": 2,
"timeout": "02:00:00",
"objects": [
{
"table": "DimCustomer",
"partition": "DimCustomer"
},
{
"table": "DimDate"
}
]
}
Nota
El servicio solo acepta una operación de actualización a la vez para un modelo. Si hay una actualización en ejecución actual y se envía otra solicitud, se devuelve un 400 Bad Request
código de estado HTTP.
Parámetros
Para realizar una operación de actualización mejorada, debe especificar uno o varios parámetros en el cuerpo de la solicitud. Los parámetros especificados pueden especificar el valor predeterminado o opcional. Cuando la solicitud especifica parámetros, todos los demás parámetros se aplican a la operación con sus valores predeterminados. Si la solicitud no especifica ningún parámetro, todos los parámetros usan sus valores predeterminados y se produce una operación de actualización estándar.
Nombre | Tipo | Predeterminado | Descripción |
---|---|---|---|
type |
Enumeración | automatic |
Tipo de procesamiento que se va a realizar. Los tipos se alinean con los tipos de comandos de actualización de TMSL: full , clearValues , calculate , dataOnly , automatic y defragment . El tipo add no es soportado. |
commitMode |
Enumeración | transactional |
Determina si se deben confirmar los objetos en lotes o únicamente cuando estén completamente listos. Los modos son transactional y partialBatch . Cuando se usa partialBatch la operación de actualización no se produce dentro de una transacción. Cada comando se confirma individualmente. Si se produce un error, el modelo podría estar vacío o incluir solo un subconjunto de los datos. Para proteger contra errores y mantener los datos que se encontraban en el modelo antes de iniciar la operación, ejecute la operación con commitMode = transactional . |
maxParallelism |
Int | 10 |
Determina el número máximo de subprocesos que pueden ejecutar los comandos de procesamiento en paralelo. Este valor se alinea con la propiedad MaxParallelism que se puede establecer en el comando tmSL Sequence o mediante otros métodos. |
retryCount |
Int | 0 |
Número de veces que se reintenta la operación antes de fallar. |
objects |
Matriz | Modelo completo | Matriz de objetos que se van a procesar. Cada objeto incluye table al procesar una tabla completa o table y partition al procesar una partición. Si no se especifica ningún objeto, se actualiza todo el modelo. |
applyRefreshPolicy |
Booleano | true |
Si se define una directiva de actualización incremental, determina si se debe aplicar la directiva. Los modos son true o false . Si no se aplica la directiva, el proceso completo deja sin cambios las definiciones de partición y actualiza completamente todas las particiones de la tabla. Si commitMode es transactional , applyRefreshPolicy puede ser true o false . Si commitMode es partialBatch , no se admite applyRefreshPolicy de true y applyRefreshPolicy debe establecerse en false . |
effectiveDate |
Fecha | Fecha actual | Si se aplica una directiva de actualización incremental, el parámetro effectiveDate invalida la fecha actual. Si no se especifica, el día actual se determina mediante la configuración de zona horaria en "Actualizar". |
timeout |
Cuerda | 05:00:00 (5 horas) | Si se especifica un timeout , cada intento de actualización de datos en el modelo semántico se adhiere a ese tiempo de espera. Una única solicitud de actualización puede incluir varios intentos si se especifica retryCount , lo que puede hacer que la duración total de la actualización supere el tiempo de espera especificado. Por ejemplo, establecer un timeout de 1 hora con un retryCount de 2 podría dar lugar a una duración total de actualización de hasta 3 horas. Los usuarios pueden ajustar el timeout para acortar la duración de la actualización para una detección de errores más rápida o ampliarla más allá de las 5 horas predeterminadas para las actualizaciones de datos más complejas. Sin embargo, la duración total de la actualización, incluidos los reintentos, no puede superar las 24 horas. |
Respuesta
202 Accepted
La respuesta también incluye un campo de encabezado de respuesta Location
para dirigir al autor de la llamada a la operación de actualización que se ha creado y aceptado. Location
es la ubicación del nuevo recurso que ha creado la solicitud, que incluye el requestId
que algunas operaciones de actualización mejoradas requieren. Por ejemplo, en la siguiente respuesta, requestId
es el último identificador de la respuesta 87f31ef7-1e3a-4006-9b0b-191693e79e9e
.
x-ms-request-id: 87f31ef7-1e3a-4006-9b0b-191693e79e9e
Location: https://api.powerbi.com/v1.0/myorg/groups/f089354e-8366-4e18-aea3-4cb4a3a50b48/datasets/cfafbeb1-8037-4d0c-896e-a46fb27ff229/refreshes/87f31ef7-1e3a-4006-9b0b-191693e79e9e
GET/actualizaciones
Use el verbo GET en la colección /refreshes para enumerar las operaciones históricas, actuales y pendientes de actualización.
El cuerpo de la respuesta podría tener un aspecto similar al del ejemplo siguiente:
[
{
"requestId": "1344a272-7893-4afa-a4b3-3fb87222fdac",
"refreshType": "ViaEnhancedApi",
"startTime": "2020-12-07T02:06:57.1838734Z",
"endTime": "2020-12-07T02:07:00.4929675Z",
"status": "Completed",
"extendedStatus": "Completed"
},
{
"requestId": "474fc5a0-3d69-4c5d-adb4-8a846fa5580b",
"startTime": "2020-12-07T01:05:54.157324Z",
"refreshType": "ViaEnhancedApi",
"status": "Unknown"
}
{
"requestId": "85a82498-2209-428c-b273-f87b3a1eb905",
"refreshType": "ViaEnhancedApi",
"startTime": "2020-12-07T01:05:54.157324Z",
"status": "Unknown",
"extendedStatus": "NotStarted"
}
]
Nota
Power BI podría quitar solicitudes si hay demasiadas solicitudes en un breve período de tiempo. Power BI realiza una actualización, pone en cola la siguiente solicitud y quita todos los demás. Por diseño, no se puede consultar el estado de las solicitudes eliminadas.
Propiedades de respuesta
Nombre | Tipo | Descripción |
---|---|---|
requestId |
GUID | Identificador de la solicitud de actualización. Necesita utilizar requestId para consultar el estado de la operación de actualización individual o cancelar una operación de actualización en curso. |
refreshType |
Cuerda | OnDemand indica que la actualización se desencadenó de forma interactiva a través del portal de Power BI.Scheduled indica que una programación de actualización del modelo desencadenó la actualización. ViaApi indica que una llamada API desencadenó la actualización. ViaEnhancedApi indica que una llamada API desencadenó una actualización mejorada. |
startTime |
Cuerda | Fecha y hora de inicio de la actualización. |
endTime |
Cuerda | Fecha y hora de finalización de la actualización. |
status |
Cuerda | Completed indica que la operación de actualización se completó correctamente. Failed indica que se produjo un error en la operación de actualización. Unknown indica que no se puede determinar el estado de finalización. Con este estado, endTime está vacío. Disabled indica que la actualización se ha deshabilitado mediante la actualización selectiva. Cancelled indica que la actualización se canceló correctamente. |
extendedStatus |
Cuerda | Aumenta la propiedad status para proporcionar más información. |
Nota
En Azure Analysis Services, el resultado de status
completado es succeeded
. Si migra una solución de Azure Analysis Services a Power BI, es posible que tenga que modificar las soluciones.
Limitar el número de operaciones de actualización devueltas
La API rest de Power BI admite la limitación del número solicitado de entradas en el historial de actualizaciones mediante el parámetro opcional $top
. Si no se especifica, el valor predeterminado es todas las entradas disponibles.
GET https://api.powerbi.com/v1.0/myorg/groups/{groupId}/datasets/{datasetId}/refreshes?$top={$top}
GET /refreshes/<requestId>
Para comprobar el estado de una operación de actualización, use el verbo GET en el objeto refresh especificando el requestId
. Si la operación está en curso, status
devuelve InProgress
, como en el cuerpo de la respuesta de ejemplo siguiente:
{
"startTime": "2020-12-07T02:06:57.1838734Z",
"endTime": "2020-12-07T02:07:00.4929675Z",
"type": "Full",
"status": "InProgress",
"currentRefreshType": "Full",
"objects": [
{
"table": "DimCustomer",
"partition": "DimCustomer",
"status": "InProgress"
},
{
"table": "DimDate",
"partition": "DimDate",
"status": "InProgress"
}
]
}
DELETE /refreshes/<requestId>
Para cancelar una operación de actualización mejorada en curso, use el verbo DELETE en el objeto refresh especificando el requestId
.
Por ejemplo
DELETE https://api.powerbi.com/v1.0/myorg/groups/f089354e-8366-4e18-aea3-4cb4a3a50b48/datasets/cfafbeb1-8037-4d0c-896e-a46fb27ff229/refreshes/1344a272-7893-4afa-a4b3-3fb87222fdac
Consideraciones y limitaciones
La operación de actualización tiene las siguientes consideraciones y limitaciones:
Operaciones de actualización estándar
- No se pueden cancelar las actualizaciones programadas o bajo demanda del modelo que se desencadenaron al seleccionar el botón Actualizar en el portal mediante
DELETE /refreshes/<requestId>
. - Las actualizaciones programadas y a petición del modelo que se desencadenaron seleccionando el botón Actualizar en el portal, no admiten la obtención de detalles de la operación de actualización mediante
GET /refreshes/<requestId>
. - Más información y Cancelar son operaciones nuevas solo para la actualización mejorada. La actualización estándar no admite estas operaciones.
Power BI Embedded
Si la capacidad se pausa manualmente en el portal de Power BI o mediante PowerShell, o se produce una interrupción del sistema, el estado de cualquier operación de actualización mejorada en curso permanece InProgress
durante un máximo de seis horas. Si la capacidad se reanuda en un plazo de seis horas, la operación de actualización se reanuda automáticamente. Si la capacidad se reanuda después de más de seis horas, la operación de actualización podría devolver un error de tiempo de espera. A continuación, debe reiniciar la operación de actualización.
Expulsión del modelo semántico
Power BI usa la administración dinámica de memoria para optimizar la memoria de capacidad. Si el modelo se expulsa de la memoria durante una operación de actualización, es posible que se devuelva el siguiente error:
{
"messages": [
{
"code": "0xC11C0020",
"message": "Session cancelled because it is connected to a database that has been evicted to free up memory for other operations",
"type": "Error"
}
]
}
La solución consiste en volver a ejecutar la operación de actualización. Para obtener más información sobre la administración dinámica de memoria y la expulsión de modelos, consulte expulsión de modelos.
Límites de tiempo de la operación de actualización
Una operación de actualización puede incluir varios intentos si se especifica retryCount
. Cada intento tiene un tiempo de espera predeterminado de 5 horas, que se puede ajustar mediante el parámetro timeout
. La duración total de la actualización, incluidos los reintentos, no debe superar las 24 horas.
Si retryCount
especifica un número, una nueva operación de actualización comienza con el límite de tiempo de espera. El servicio reintenta esta operación hasta que tiene éxito, llega al límite de retryCount
, o alcanza el máximo de 24 horas desde el primer intento.
Puede ajustar el timeout
para acortar la duración de la actualización para una detección de errores más rápida o ampliarla más allá de las 5 horas predeterminadas para las actualizaciones de datos más complejas.
Al planear la actualización del modelo semántico con la API REST Refresh Dataset, considere los límites de tiempo y el parámetro retryCount. Una actualización puede superar el tiempo de espera si se produce un error en el intento inicial y retryCount está establecido en 1 o más. Si solicita una actualización con "retryCount": 1 y el primer intento produce un error después de 4 horas, comienza un segundo intento. Si esto se realiza correctamente en 3 horas, el tiempo total de la actualización es de 7 horas.
Si se produce un error en las operaciones de actualización periódicamente, supere el límite de tiempo de espera o supere el tiempo de operación de actualización correcto deseado, considere la posibilidad de reducir la cantidad de datos que se actualizan desde el origen de datos. Puede dividir la actualización en varias solicitudes, por ejemplo, una solicitud para cada tabla. También puede especificar partialBatch en el parámetro commitMode.
Ejemplo de código
Para obtener un ejemplo de código de C# para empezar, consulte restApiSample en GitHub.
Para usar el ejemplo de código:
- Clona o descarga el repositorio.
- Abra la solución RestApiSample.
- Busque la línea
client.BaseAddress = …
y proporcione su URL base .
El ejemplo de código usa la autenticación de entidad de servicio.