Realizar operaciones por lotes (XMLA)

En XML for Analysis (XMLA), puede utilizar el comando Batch para ejecutar varios comandos XMLA con un solo método Execute de XMLA. Puede ejecutar varios comandos incluidos en el comando Batch, ya sea como transacción única 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 MicrosoftSQL ServerAnalysis Services.

Ejecutar comandos Batch transaccionales y no transaccionales

El comando Batch ejecuta los comandos de una de las dos maneras siguientes:

  • Transaccional
    Si el atributo Transaction del comando Batch se establece en true, el comando Batch ejecuta todos los comandos incluidos en el comando Batch en una única transacción: un lote transaccional.

    Si se produce un error en cualquiera de los comandos de un lote transaccional, Analysis Services revierte todos los comandos contenidos en Batch que se hayan ejecutado antes del comando que produjo el error y el comando Batch finaliza inmediatamente. Los comandos contenidos en Batch que no se hayan ejecutado aún, no se ejecutan. Una vez finalizado el comando Batch, dicho comando Batch informa de los errores que se han producido en el comando que no se pudo ejecutar.

  • No transaccional
    Si el atributo Transaction se establece en false, el comando Batch ejecuta cada uno de los comandos contenidos en Batch en una transacción independiente: un lote no transaccional. Si se produce un error de cualquiera de los comandos de un lote no transaccional, el comando Batch sigue ejecutando los comandos posteriores a aquel que produjo el error. Después de que el comando Batch intente ejecutar todos los comandos contenidos en Batch, dicho comando Batch informa de los errores que se han producido.

Todos los resultados devueltos por los comandos contenidos en un comando Batch se devuelven en el mismo orden en el que éstos están incluidos en el comando Batch. Los resultados devueltos por un comando Batch varían en función de que el comando Batch sea transaccional o no transaccional.

[!NOTA]

Si un comando Batch contiene un comando que no devuelve resultados, como el comando Lock, y dicho comando se ejecuta correctamente, el comando Batch devuelve un elemento root vacío dentro del elemento de resultados. El elemento root vacío se asegura de que cada uno de los comandos incluidos en un comando Batch pueda coincidir con el elemento root adecuado para los resultados de ese comando.

Devolver resultados de lotes transaccionales

Los resultados de los comandos ejecutados en un lote transaccional no se devuelven hasta que no se haya completado todo el comando Batch. No se devuelven resultados después de ejecutarse cada comando, ya que si se produce un error en cualquiera de los comandos de un lote transaccional, se revertiría el comando Batch completo y todos los comandos incluidos en éste. 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 root por cada comando ejecutado correctamente contenido en el comando Batch. Si cualquiera de los comandos incluidos en el comando Batch no se puede iniciar o completar, el método Execute devuelve un error de SOAP para el comando Batch que contiene el error del comando que no se ejecutó correctamente.

Devolver resultados de lotes no transaccionales

Los resultados de los comandos que se ejecutan en un lote no transaccional se devuelven en el orden en el que dichos comandos están incluidos dentro del comando Batch y según los devuelve cada comando. Si ninguno de los comandos contenidos en el comando Batch se puede iniciar correctamente, el método Execute devuelve un error de SOAP que contiene un error para el comando Batch. Si al menos uno de los comandos se inicia 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 root por cada comando incluido en el comando Batch. Si no se pueden iniciar o completar uno o más comandos de un lote no transaccional, el elemento root de dicho comando con errores contiene un elemento error que describe el error.

[!NOTA]

Siempre que se pueda iniciar al menos uno de los comandos de un lote no transaccional, se considera que dicho lote se ha ejecutado correctamente, incluso aunque cada comando incluido en el lote no transaccional devuelva un error en los resultados del comando Batch.

Utilizar la ejecución en serie y en paralelo

Puede utilizar el comando Batch para ejecutar los comandos incluidos en serie o en paralelo. Cuando los comandos se ejecutan en serie, el comando siguiente incluido en el comando Batch no se puede iniciar hasta que no se complete el comando actualmente en ejecución en el comando Batch. Cuando los comandos se ejecutan en paralelo, el comando Batch puede ejecutar varios comandos simultáneamente.

Para ejecutar los comandos en paralelo, agregue los comandos que se van a ejecutar en paralelo a la propiedad Parallel del comando Batch. Actualmente, Analysis Services sólo puede ejecutar en paralelo comandos Process contiguos y secuenciales. Cualquier otro comando XMLA, como Create o Alter, incluido en la propiedad Parallel se ejecuta en serie.

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 puedan ejecutarse en paralelo. La instancia analiza cada uno de los comandos Process y, si ésta determina que el comando no se puede ejecutar en paralelo, el comando Process se ejecuta en serie.

[!NOTA]

Para ejecutar los comandos en paralelo, el atributo Transaction del comando Batch debe establecerse en true, ya que Analysis Services sólo admite una transacción activa por conexión y los lotes no transaccionales ejecutan cada uno de los comandos 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 Analysis Services intenta ejecutar en paralelo tantos comandos Process como sea posible, hasta alcanzar los límites del equipo en el que se ejecuta la instancia. Para limitar el número de comandos Process que se ejecutan simultáneamente, establezca el atributo maxParallel de la propiedad Parallel en un valor que indique el número máximo de comandos Process que pueden ejecutarse en paralelo.

Por ejemplo, una propiedad Parallel contiene los siguientes comandos en el orden que se muestra:

  1. Create

  2. Process

  3. Alter

  4. Process

  5. Process

  6. Process

  7. Delete

  8. Process

  9. Process

El atributo maxParallel de esta propiedad Parallel se ha establecido 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 es un comando Create y solamente se pueden ejecutar en paralelo los comandos Process.

  • 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, éste no se puede ejecutar en paralelo con los comandos 4 y 5 porque la propiedad maxParallel se ha establecido 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 Analysis Services:

  • El atributo ProcessAffectedObjects del comando Batch indica si la instancia también debe procesar cualquier objeto que sea necesario volver a procesar como resultado de la inclusión de un comando Process en el comando Batch que procesa un objeto especificado.

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

  • La propiedad DataSource contiene un enlace fuera de línea para un origen de datos utilizado 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 que utilizan 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.

    Nota importanteImportante

    Un comando Process no puede incluir las propiedades Bindings, DataSource, DataSourceView o ErrorConfiguration si dicho 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.