Como comentamos anteriormente, cuando se realiza un procesamiento incremental de una dimensión donde el nuevo conjunto de datos se solapa con los datos existentes, la información no se va a duplicar. La información anterior se mantiene y se incorpora la información nueva.

Para nuestro ejemplo, vamos a utilizar una dimensión Hora en la que el atributo clave Hora va a ser visible en la exploración de la dimensión.

El atributo hora tiene como propiedad NameColumn el nombre del minuto y como clave el Id del minuto.

La dimensión Hora está asociada a una consulta en el Data Source View que nos ayuda en el procesamiento incremental

SELECT Hora.Idhora,

         Hora.DescripcionHora,

         Hora.NombreHora24,

         Hora.Hora,

         Hora.NombreHora,

         Hora.Minuto,

         Hora.IdMinuto,

         Hora.NombreMinuto,

Hora.Hora24,

         Hora.AM

FROM Hora

        INNER JOIN RangoIncremental ON

                Hora.Idhora >= RangoIncremental.Idfrom

            AND Hora.Idhora <= RangoIncremental.Idto

Donde la tabla RangoIncremental determina el rango de claves a procesar cada vez.

Vamos a inicializar la tabla RangoIncremental con los valores IdFrom = 0 e IdTo = 10 y a continuación vamos a inicializar la dimensión con un procesamiento completo con el siguiente script:

<Batch xmlns=«http://schemas.microsoft.com/analysisservices/2003/engine«>

<Parallel>

<Process xmlns:xsd=«http://www.w3.org/2001/XMLSchema» xmlns:xsi=«http://www.w3.org/2001/XMLSchema-instance» xmlns:ddl2=«http://schemas.microsoft.com/analysisservices/2003/engine/2» xmlns:ddl2_2=«http://schemas.microsoft.com/analysisservices/2003/engine/2/2«>

<Object>

<DatabaseID>ProcesoIncremental</DatabaseID>

<DimensionID>Hora</DimensionID>

</Object>

<Type>ProcessFull</Type>

<WriteBackTableCreation>UseExisting</WriteBackTableCreation>

</Process>

</Parallel>

</Batch>

En este momento, al navegar por los miembros de la dimensión Hora vemos que solo tenemos los 10 elementos que acabamos de incorporar

A continuación vamos a modificar la descripción del minuto 00:09 AM en la tabla fuente Hora con la etiqueta ’00:09 AM Nueva’ y vamos a actualizar el contenido de la tabla Proceso Incremental para que el siguiente procesamiento maneje las horas con valores entre 8 y 20.

Ahora si vamos a ejecutar un procesamiento incremental con el siguiente script

<Batch xmlns=«http://schemas.microsoft.com/analysisservices/2003/engine«>

<Parallel>

<Process xmlns:xsd=«http://www.w3.org/2001/XMLSchema» xmlns:xsi=«http://www.w3.org/2001/XMLSchema-instance» xmlns:ddl2=«http://schemas.microsoft.com/analysisservices/2003/engine/2» xmlns:ddl2_2=«http://schemas.microsoft.com/analysisservices/2003/engine/2/2«>

<Object>

<DatabaseID>ProcesoIncremental</DatabaseID>

<DimensionID>Hora</DimensionID>

</Object>

<Type>ProcessAdd</Type>

<WriteBackTableCreation>UseExisting</WriteBackTableCreation>

</Process>

</Parallel>

</Batch>

Cuando navegamos por los miembros de la dimensión, vemos como el minuto 8 sigue manteniendo la misma etiqueta que se había almacenado en el procesamiento inicial, pero ahora vemos los primeros 20 elementos de nuestra tabla Hora

Si hubiéramos ejecutado un ProcessUpdate la etiqueta se hubiera actualizado pero hubiéramos perdido aquellos elementos que se encontraran fuera del rango definido en nuestra tabla RangoIncremental