Realizar operaciones por lotes (XMLA)

Puede usar el comando Batch en XML for Analysis (XMLA) para ejecutar varios comandos XMLA mediante un único método Execute de XMLA. Puede ejecutar varios comandos contenidos en el comando batch como una sola transacción o en transacciones individuales para cada comando, en serie o en paralelo. También puede especificar enlaces fuera de línea y otras propiedades en el comando Batch para procesar varios objetos de Microsoft SQL Server SQL Server Analysis Services.

Ejecutar comandos Batch transaccionales y no transaccionales

El comando Batch ejecuta comandos de una de estas dos maneras:

Transaccional
Si el atributo Transaction del comando Batch se establece en true, el comando Batch ejecuta todos los comandos contenidos por el comando Batch en un único lote transaccional .

Si se produce un error en algún comando en un lote transaccional, SQL Server Analysis Services revierte cualquier comando del comando Batch que se ejecutó antes del comando que produjo un error y el comando batch finaliza inmediatamente. Los comandos del comando batch que aún no se han ejecutado no se ejecutan. Una vez finalizado el comando batch , el comando batch notifica los errores que se produjeron para el comando con errores.

No transaccional
Si el atributo Transaction se establece en false, el comando Batch ejecuta cada comando contenido por el comando Batch en un lote no transaccional independiente. Si se produce un error en algún comando en un lote no transaccional, el comando Batch continúa ejecutando comandos después del comando que produjo un error. Después de que el comando Batch intente ejecutar todos los comandos que contiene el comando batch , el comando Batch notifica los errores que se produjeron.

Todos los resultados devueltos por los comandos contenidos en un comando de Batch se devuelven en el mismo orden en que los comandos se encuentran en el comando batch . Los resultados devueltos por un comando de Batch varían en función de si el comando batch es transaccional o no transaccional.

Nota

Si un comando de Batch contiene un comando que no devuelve la salida, como el comando Lock y ese comando se ejecuta correctamente, el comando Batch devuelve un elemento raíz vacío dentro del elemento results. El elemento raíz vacío garantiza que cada comando contenido en un comando batch pueda coincidir con el elemento raíz adecuado para los resultados de ese comando.

Devolver resultados de lotes transaccionales

Los resultados de los comandos que se ejecutan dentro de un lote transaccional no se devuelven hasta que se complete todo el comando batch . Los resultados no se devuelven después de que se ejecute cada comando porque cualquier comando que produzca un error en un lote transaccional provocaría que se revierta todo el comando Batch y todos los comandos que contienen se revertirán. Si todos los comandos se inician y se ejecutan correctamente, el elemento return del elemento ExecuteResponse devuelto por el método Execute para el comando Batch contiene un elemento results , que a su vez contiene un elemento raíz para cada comando ejecutado correctamente incluido en el comando Batch . Si no se puede iniciar ningún comando del comando de Batch o no se puede completar, el método Execute devuelve un error SOAP para el comando Batch que contiene el error del comando que produjo un error.

Devolver resultados de lotes no transaccionales

Los resultados de los comandos que se ejecutan dentro de un lote no transaccional se devuelven en el orden en que los comandos están incluidos en el comando Batch y a medida que devuelven cada comando. Si no se puede iniciar correctamente ningún comando incluido en el comando Batch , el método Execute devuelve un error SOAP que contiene un error para el comando Batch . Si se inicia correctamente un comando, el elemento return del elemento ExecuteResponse devuelto por el método Execute para el comando Batch contiene un elemento results , que a su vez contiene un elemento raíz para cada comando contenido en el comando Batch . Si uno o varios comandos de un lote no transaccional no se pueden iniciar o no se pueden completar, el elemento raíz para ese comando con error contiene un elemento de error que describe el error.

Nota

Siempre que se pueda iniciar al menos un comando en un lote no transaccional, se considera que el lote no transaccional se ha ejecutado correctamente, incluso si cada comando contenido en el lote no transaccional devuelve un error en los resultados del comando Batch .

Utilizar la ejecución en serie y en paralelo

Puede usar el comando Batch para ejecutar comandos incluidos en serie o en paralelo. Cuando los comandos se ejecutan en serie, el siguiente comando incluido en el comando batch no puede iniciarse hasta que se complete el comando que se está ejecutando actualmente en el comando de Batch . Cuando los comandos se ejecutan en paralelo, el comando Batch puede ejecutar varios comandos simultáneamente.

