Hasta ahora el conjunto incremental de datos venía dado por nuestro data source view, pero esto no siempre es cierto, hay ocasiones en los que si bien los datos de las dimensiones se generan de forma incremental, las tablas de hechos utilizan datos anteriores al periodo de procesamiento y necesitan que la consulta del data source view devuelva toda la información de la dimensión para realizar un procesamiento correcto de nuestros grupos de medida.

En esos casos, la solución pasa por generar un esquema específico que asociaremos a nuestra dimensión en el script de procesamiento incremental. Dicho esquema contendrá la consulta que si va a proporcionarnos el conjunto de datos a añadir en nuestro procesamiento.

El primer paso es generar el script del data source con la información de conexión a nuestra fuente de datos. Desde el SQL Server Managemet Studio botón derecho sobre nuestra fuente de datos y generamos el script correspondiente.

En este script eliminamos lo tags referentes a ImpersonationInfo y copiamos el resto de la definición del dataSource debajo del comando ProcessAdd. En este punto el script XML tendrá un aspecto parecido a este:

<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>

 

<DataSource 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» xsi:type=«RelationalDataSource«>

<ID>ProcesoIncremental</ID>

<Name>ProcesoIncremental</Name>

<ConnectionString>Provider=SQLNCLI.1;Data Source=.;Integrated Security=SSPI;Initial Catalog=Varios</ConnectionString>

<Timeout>PT0S</Timeout>

</DataSource>

 

 

</Process>

</Parallel>

</Batch>

 

A través de BIDS (Visual Studio) generamos un Data Source View que contenga únicamente la consulta que va a devolver nuestro conjunto incremental de datos y le llamamos igual que el Data Source View al que tenemos originalmente asociada la dimensión.

En el explorador de soluciones pulsamos botón derecho sobre el Data Source View y seleccionamos ‘view code’. Copiamos el código XML dentro de nuestro script XMLA debajo de la definición del Data Source y ya tendremos nuestro script listo. Si queremos que el script sea algo más corto, se puede eliminar la sección Annotations dentro de la definición del Data Source View.

<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>

 

<DataSource 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» xsi:type=«RelationalDataSource«>

<ID>ProcesoIncremental</ID>

<Name>ProcesoIncremental</Name>

<ConnectionString>Provider=SQLNCLI.1;Data Source=.;Integrated Security=SSPI;Initial Catalog=Varios</ConnectionString>

<Timeout>PT0S</Timeout>

</DataSource>

 

 

<DataSourceView 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«>

<ID>Varios</ID>

<Name>Varios</Name>

<DataSourceID>ProcesoIncremental</DataSourceID>

<Schema>

<xs:schema id=«Varios» xmlns=«» xmlns:xs=«http://www.w3.org/2001/XMLSchema» xmlns:msdata=«urn:schemas-microsoft-com:xml-msdata» xmlns:msprop=«urn:schemas-microsoft-com:xml-msprop«>

<xs:element name=«Varios» msdata:IsDataSet=«true» msdata:UseCurrentLocale=«true«>

<xs:complexType>

<xs:choice minOccurs=«0» maxOccurs=«unbounded«>

<xs:element name=«dbo_Hora» msprop:FriendlyName=«Hora» msprop:QueryBuilder=«SpecificQueryBuilder» msprop:DbTableName=«Hora» msprop:QueryDefinition=«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 &gt;= RangoIncremental.Idfrom AND Hora.Idhora &lt;= RangoIncremental.Idto» msprop:TableType=«View» msprop:IsLogical=«True«>

<xs:complexType>

<xs:sequence>

<xs:element name=«Idhora» msprop:FriendlyName=«Idhora» msprop:DbColumnName=«Idhora» type=«xs:int« />

<xs:element name=«DescripcionHora» msprop:FriendlyName=«DescripcionHora» msprop:DbColumnName=«DescripcionHora» minOccurs=«0«>

<xs:simpleType>

<xs:restriction base=«xs:string«>

<xs:maxLength value=«50« />

</xs:restriction>

</xs:simpleType>

</xs:element>

<xs:element name=«NombreHora24» msprop:FriendlyName=«NombreHora24» msprop:DbColumnName=«NombreHora24» minOccurs=«0«>

<xs:simpleType>

<xs:restriction base=«xs:string«>

<xs:maxLength value=«50« />

</xs:restriction>

</xs:simpleType>

</xs:element>

<xs:element name=«Hora» msprop:FriendlyName=«Hora» msprop:DbColumnName=«Hora» type=«xs:unsignedByte» minOccurs=«0« />

<xs:element name=«NombreHora» msprop:FriendlyName=«NombreHora» msprop:DbColumnName=«NombreHora» minOccurs=«0«>

<xs:simpleType>

<xs:restriction base=«xs:string«>

<xs:maxLength value=«10« />

</xs:restriction>

</xs:simpleType>

</xs:element>

<xs:element name=«Minuto» msprop:FriendlyName=«Minuto» msprop:DbColumnName=«Minuto» type=«xs:unsignedByte» minOccurs=«0« />

<xs:element name=«IdMinuto» msprop:FriendlyName=«IdMinuto» msprop:DbColumnName=«IdMinuto» type=«xs:int» minOccurs=«0« />

<xs:element name=«NombreMinuto» msprop:FriendlyName=«NombreMinuto» msprop:DbColumnName=«NombreMinuto» minOccurs=«0«>

<xs:simpleType>

<xs:restriction base=«xs:string«>

<xs:maxLength value=«20« />

</xs:restriction>

</xs:simpleType>

</xs:element>

<xs:element name=«Hora24» msprop:FriendlyName=«Hora24» msprop:DbColumnName=«Hora24» type=«xs:unsignedByte» minOccurs=«0« />

<xs:element name=«AM» msprop:FriendlyName=«AM» msprop:DbColumnName=«AM» minOccurs=«0«>

<xs:simpleType>

<xs:restriction base=«xs:string«>

<xs:maxLength value=«2« />

</xs:restriction>

</xs:simpleType>

</xs:element>

</xs:sequence>

</xs:complexType>

</xs:element>

<xs:element name=«dbo_RangoIncremental» msprop:FriendlyName=«RangoIncremental» msprop:DbSchemaName=«dbo» msprop:DbTableName=«RangoIncremental» msprop:TableType=«Table«>

<xs:complexType>

<xs:sequence>

<xs:element name=«Idfrom» msprop:FriendlyName=«Idfrom» msprop:DbColumnName=«Idfrom» type=«xs:int» minOccurs=«0« />

<xs:element name=«Idto» msprop:FriendlyName=«Idto» msprop:DbColumnName=«Idto» type=«xs:int» minOccurs=«0« />

</xs:sequence>

</xs:complexType>

</xs:element>

</xs:choice>

</xs:complexType>

<xs:unique name=«Constraint1» msprop:IsLogical=«True» msdata:PrimaryKey=«true«>

<xs:selector xpath=«.//dbo_Hora« />

<xs:field xpath=«Idhora« />

</xs:unique>

</xs:element>

</xs:schema>

<diffgr:diffgram xmlns:msdata=«urn:schemas-microsoft-com:xml-msdata» xmlns:diffgr=«urn:schemas-microsoft-com:xml-diffgram-v1« />

</Schema>

</DataSourceView>

 

</Process>

</Parallel>

</Batch>

 

Otra alternativa es editar el Data Source View antes del proceso incremental de la dimensión y modificar la consulta de forma adecuada, asegurándonos que la consulta original se vuelve a restaurar antes del procesamiento de los grupos de medida para que estos puedan utilizar el contenido completo de la dimensión y no solo la parte incremental.