Para ejecutar comandos en paralelo, agregue los comandos que se ejecutarán en paralelo a la propiedad Parallel del comando Batch . Actualmente, SQL Server Analysis Services solo puede ejecutar comandos contiguos y secuenciales process en paralelo. Cualquier otro comando XMLA, como Create o Alter, incluido en la propiedad Parallel se ejecuta en serie.

SQL Server Analysis Services intenta ejecutar todos los comandos Process incluidos en la propiedad Parallel en paralelo, pero no puede garantizar que todos los comandos Process incluidos se puedan ejecutar en paralelo. La instancia analiza cada comando Process y, si la instancia determina que el comando no se puede ejecutar en paralelo, el comando Process se ejecuta en serie.

Nota

Para ejecutar comandos en paralelo, el atributo Transaction del comando Batch debe establecerse en true porque SQL Server Analysis Services solo admite una transacción activa por conexión y los lotes no transaccionales ejecutan cada comando en una transacción independiente. Si incluye la propiedad Parallel en un lote no transaccional, se produce un error.

Limitar la ejecución en paralelo

Una instancia de SQL Server Analysis Services intenta ejecutar tantos comandos process en paralelo como sea posible, hasta los límites del equipo en el que se ejecuta la instancia. Puede limitar el número de comandos Process que se ejecutan simultáneamente estableciendo el atributo maxParallel de la propiedad Parallel en un valor que indica el número máximo de comandos Process que se pueden ejecutar en paralelo.

Por ejemplo, una propiedad Parallel contiene los siguientes comandos en la secuencia enumerada:

  1. Creación

  2. Process

  3. Alterar

  4. Process

  5. Process

  6. Process

  7. Eliminar

  8. Process

  9. Process

El atributo maxParallel de esta propiedad Parallel se establece en 2. Por lo tanto, la instancia ejecuta la lista de comandos anteriores como se describe en la lista siguiente:

  • El comando 1 se ejecuta en serie porque el comando 1 es un comando Create y solo los comandos Process se pueden ejecutar en paralelo.

  • El comando 2 se ejecuta en serie una vez completado el comando 1.

  • El comando 3 se ejecuta en serie una vez completado el comando 2.

  • Los comandos 4 y 5 se ejecutan en paralelo una vez completado el comando 3. Aunque el comando 6 también es un comando Process , el comando 6 no se puede ejecutar en paralelo con los comandos 4 y 5 porque la propiedad maxParallel está establecida en 2.

  • El comando 6 se ejecuta en serie una vez completados los comandos 4 y 5.

  • El comando 7 se ejecuta en serie una vez completado el comando 6.

  • Los comandos 8 y 9 se ejecutan en paralelo una vez completado el comando 7.

Utilizar el comando Batch para procesar objetos

El comando Batch contiene varias propiedades y atributos opcionales incluidos específicamente para admitir el procesamiento de varios proyectos de SQL Server Analysis Services:

  • El atributo ProcessAffectedObjects del comando Batch indica si la instancia también debe procesar cualquier objeto que requiera reprocesamiento como resultado de un comando Process incluido en el comando Batch que procesa un objeto especificado.

  • La propiedad Bindings contiene una colección de enlaces fuera de línea usados por todos los comandos Process del comando Batch .

  • La propiedad DataSource contiene un enlace fuera de línea para un origen de datos usado por todos los comandos Process del comando Batch .

  • La propiedad DataSourceView contiene un enlace fuera de línea para una vista del origen de datos utilizada por todos los comandos Process del comando Batch .

  • La propiedad ErrorConfiguration especifica la forma en que el comando Batch controla los errores detectados por todos los comandos Process contenidos en el comando Batch .

    Importante

    Un comando Process no puede incluir las propiedades Bindings, DataSource, DataSourceView o ErrorConfiguration , si el comando Process está incluido en un comando batch . Si debe especificar estas propiedades para un comando Process , proporcione la información necesaria en las propiedades correspondientes del comando Batch que contiene el comando Process .

Consulte también

Elemento Batch (XMLA)
Elemento Process (XMLA)
Procesar un modelo multidimensional (Analysis Services)
Desarrollar con XMLA en Analysis Services